Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,18 @@ public void setSqlDialectTest() throws SQLException {
}
}

@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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4165,6 +4165,8 @@ public String getDatabase() {

protected void changeSqlDialect(String sqlDialect) {
this.sqlDialect = sqlDialect;
// clean database to avoid misuse of it between different SqlDialect
this.database = null;
}

public String getSqlDialect() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,20 @@ public void executeNonQueryStatement(String sql)

@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) {
Expand All @@ -122,20 +136,6 @@ 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;
}
}

sessionPool.putBack(session);
session = null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ public void setSqlDialect(SqlDialect sqlDialect) {
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1470,7 +1470,7 @@ public SettableFuture<ConfigTaskResult> showCurrentSqlDialect(final String sqlDi
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);
Expand Down
Loading