This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 3ec698db88c Clean databaseName when setSqlDialect
3ec698db88c is described below
commit 3ec698db88ccc6f3dd569a9b9ce527f17df00b2f
Author: Weihao Li <[email protected]>
AuthorDate: Sat Mar 22 08:30:42 2025 +0800
Clean databaseName when setSqlDialect
---
.../it/query/recent/IoTDBNullIdQueryIT.java | 12 ++++++++++
.../java/org/apache/iotdb/session/Session.java | 2 ++
.../iotdb/session/pool/TableSessionWrapper.java | 28 +++++++++++-----------
.../iotdb/db/protocol/session/IClientSession.java | 6 +++++
.../config/executor/ClusterConfigTaskExecutor.java | 2 +-
5 files changed, 35 insertions(+), 15 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullIdQueryIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullIdQueryIT.java
index eba15523aa2..2459d0c8106 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullIdQueryIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBNullIdQueryIT.java
@@ -523,6 +523,18 @@ public class IoTDBNullIdQueryIT {
}
}
+ @Test
+ public void setSqlDialectContextCleanTest() throws SQLException {
+ try (Connection userCon =
EnvFactory.getEnv().getConnection(BaseEnv.TABLE_SQL_DIALECT);
+ Statement userStmt = userCon.createStatement()) {
+ userStmt.execute("create database test1");
+ userStmt.execute("use test1");
+ userStmt.execute("set sql_dialect=tree");
+ assertCurrentSqlDialect(true, userStmt);
+ userStmt.execute("insert into root.db(time,s1) values (0,1), (1, 3),
(2,5)");
+ }
+ }
+
public static void assertCurrentSqlDialect(boolean expectedTree, Statement
statement)
throws SQLException {
ResultSet resultSet = statement.executeQuery("show current_sql_dialect");
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index 357203563c7..8283f2319a1 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -4165,6 +4165,8 @@ public class Session implements ISession {
protected void changeSqlDialect(String sqlDialect) {
this.sqlDialect = sqlDialect;
+ // clean database to avoid misuse of it between different SqlDialect
+ this.database = null;
}
public String getSqlDialect() {
diff --git
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
index 242ab1a6353..761bb3a40d3 100644
---
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
+++
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/pool/TableSessionWrapper.java
@@ -108,6 +108,20 @@ public class TableSessionWrapper implements ITableSession {
@Override
public void close() throws IoTDBConnectionException {
+ if (!Objects.equals(session.getSqlDialect(), sessionPool.sqlDialect)) {
+ try {
+ session.executeNonQueryStatement("set sql_dialect=" +
sessionPool.sqlDialect);
+ } catch (StatementExecutionException e) {
+ LOGGER.warn(
+ "Failed to change back sql_dialect by executing: set
sql_dialect={}",
+ sessionPool.sqlDialect,
+ e);
+ session.close();
+ session = null;
+ return;
+ }
+ }
+
if (closed.compareAndSet(false, true)) {
if (!Objects.equals(session.getDatabase(), sessionPool.database)
&& sessionPool.database != null) {
@@ -122,20 +136,6 @@ public class TableSessionWrapper implements ITableSession {
}
}
- if (!Objects.equals(session.getSqlDialect(), sessionPool.sqlDialect)) {
- try {
- session.executeNonQueryStatement("set sql_dialect=" +
sessionPool.sqlDialect);
- } catch (StatementExecutionException e) {
- LOGGER.warn(
- "Failed to change back sql_dialect by executing: set
sql_dialect={}",
- sessionPool.sqlDialect,
- e);
- session.close();
- session = null;
- return;
- }
- }
-
sessionPool.putBack(session);
session = null;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
index 575fd2d732f..0a12fbe8206 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/session/IClientSession.java
@@ -155,6 +155,12 @@ public abstract class IClientSession {
this.sqlDialect = sqlDialect;
}
+ public void setSqlDialectAndClean(SqlDialect sqlDialect) {
+ this.sqlDialect = sqlDialect;
+ // clean database to avoid misuse of it between different SqlDialect
+ this.databaseName = null;
+ }
+
@Nullable
public String getDatabaseName() {
return databaseName;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 06c79a7fe15..a005875d349 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -1470,7 +1470,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
public SettableFuture<ConfigTaskResult>
setSqlDialect(IClientSession.SqlDialect sqlDialect) {
final SettableFuture<ConfigTaskResult> future = SettableFuture.create();
try {
- SessionManager.getInstance().getCurrSession().setSqlDialect(sqlDialect);
+
SessionManager.getInstance().getCurrSession().setSqlDialectAndClean(sqlDialect);
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} catch (Exception e) {
future.setException(e);