You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2025/03/22 00:30:47 UTC
(iotdb) branch master updated: Clean databaseName when setSqlDialect
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 <60...@users.noreply.github.com>
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);