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);
