This is an automated email from the ASF dual-hosted git repository.

caogaofei pushed a commit to branch beyyes/fix_node_ordering
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 235cd6d7f4ea1f6afa4279ed52b94a82b5c37a39
Author: Beyyes <[email protected]>
AuthorDate: Wed Apr 2 14:09:06 2025 +0800

    Reapply "Clean databaseName when setSqlDialect"
    
    This reverts commit 82793c22585143058f5d0cb4d0a61bddcbe36e6e.
---
 .../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 6f71ec7093d..59313cc4018 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
@@ -1498,7 +1498,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);

Reply via email to