Skip to content

Commit b507bb1

Browse files
authored
Merge pull request #104 from jumpserver/dev
v4.10.2
2 parents 7f5ad16 + 39b6786 commit b507bb1

8 files changed

Lines changed: 71 additions & 45 deletions

File tree

backend/framework/src/main/java/org/jumpserver/chen/framework/console/QueryConsole.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,18 @@ public void onConnect(Connect connect) {
8585
try {
8686
var currentContext = this.getSqlActuator().getCurrentSchema();
8787

88-
89-
if (StringUtils.isEmpty(context)) {
90-
context = currentContext;
91-
}
92-
93-
if (currentContext != null && !currentContext.equals(context)) {
88+
if (StringUtils.isEmpty(currentContext) && !StringUtils.isEmpty(context)) {
9489
this.getSqlActuator().changeSchema(context);
90+
this.getState().setCurrentContext(context);
91+
} else {
92+
if (!StringUtils.isEmpty(context) && !currentContext.equals(context)) {
93+
this.getSqlActuator().changeSchema(context);
94+
this.getState().setCurrentContext(context);
95+
}
9596
}
97+
9698
var schemas = this.getSqlActuator().getSchemas();
9799
this.getState().setContexts(schemas);
98-
this.getState().setCurrentContext(context);
99100

100101
} catch (SQLException e) {
101102
this.getConsoleLogger().error(MessageUtils.get("ConnectError") + ": %s", e.getMessage());

backend/framework/src/main/java/org/jumpserver/chen/framework/console/dataview/export/DataExport.java

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.time.LocalDateTime;
1919
import java.time.format.DateTimeFormatter;
2020
import java.util.Date;
21+
import java.util.LinkedHashMap;
2122
import java.util.List;
2223
import java.util.Map;
2324

@@ -57,8 +58,21 @@ public void exportData(String path, DataViewData data) throws Exception {
5758
Workbook workbook = new Workbook(fos, "JumpServer", "4.0")) {
5859

5960
Worksheet sheet = workbook.newWorksheet("Data");
60-
List<Field> fields = data.getFields();
61-
List<Map<String, Object>> rows = data.getData();
61+
62+
63+
List<Field> fields = data.getFields().stream()
64+
.filter(f -> !f.getName().equalsIgnoreCase("ROWNUM"))
65+
.toList();
66+
data.setFields(fields);
67+
68+
List<Map<String, Object>> rows = data.getData().stream()
69+
.map(m -> {
70+
Map<String, Object> newMap = new LinkedHashMap<>(m);
71+
newMap.remove("ROWNUM");
72+
return newMap;
73+
})
74+
.toList();
75+
6276

6377
for (int col = 0; col < fields.size(); col++) {
6478
sheet.value(0, col, fields.get(col).getName());
@@ -97,13 +111,26 @@ class DataExportCSV implements DataExportInterface {
97111
public void exportData(String path, DataViewData data) throws Exception {
98112
var writer = Files.newBufferedWriter(Path.of(path));
99113

100-
for (Field field : data.getFields()) {
114+
List<Field> fields = data.getFields().stream()
115+
.filter(f -> !f.getName().equalsIgnoreCase("ROWNUM"))
116+
.toList();
117+
data.setFields(fields);
118+
119+
List<Map<String, Object>> rows = data.getData().stream()
120+
.map(m -> {
121+
Map<String, Object> newMap = new LinkedHashMap<>(m);
122+
newMap.remove("ROWNUM");
123+
return newMap;
124+
})
125+
.toList();
126+
127+
for (Field field : fields) {
101128
writeString(writer, field.getName());
102129
writer.write(",");
103130
}
104131
writer.newLine();
105-
for (Map<String, Object> row : data.getData()) {
106-
for (Field field : data.getFields()) {
132+
for (Map<String, Object> row : rows) {
133+
for (Field field : fields) {
107134
var obj = row.get(field.getName());
108135
if (obj == null) {
109136
writer.write("NULL");

backend/framework/src/main/java/org/jumpserver/chen/framework/datasource/base/BaseSQLActuator.java

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -56,29 +56,26 @@ public int getAffectedRows(SQL sql) throws SQLException {
5656

5757
var sqlStmts = SQLUtils.parseStatements(sql.getSql(), this.druidDbType);
5858

59-
if (sqlStmts.size() != 1) {
60-
return -1;
61-
}
62-
63-
var sqlStmt = sqlStmts.get(0);
64-
65-
if (sqlStmt instanceof SQLUpdateStatement || sqlStmt instanceof SQLDeleteStatement || sqlStmt instanceof SQLInsertStatement) {
66-
var conn = this.getConnection();
67-
try {
68-
conn.setAutoCommit(false);
69-
var stmt = conn.createStatement();
70-
stmt.execute(sqlStmt.toString());
71-
72-
result = stmt.getUpdateCount();
73-
74-
conn.rollback();
75-
stmt.close();
76-
} finally {
77-
if (this.connection == null) {
78-
conn.close();
79-
} else {
80-
conn.setAutoCommit(true);
59+
for (var sqlStmt : sqlStmts) {
60+
if (sqlStmt instanceof SQLUpdateStatement || sqlStmt instanceof SQLDeleteStatement || sqlStmt instanceof SQLInsertStatement) {
61+
var conn = this.getConnection();
62+
try {
63+
conn.setAutoCommit(false);
64+
var stmt = conn.createStatement();
65+
stmt.execute(sqlStmt.toString());
66+
67+
result += stmt.getUpdateCount();
68+
69+
conn.rollback();
70+
stmt.close();
71+
} finally {
72+
if (this.connection == null) {
73+
conn.close();
74+
} else {
75+
conn.setAutoCommit(true);
76+
}
8177
}
78+
8279
}
8380
}
8481
return result;

backend/modules/src/main/java/org.jumpserver.chen.modules/postgresql/PostgresqlActuator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ public List<String> getSchemas() throws SQLException {
3737
@Override
3838
public void changeSchema(String schema) throws SQLException {
3939
var ss = schema.split("\\.");
40-
this.execute(SQL.of("SET SEARCH_PATH TO '?';", ss[1]));
40+
var schemaName = ss.length > 1 ? ss[1] : ss[0];
41+
this.execute(SQL.of("SET SEARCH_PATH TO '?';", schemaName));
4142
}
4243

4344
@Override

backend/modules/src/main/java/org.jumpserver.chen.modules/sqlserver/SQLServerActionHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public List<Action> getDatabaseActions(TreeNode node) {
4545
);
4646
}
4747

48-
private static final String SQL_SELECT_DATABASE_DETAIL = "SELECT name,collation_name FROM SYS.DATABASES WHERE name = '?'";
48+
private static final String SQL_SELECT_DATABASE_DETAIL = "SELECT name,collation_name FROM sys.databases WHERE name = '?'";
4949
public EventEmitter onDatabaseProperties(TreeNode node) throws SQLException {
5050
return this.onShowObjectProperties("database", SQL_SELECT_DATABASE_DETAIL, node);
5151
}

backend/modules/src/main/java/org.jumpserver.chen.modules/sqlserver/SQLServerActuator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public String getCurrentSchema() throws SQLException {
2727

2828
@Override
2929
public List<String> getSchemas() throws SQLException {
30-
var result = this.execute(SQL.of("SELECT NAME FROM SYS.DATABASES"));
30+
var result = this.execute(SQL.of("SELECT name FROM sys.databases"));
3131
return result.getData().stream().map(row -> (String) row.get(0)).toList();
3232
}
3333

backend/modules/src/main/java/org.jumpserver.chen.modules/sqlserver/SQLServerResourceBrowser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public List<TreeNode> getDatabaseChildNodes(TreeNode node) throws SQLException {
4444
.toList();
4545
}
4646

47-
private static final String SQL_GET_DATABASES = "SELECT NAME FROM SYS.DATABASES;";
47+
private static final String SQL_GET_DATABASES = "SELECT name FROM sys.databases;";
4848

4949
public List<Database> getDatabases() throws SQLException {
5050
return this.getDatabases(SQL.of(SQL_GET_DATABASES));
@@ -57,28 +57,28 @@ public List<Database> getDatabases(SQL sql) throws SQLException {
5757
}
5858

5959
// 查询当前数据库下所有的schema
60-
private static final String SQL_GET_SCHEMAS = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA";
60+
private static final String SQL_GET_SCHEMAS = "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA";
6161

6262
@Override
6363
public List<Schema> getSchemas() throws SQLException {
6464
return this.getSchemas(SQL.of(SQL_GET_SCHEMAS));
6565
}
6666

67-
private static final String SQL_GET_TABLES = " SELECT TABLE_NAME AS NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '?'";
67+
private static final String SQL_GET_TABLES = " SELECT table_name AS name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '?'";
6868

6969
@Override
7070
public List<Table> getTables(String schema) throws SQLException {
7171
return this.getTables(SQL.of(SQL_GET_TABLES, schema));
7272
}
7373

74-
private static final String SQL_GET_VIEWS = "SELECT TABLE_NAME AS NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '?' AND TABLE_TYPE = 'VIEW'";
74+
private static final String SQL_GET_VIEWS = "SELECT table_name AS name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '?' AND table_type = 'VIEW'";
7575

7676
@Override
7777
public List<View> getViews(String schema) throws SQLException {
7878
return this.getViews(SQL.of(SQL_GET_VIEWS, schema));
7979
}
8080

81-
private static final String SQL_GET_FIELDS = "SELECT COLUMN_NAME AS NAME, COLUMN_TYPE AS TYPE, COLUMN_KEY AS `KEY`, IS_NULLABLE AS `NULLABLE`, COLUMN_DEFAULT AS `DEFAULT`, EXTRA AS EXTRA, COLUMN_COMMENT AS COMMENT FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '?' AND TABLE_NAME = '?'";
81+
private static final String SQL_GET_FIELDS = "SELECT column_name AS name, column_type AS type, column_key AS `key`, is_nullable AS `nullable`, column_default AS `default`, extra AS extra, column_comment AS comment FROM information_schema.columns WHERE table_schema = '?' AND table_name = '?'";
8282

8383
@Override
8484
public List<Field> getFields(String schema, String table) throws SQLException {

backend/modules/src/main/java/org.jumpserver.chen.modules/sqlserver/SQLServerSQLHintsHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,23 @@ public List<Field> getAllFields(String schema) throws SQLException {
3030
return null;
3131
}
3232

33-
private static final String GET_ALL_SCHEMAS = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA";
33+
private static final String GET_ALL_SCHEMAS = "SELECT schema_name FROM INFORMATION_SCHEMA.SCHEMATA";
3434

3535
public List<Schema> getAllSchemas() throws SQLException {
3636
return this.connectionManager.getSqlActuator()
3737
.getObjects(SQL.of(GET_ALL_SCHEMAS).getSql(),
3838
Schema.class, Map.of("name", 1));
3939
}
4040

41-
private static final String GET_ALL_TABLES = "SELECT TABLE_NAME AS NAME,TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES";
41+
private static final String GET_ALL_TABLES = "SELECT table_name AS name,table_schema FROM INFORMATION_SCHEMA.TABLES";
4242

4343
public List<Table> getAllTables() throws SQLException {
4444
return this.connectionManager.getSqlActuator()
4545
.getObjects(SQL.of(GET_ALL_TABLES).getSql(),
4646
Table.class, Map.of("name", 1, "schema", 2));
4747
}
4848

49-
private static final String GET_ALL_FIELDS = "SELECT COLUMN_NAME AS NAME, TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS";
49+
private static final String GET_ALL_FIELDS = "SELECT column_name AS name, table_schema, table_name FROM INFORMATION_SCHEMA.COLUMNS";
5050

5151
public List<Field> getAllFields() throws SQLException {
5252
return this.connectionManager.getSqlActuator()

0 commit comments

Comments
 (0)