This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new adab8ca461c remove SQLStatementDatabaseHolder.java (#20115)
adab8ca461c is described below
commit adab8ca461cee06e260a9837e8022de237246a20
Author: Chuxin Chen <[email protected]>
AuthorDate: Mon Aug 22 10:04:08 2022 +0800
remove SQLStatementDatabaseHolder.java (#20115)
* remove SQLStatementDatabaseHolder.java
* remove StatementDatabase holder.
* remove StatementDatabase holder.
---
.../shardingsphere/infra/binder/LogicSQL.java | 25 +++++++++-
.../driver/DriverExecutionPrepareEngine.java | 11 ++++-
.../prepare/driver/jdbc/DatabaseTypeAware.java} | 25 ++++------
.../statement/ShardingSpherePreparedStatement.java | 11 +++--
.../core/statement/ShardingSphereStatement.java | 5 +-
.../backend/communication/ProxySQLExecutor.java | 4 +-
.../communication/ReactiveProxySQLExecutor.java | 2 +-
.../communication/SQLStatementDatabaseHolder.java | 55 ----------------------
.../jdbc/JDBCDatabaseCommunicationEngine.java | 3 +-
.../jdbc/statement/JDBCBackendStatement.java | 9 ++--
.../handler/ProxyBackendHandlerFactory.java | 12 ++---
.../handler/distsql/rul/sql/PreviewHandler.java | 12 ++---
.../proxy/backend/session/ConnectionSession.java | 12 +++--
.../jdbc/connection/JDBCBackendConnectionTest.java | 2 +-
.../frontend/command/CommandExecutorTask.java | 4 +-
.../execute/MySQLComStmtExecuteExecutor.java | 11 ++---
.../text/query/MySQLMultiStatementsHandler.java | 6 +--
.../command/query/extended/JDBCPortal.java | 5 +-
.../PostgreSQLBatchedStatementsExecutor.java | 7 +--
.../command/ReactiveCommandExecuteTask.java | 3 +-
.../ReactiveMySQLComStmtExecuteExecutor.java | 15 ++----
21 files changed, 97 insertions(+), 142 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
index 410f4f7fdeb..26e086b8eff 100644
---
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
+++
b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
@@ -18,15 +18,16 @@
package org.apache.shardingsphere.infra.binder;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import java.util.List;
+import java.util.Optional;
/**
* Logic SQL.
*/
-@RequiredArgsConstructor
@Getter
public final class LogicSQL {
@@ -35,4 +36,24 @@ public final class LogicSQL {
private final String sql;
private final List<Object> parameters;
+
+ private String sqlStatementDatabaseName;
+
+ public LogicSQL(final SQLStatementContext<?> sqlStatementContext, final
String sql, final List<Object> parameters) {
+ this.sqlStatementContext = sqlStatementContext;
+ this.sql = sql;
+ this.parameters = parameters;
+ if (sqlStatementContext instanceof TableAvailable) {
+ Optional.ofNullable(((TableAvailable)
sqlStatementContext).getTablesContext()).flatMap(TablesContext::getDatabaseName).ifPresent(databaseName
-> sqlStatementDatabaseName = databaseName);
+ }
+ }
+
+ /**
+ * Get sql statement database name.
+ *
+ * @return database name
+ */
+ public Optional<String> getSqlStatementDatabaseName() {
+ return Optional.ofNullable(sqlStatementDatabaseName);
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
index e3a07595bed..32743e1b6d8 100644
---
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
@@ -17,12 +17,14 @@
package org.apache.shardingsphere.infra.executor.sql.prepare.driver;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.DriverExecutionUnit;
import
org.apache.shardingsphere.infra.executor.sql.prepare.AbstractExecutionPrepareEngine;
+import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.DatabaseTypeAware;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import java.sql.SQLException;
@@ -52,13 +54,17 @@ public final class DriverExecutionPrepareEngine<T extends
DriverExecutionUnit<?>
@SuppressWarnings("rawtypes")
private final SQLExecutionUnitBuilder sqlExecutionUnitBuilder;
+ private final DatabaseType databaseType;
+
public DriverExecutionPrepareEngine(final String type, final int
maxConnectionsSizePerQuery, final ExecutorConnectionManager<C>
connectionManager,
- final ExecutorStatementManager<C, ?,
?> statementManager, final StorageResourceOption option, final
Collection<ShardingSphereRule> rules) {
+ final ExecutorStatementManager<C, ?,
?> statementManager, final StorageResourceOption option, final
Collection<ShardingSphereRule> rules,
+ final DatabaseType databaseType) {
super(maxConnectionsSizePerQuery, rules);
this.connectionManager = connectionManager;
this.statementManager = statementManager;
this.option = option;
sqlExecutionUnitBuilder = getCachedSqlExecutionUnitBuilder(type);
+ this.databaseType = databaseType;
}
/**
@@ -91,6 +97,9 @@ public final class DriverExecutionPrepareEngine<T extends
DriverExecutionUnit<?>
private ExecutionGroup<T> createExecutionGroup(final String
dataSourceName, final List<SQLUnit> sqlUnits, final C connection, final
ConnectionMode connectionMode) throws SQLException {
List<T> result = new LinkedList<>();
for (SQLUnit each : sqlUnits) {
+ if (statementManager instanceof DatabaseTypeAware) {
+ ((DatabaseTypeAware)
statementManager).setDatabaseType(databaseType);
+ }
result.add((T) sqlExecutionUnitBuilder.build(new
ExecutionUnit(dataSourceName, each), statementManager, connection,
connectionMode, option));
}
return new ExecutionGroup<>(result);
diff --git
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java
similarity index 65%
copy from
shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
copy to
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java
index 410f4f7fdeb..933d39f180a 100644
---
a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/LogicSQL.java
+++
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java
@@ -15,24 +15,19 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.infra.binder;
+package org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-
-import java.util.List;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
/**
- * Logic SQL.
+ * Database type aware.
*/
-@RequiredArgsConstructor
-@Getter
-public final class LogicSQL {
-
- private final SQLStatementContext<?> sqlStatementContext;
-
- private final String sql;
+public interface DatabaseTypeAware {
- private final List<Object> parameters;
+ /**
+ * Set database type.
+ *
+ * @param databaseType database type
+ */
+ void setDatabaseType(DatabaseType databaseType);
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index c70d92c0fc8..96797a70de0 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -304,7 +304,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
createDriverExecutionPrepareEngine() {
int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
maxConnectionsSizePerQuery, connection.getConnectionManager(), statementManager,
- statementOption,
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules());
+ statementOption,
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
+
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResource().getDatabaseType());
}
@Override
@@ -595,9 +596,11 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
}
private void initBatchPreparedStatementExecutor() throws SQLException {
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(
- JDBCDriverType.PREPARED_STATEMENT,
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
- connection.getConnectionManager(), statementManager,
statementOption,
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules());
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
metaDataContexts.getMetaData().getProps()
+
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
connection.getConnectionManager(), statementManager, statementOption,
+ metaDataContexts.getMetaData()
+
.getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
+
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResource().getDatabaseType());
List<ExecutionUnit> executionUnits = new
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits().size());
for (BatchExecutionUnit each :
batchPreparedStatementExecutor.getBatchExecutionUnits()) {
ExecutionUnit executionUnit = each.getExecutionUnit();
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index f97612f5607..8ddfa561eed 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -229,8 +229,9 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
createDriverExecutionPrepareEngine() {
int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
- return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connection.getConnectionManager(), statementManager,
- statementOption,
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules());
+ return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connection.getConnectionManager(),
statementManager, statementOption,
+
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
+
metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResource().getDatabaseType());
}
@Override
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
index fec9ee0bd32..779434763fc 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
@@ -180,8 +180,8 @@ public final class ProxySQLExecutor {
private List<ExecuteResult> useDriverToExecute(final ExecutionContext
executionContext, final Collection<ShardingSphereRule> rules,
final int
maxConnectionsSizePerQuery, final boolean isReturnGeneratedKeys, final boolean
isExceptionThrown) throws SQLException {
JDBCBackendStatement statementManager = (JDBCBackendStatement)
backendConnection.getConnectionSession().getStatementManager();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(
- type, maxConnectionsSizePerQuery, backendConnection,
statementManager, new StatementOption(isReturnGeneratedKeys), rules);
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(type,
maxConnectionsSizePerQuery, backendConnection, statementManager,
+ new StatementOption(isReturnGeneratedKeys), rules,
backendConnection.getConnectionSession().getDatabaseType());
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext;
try {
executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits());
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
index 68d9aad2647..2f93b1a7a61 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
@@ -124,7 +124,7 @@ public final class ReactiveProxySQLExecutor {
final int
maxConnectionsSizePerQuery) throws SQLException {
VertxBackendStatement statementManager = (VertxBackendStatement)
backendConnection.getConnectionSession().getStatementManager();
DriverExecutionPrepareEngine<VertxExecutionUnit, Future<? extends
SqlClient>> prepareEngine = new DriverExecutionPrepareEngine<>(
- TYPE, maxConnectionsSizePerQuery, backendConnection,
statementManager, new VertxExecutionContext(), rules);
+ TYPE, maxConnectionsSizePerQuery, backendConnection,
statementManager, new VertxExecutionContext(), rules,
backendConnection.getConnectionSession().getDatabaseType());
ExecutionGroupContext<VertxExecutionUnit> executionGroupContext;
try {
executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits());
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/SQLStatementDatabaseHolder.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/SQLStatementDatabaseHolder.java
deleted file mode 100644
index ffa01c436f0..00000000000
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/SQLStatementDatabaseHolder.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.proxy.backend.communication;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-/**
- * Hold SQL statement database for current thread.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SQLStatementDatabaseHolder {
-
- private static final ThreadLocal<String> SQL_STATEMENT_DATABASE = new
ThreadLocal<>();
-
- /**
- * Set SQL statement database.
- *
- * @param database SQL statement database
- */
- public static void set(final String database) {
- SQL_STATEMENT_DATABASE.set(database);
- }
-
- /**
- * Get SQL statement database.
- *
- * @return SQL statement database
- */
- public static String get() {
- return SQL_STATEMENT_DATABASE.get();
- }
-
- /**
- * Remove SQL statement database.
- */
- public static void remove() {
- SQL_STATEMENT_DATABASE.remove();
- }
-}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 48eada840f6..b4057496519 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -169,7 +169,8 @@ public final class JDBCDatabaseCommunicationEngine extends
DatabaseCommunication
int maxConnectionsSizePerQuery =
metaData.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
JDBCBackendStatement statementManager = (JDBCBackendStatement)
backendConnection.getConnectionSession().getStatementManager();
return new DriverExecutionPrepareEngine<>(getDriverType(),
maxConnectionsSizePerQuery, backendConnection, statementManager,
- new StatementOption(isReturnGeneratedKeys),
metaData.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getRuleMetaData().getRules());
+ new StatementOption(isReturnGeneratedKeys),
metaData.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getRuleMetaData().getRules(),
+ backendConnection.getConnectionSession().getDatabaseType());
}
private ResponseHeader processExecuteFederation(final ResultSet resultSet,
final MetaDataContexts metaDataContexts) throws SQLException {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
index e3f104ae432..82d19818a8c 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
@@ -23,10 +23,9 @@ import
org.apache.shardingsphere.db.protocol.parameter.TypeUnspecifiedSQLParamet
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
+import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.DatabaseTypeAware;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.ExecutorJDBCStatementManager;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -41,9 +40,9 @@ import java.util.Optional;
*/
@Getter
@Setter
-public final class JDBCBackendStatement implements
ExecutorJDBCStatementManager {
+public final class JDBCBackendStatement implements
ExecutorJDBCStatementManager, DatabaseTypeAware {
- private String databaseName;
+ private DatabaseType databaseType;
@Override
public Statement createStorageResource(final Connection connection, final
ConnectionMode connectionMode, final StatementOption option) throws
SQLException {
@@ -76,8 +75,6 @@ public final class JDBCBackendStatement implements
ExecutorJDBCStatementManager
}
private void setFetchSize(final Statement statement) throws SQLException {
- DatabaseType databaseType =
ProxyContext.getInstance().getContextManager().getMetaDataContexts()
- .getMetaData().getDatabase(null == databaseName ?
SQLStatementDatabaseHolder.get() :
databaseName).getResource().getDatabaseType();
Optional<StatementMemoryStrictlyFetchSizeSetter> fetchSizeSetter =
StatementMemoryStrictlyFetchSizeSetterFactory.findInstance(databaseType.getType());
if (fetchSizeSetter.isPresent()) {
fetchSizeSetter.get().setFetchSize(statement);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index 56f50705594..ba57c0c6709 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -27,13 +27,12 @@ import
org.apache.shardingsphere.distsql.parser.statement.rul.RULStatement;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.proxy.backend.handler.admin.DatabaseAdminBackendHandlerFactory;
import
org.apache.shardingsphere.proxy.backend.handler.data.DatabaseBackendHandlerFactory;
@@ -43,7 +42,6 @@ import
org.apache.shardingsphere.proxy.backend.handler.extra.ExtraProxyBackendHa
import org.apache.shardingsphere.proxy.backend.handler.skip.SkipBackendHandler;
import
org.apache.shardingsphere.proxy.backend.handler.transaction.TransactionBackendHandlerFactory;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dal.FlushStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.DCLStatement;
@@ -112,7 +110,9 @@ public final class ProxyBackendHandlerFactory {
}
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases(),
sqlStatement, connectionSession.getDefaultDatabaseName());
- return newInstance(databaseType, new LogicSQL(sqlStatementContext,
sql, Collections.emptyList()), connectionSession, false);
+ LogicSQL logicSQL = new LogicSQL(sqlStatementContext, sql,
Collections.emptyList());
+ connectionSession.setLogicSQL(logicSQL);
+ return newInstance(databaseType, logicSQL, connectionSession, false);
}
/**
@@ -139,10 +139,6 @@ public final class ProxyBackendHandlerFactory {
if (backendHandler.isPresent()) {
return backendHandler.get();
}
- // TODO optimize SQLStatementDatabaseHolder
- if (sqlStatementContext instanceof TableAvailable) {
- ((TableAvailable)
sqlStatementContext).getTablesContext().getDatabaseName().ifPresent(SQLStatementDatabaseHolder::set);
- }
Optional<ExtraProxyBackendHandler> extraHandler =
findExtraProxyBackendHandler(sqlStatement);
if (extraHandler.isPresent()) {
return extraHandler.get();
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
index 17eda968213..fe59917334b 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.infra.binder.decider.engine.SQLFederationDecide
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.statement.ddl.CursorStatementContext;
import org.apache.shardingsphere.infra.binder.type.CursorAvailable;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
@@ -60,7 +59,6 @@ import
org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBCBackendStatement;
import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
@@ -103,10 +101,8 @@ public final class PreviewHandler extends
SQLRULBackendHandler<PreviewStatement>
SQLParserRule sqlParserRule =
globalRuleMetaData.getSingleRule(SQLParserRule.class);
SQLStatement previewedStatement =
sqlParserRule.getSQLParserEngine(databaseType).parse(getSqlStatement().getSql(),
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
previewedStatement, databaseName);
- // TODO optimize SQLStatementDatabaseHolder
- if (sqlStatementContext instanceof TableAvailable) {
- ((TableAvailable)
sqlStatementContext).getTablesContext().getDatabaseName().ifPresent(SQLStatementDatabaseHolder::set);
- }
+ LogicSQL logicSQL = new LogicSQL(sqlStatementContext,
getSqlStatement().getSql(), Collections.emptyList());
+ getConnectionSession().setLogicSQL(logicSQL);
if (sqlStatementContext instanceof CursorAvailable &&
sqlStatementContext instanceof CursorDefinitionAware) {
setUpCursorDefinition(sqlStatementContext);
}
@@ -114,7 +110,6 @@ public final class PreviewHandler extends
SQLRULBackendHandler<PreviewStatement>
if (!database.isComplete()) {
throw new RuleNotExistedException();
}
- LogicSQL logicSQL = new LogicSQL(sqlStatementContext,
getSqlStatement().getSql(), Collections.emptyList());
ConfigurationProperties props =
metaDataContexts.getMetaData().getProps();
SQLFederationDeciderContext deciderContext = decide(logicSQL, props,
metaDataContexts.getMetaData().getDatabase(getConnectionSession().getDatabaseName()));
Collection<ExecutionUnit> executionUnits =
deciderContext.isUseSQLFederation() ? getFederationExecutionUnits(logicSQL,
databaseName, metaDataContexts)
@@ -175,7 +170,8 @@ public final class PreviewHandler extends
SQLRULBackendHandler<PreviewStatement>
int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, (JDBCBackendConnection)
getConnectionSession().getBackendConnection(),
(JDBCBackendStatement)
getConnectionSession().getStatementManager(), new
StatementOption(isReturnGeneratedKeys),
-
metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getRuleMetaData().getRules());
+
metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getRuleMetaData().getRules(),
+
metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getResource().getDatabaseType());
}
private String getDatabaseName() {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index a86edd93b10..25904d9b5be 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -21,13 +21,13 @@ import io.netty.util.AttributeMap;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
+import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
import org.apache.shardingsphere.infra.session.ConnectionContext;
import org.apache.shardingsphere.proxy.backend.communication.BackendConnection;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBCBackendStatement;
import
org.apache.shardingsphere.proxy.backend.communication.vertx.VertxBackendConnection;
@@ -37,6 +37,8 @@ import
org.apache.shardingsphere.proxy.backend.session.transaction.TransactionSt
import
org.apache.shardingsphere.sql.parser.sql.common.constant.TransactionIsolationLevel;
import org.apache.shardingsphere.transaction.core.TransactionType;
+import java.util.Optional;
+
/**
* Connection session.
*/
@@ -73,6 +75,9 @@ public final class ConnectionSession {
private final ConnectionContext connectionContext;
+ // TODO rename to QueryContext
+ private LogicSQL logicSQL;
+
private final RequiredSessionVariableRecorder
requiredSessionVariableRecorder = new RequiredSessionVariableRecorder();
public ConnectionSession(final DatabaseType databaseType, final
TransactionType initialTransactionType, final AttributeMap attributeMap) {
@@ -103,9 +108,6 @@ public final class ConnectionSession {
if (null != databaseName && databaseName.equals(this.databaseName)) {
return;
}
- if (statementManager instanceof JDBCBackendStatement) {
- ((JDBCBackendStatement)
statementManager).setDatabaseName(databaseName);
- }
this.databaseName = databaseName;
}
@@ -115,7 +117,7 @@ public final class ConnectionSession {
* @return database name
*/
public String getDatabaseName() {
- return null == SQLStatementDatabaseHolder.get() ? databaseName :
SQLStatementDatabaseHolder.get();
+ return
Optional.ofNullable(logicSQL).flatMap(LogicSQL::getSqlStatementDatabaseName).orElse(databaseName);
}
/**
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
index 1b3207bfa6f..c425376a574 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
@@ -101,7 +101,7 @@ public final class JDBCBackendConnectionTest extends
ProxyContextRestorer {
when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
when(connectionSession.getTransactionStatus()).thenReturn(new
TransactionStatus(TransactionType.LOCAL));
JDBCBackendStatement backendStatement = new JDBCBackendStatement();
- backendStatement.setDatabaseName(connectionSession.getDatabaseName());
+ backendStatement.setDatabaseType(connectionSession.getDatabaseType());
when(connectionSession.getStatementManager()).thenReturn(backendStatement);
when(connectionSession.getRequiredSessionVariableRecorder()).thenReturn(new
RequiredSessionVariableRecorder());
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
index daf2e85b5cd..ad30e31fc1d 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import
org.apache.shardingsphere.infra.util.exception.ShardingSphereInsideException;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.proxy.backend.exception.BackendConnectionException;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -85,8 +84,7 @@ public final class CommandExecutorTask implements Runnable {
// CHECKSTYLE:ON
processException(new RuntimeException(error));
} finally {
- // TODO optimize SQLStatementDatabaseHolder
- SQLStatementDatabaseHolder.remove();
+ connectionSession.setLogicSQL(null);
Collection<SQLException> exceptions = Collections.emptyList();
try {
connectionSession.getBackendConnection().closeExecutionResources();
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index dfc97c799f4..fbb82665745 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -31,17 +31,15 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.aware.ParameterAware;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
+import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
+import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
-import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import
org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor;
import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
import
org.apache.shardingsphere.proxy.frontend.mysql.command.ServerStatusFlagCalculator;
@@ -79,11 +77,8 @@ public final class MySQLComStmtExecuteExecutor implements
QueryCommandExecutor {
if (sqlStatementContext instanceof ParameterAware) {
((ParameterAware) sqlStatementContext).setUpParameters(parameters);
}
- // TODO optimize SQLStatementDatabaseHolder
- if (sqlStatementContext instanceof TableAvailable) {
- ((TableAvailable)
sqlStatementContext).getTablesContext().getDatabaseName().ifPresent(SQLStatementDatabaseHolder::set);
- }
LogicSQL logicSQL = new LogicSQL(sqlStatementContext,
preparedStatement.getSql(), parameters);
+ connectionSession.setLogicSQL(logicSQL);
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(DatabaseTypeFactory.getInstance("MySQL"),
logicSQL, connectionSession, true);
ResponseHeader responseHeader = proxyBackendHandler.execute();
return responseHeader instanceof QueryResponseHeader ?
processQuery((QueryResponseHeader) responseHeader) :
processUpdate((UpdateResponseHeader) responseHeader);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index de107667149..0335fcadbc2 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -137,9 +137,9 @@ public final class MySQLMultiStatementsHandler implements
ProxyBackendHandler {
@Override
public ResponseHeader execute() throws SQLException {
Collection<ShardingSphereRule> rules =
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getRuleMetaData().getRules();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(
- JDBCDriverType.STATEMENT,
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
- (JDBCBackendConnection)
connectionSession.getBackendConnection(), (JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules);
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
metaDataContexts.getMetaData().getProps()
+
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
(JDBCBackendConnection) connectionSession.getBackendConnection(),
+ (JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules,
connectionSession.getDatabaseType());
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
prepareEngine.prepare(anyExecutionContext.getRouteContext(),
samplingExecutionUnit());
for (ExecutionGroup<JDBCExecutionUnit> eachGroup :
executionGroupContext.getInputGroups()) {
for (JDBCExecutionUnit each : eachGroup.getInputs()) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
index 8a04bffce47..ad706389248 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/JDBCPortal.java
@@ -40,14 +40,14 @@ import
org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
+import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
-import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
-import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.PostgreSQLCommand;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dal.VariableAssignSegment;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -98,6 +98,7 @@ public final class JDBCPortal implements Portal<Void> {
}
DatabaseType databaseType = getDatabaseType(databaseName);
LogicSQL logicSQL = new LogicSQL(sqlStatementContext,
preparedStatement.getSql(), parameters);
+ backendConnection.getConnectionSession().setLogicSQL(logicSQL);
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(databaseType, logicSQL,
backendConnection.getConnectionSession(), true);
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index bffd2761113..54e01d6b2b7 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -145,9 +145,10 @@ public final class PostgreSQLBatchedStatementsExecutor {
private void addBatchedParametersToPreparedStatements() throws
SQLException {
Collection<ShardingSphereRule> rules =
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getRuleMetaData().getRules();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(
- JDBCDriverType.PREPARED_STATEMENT,
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
- (JDBCBackendConnection)
connectionSession.getBackendConnection(), (JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules);
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
+
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
+ (JDBCBackendConnection)
connectionSession.getBackendConnection(), (JDBCBackendStatement)
connectionSession.getStatementManager(),
+ new StatementOption(false), rules,
connectionSession.getDatabaseType());
executionGroupContext =
prepareEngine.prepare(anyExecutionContext.getRouteContext(),
executionUnitParameters.keySet());
for (ExecutionGroup<JDBCExecutionUnit> eachGroup :
executionGroupContext.getInputGroups()) {
for (JDBCExecutionUnit each : eachGroup.getInputs()) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-core/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/command/ReactiveCommandExecuteTask.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-core/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/command/ReactiveCommandExecuteTask.java
index 5c76fcc75a8..9c97a080fc0 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-core/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/command/ReactiveCommandExecuteTask.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-core/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/command/ReactiveCommandExecuteTask.java
@@ -29,7 +29,6 @@ import
org.apache.shardingsphere.db.protocol.packet.CommandPacket;
import org.apache.shardingsphere.db.protocol.packet.CommandPacketType;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.db.protocol.payload.PacketPayload;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import
org.apache.shardingsphere.proxy.backend.exception.BackendConnectionException;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.frontend.command.CommandExecuteEngine;
@@ -102,7 +101,7 @@ public final class ReactiveCommandExecuteTask implements
Runnable {
} catch (final Exception ignored) {
// CHECKSTYLE:ON
}
- SQLStatementDatabaseHolder.remove();
+ connectionSession.setLogicSQL(null);
return ((Future<Void>)
connectionSession.getBackendConnection().closeExecutionResources()).onComplete(this::doFlushIfNecessary);
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
index 563370586fa..14e41440a66 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
@@ -34,22 +34,20 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.aware.ParameterAware;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
-import
org.apache.shardingsphere.proxy.backend.communication.SQLStatementDatabaseHolder;
import
org.apache.shardingsphere.proxy.backend.communication.vertx.VertxDatabaseCommunicationEngine;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
+import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
import
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
-import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
-import
org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandlerFactory;
import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
import
org.apache.shardingsphere.proxy.frontend.mysql.command.ServerStatusFlagCalculator;
import
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.MySQLPreparedStatement;
@@ -94,10 +92,8 @@ public final class ReactiveMySQLComStmtExecuteExecutor
implements ReactiveComman
if (sqlStatementContext instanceof ParameterAware) {
((ParameterAware) sqlStatementContext).setUpParameters(parameters);
}
- // TODO optimize SQLStatementDatabaseHolder
- if (sqlStatementContext instanceof TableAvailable) {
- ((TableAvailable)
sqlStatementContext).getTablesContext().getDatabaseName().ifPresent(SQLStatementDatabaseHolder::set);
- }
+ LogicSQL logicSQL = new LogicSQL(sqlStatementContext,
preparedStatement.getSql(), parameters);
+ connectionSession.setLogicSQL(logicSQL);
SQLStatement sqlStatement = preparedStatement.getSqlStatement();
String databaseName = connectionSession.getDatabaseName();
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
@@ -107,8 +103,7 @@ public final class ReactiveMySQLComStmtExecuteExecutor
implements ReactiveComman
if (sqlStatement instanceof TCLStatement) {
proxyBackendHandler =
ProxyBackendHandlerFactory.newInstance(DatabaseTypeFactory.getInstance("MySQL"),
preparedStatement.getSql(), sqlStatement, connectionSession);
} else {
- databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance()
- .newDatabaseCommunicationEngine(new
LogicSQL(sqlStatementContext, preparedStatement.getSql(), parameters),
connectionSession.getBackendConnection(), true);
+ databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance().newDatabaseCommunicationEngine(logicSQL,
connectionSession.getBackendConnection(), true);
}
return (null != databaseCommunicationEngine ?
databaseCommunicationEngine.executeFuture() :
proxyBackendHandler.executeFuture()).compose(responseHeader -> {
Collection<DatabasePacket<?>> headerPackets = responseHeader
instanceof QueryResponseHeader ? processQuery((QueryResponseHeader)
responseHeader, characterSet)