Skip to content

Commit 70ec59c

Browse files
authored
Merge pull request #202 from jumpserver/pr@dev@fix_chen_bugs
fix:some bugs
2 parents d1ac37d + 0b9dc84 commit 70ec59c

5 files changed

Lines changed: 49 additions & 12 deletions

File tree

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

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,13 @@ public void onConnect(Connect connect) {
9292
try {
9393
var currentContext = this.getSqlActuator().getCurrentSchema();
9494

95-
if (StringUtils.isEmpty(currentContext) && !StringUtils.isEmpty(context)) {
95+
if (StringUtils.isNotEmpty(context)
96+
&& !StringUtils.equals(currentContext, context)) {
9697
this.getSqlActuator().changeSchema(context);
97-
this.getState().setCurrentContext(context);
98-
} else {
99-
if (!StringUtils.isEmpty(context) && !currentContext.equals(context)) {
100-
this.getSqlActuator().changeSchema(context);
101-
this.getState().setCurrentContext(context);
102-
}
10398
}
99+
this.getState().setCurrentContext(
100+
StringUtils.defaultIfEmpty(context, currentContext)
101+
);
104102

105103
var schemas = this.getSqlActuator().getSchemas();
106104
this.replaceAllowedContexts(schemas);

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ private void executeStatement(SQLExecutePlan plan, Statement statement, SQLQuery
199199
List<Object> fs = new ArrayList<>();
200200
for (int i = 1; i <= columnCount; i++) {
201201
try {
202-
fs.add(this.normalizeJdbcValue(resultSet.getObject(i)));
202+
fs.add(this.normalizeJdbcValue(resultSet, i));
203203
} catch (NoClassDefFoundError e) {
204204
log.error(e.getMessage());
205205
}
@@ -230,17 +230,29 @@ private void executeStatement(SQLExecutePlan plan, Statement statement, SQLQuery
230230
}
231231

232232
// Normalize JDBC driver objects before Gson sees them in update_data_view packets.
233+
protected Object normalizeJdbcValue(ResultSet resultSet, int columnIndex) throws SQLException {
234+
return this.normalizeJdbcValue(resultSet.getObject(columnIndex));
235+
}
236+
233237
protected Object normalizeJdbcValue(Object value) throws SQLException {
234238
if (value == null) {
235239
return null;
236240
}
237241

242+
if (value.getClass().getName().equals("oracle.sql.TIMESTAMPTZ")) {
243+
return this.normalizeOracleTimestampWithTimeZone(value);
244+
}
245+
238246
var temporalValue = this.formatTemporalValue(value);
239247
if (temporalValue != null) {
240248
return temporalValue;
241249
}
242250

243-
if (value instanceof Long || value instanceof BigDecimal || value instanceof BigInteger) {
251+
if (value instanceof BigDecimal decimal) {
252+
return decimal.toPlainString();
253+
}
254+
255+
if (value instanceof Long || value instanceof BigInteger) {
244256
return value.toString();
245257
}
246258

@@ -268,9 +280,26 @@ protected Object normalizeJdbcValue(Object value) throws SQLException {
268280
return value.toString();
269281
}
270282

283+
if (value.getClass().getName().equals("microsoft.sql.DateTimeOffset")) {
284+
return value.toString();
285+
}
286+
271287
return value;
272288
}
273289

290+
private String normalizeOracleTimestampWithTimeZone(Object value) throws SQLException {
291+
try {
292+
var offsetDateTime = value.getClass().getMethod("toOffsetDateTime").invoke(value);
293+
return OFFSET_DATE_TIME_DISPLAY_FORMATTER.format((OffsetDateTime) offsetDateTime);
294+
} catch (ReflectiveOperationException | ClassCastException e) {
295+
var cause = e.getCause() == null ? e : e.getCause();
296+
if (cause instanceof SQLException sqlException) {
297+
throw sqlException;
298+
}
299+
throw new SQLException("normalize Oracle TIMESTAMP WITH TIME ZONE failed", cause);
300+
}
301+
}
302+
274303
private String formatTemporalValue(Object value) {
275304
if (value instanceof Timestamp timestamp) {
276305
return LOCAL_DATE_TIME_DISPLAY_FORMATTER.format(timestamp.toLocalDateTime());

backend/modules/src/main/java/org.jumpserver.chen.modules/mariadb/MariaDBActuator.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.jumpserver.chen.modules.mysql.MysqlActuator;
55

66
import java.sql.Connection;
7+
import java.sql.ResultSet;
8+
import java.sql.SQLException;
79

810
public class MariaDBActuator extends MysqlActuator {
911
public MariaDBActuator(ConnectionManager connectionManager) {
@@ -12,4 +14,13 @@ public MariaDBActuator(ConnectionManager connectionManager) {
1214
public MariaDBActuator(MariaDBActuator sqlActuator, Connection connection) {
1315
super(sqlActuator, connection);
1416
}
17+
18+
@Override
19+
protected Object normalizeJdbcValue(ResultSet resultSet, int columnIndex) throws SQLException {
20+
var columnTypeName = resultSet.getMetaData().getColumnTypeName(columnIndex);
21+
if ("JSON".equalsIgnoreCase(columnTypeName) || "MYSQL_JSON".equalsIgnoreCase(columnTypeName)) {
22+
return resultSet.getString(columnIndex);
23+
}
24+
return super.normalizeJdbcValue(resultSet, columnIndex);
25+
}
1526
}

backend/web/src/main/java/org/jumpserver/chen/web/config/WebSocketConfig.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ public class WebSocketConfig {
3030
@Bean
3131
public ServletServerContainerFactoryBean createWebSocketContainer() {
3232
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
33-
container.setMaxTextMessageBufferSize(20 * 1024 * 1024);
34-
container.setMaxBinaryMessageBufferSize(20 * 1024 * 1024);
33+
container.setMaxTextMessageBufferSize(1024 * 1024);
3534
// 可选:异步发送超时
3635
// container.setAsyncSendTimeout(20_000L);
3736
return container;

frontend/src/components/Main/Explore/QueryConsole/SaveSnippetDialog.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
:modal="false"
77
width="40%"
88
>
9-
<el-form ref="form" :model="form" label-width="80px">
9+
<el-form ref="form" :model="form" label-width="80px" @submit.native.prevent="onSubmit">
1010
<el-form-item :label="$tc('Name')">
1111
<el-input v-model="form.name" />
1212
</el-form-item>

0 commit comments

Comments
 (0)