This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 d040c3b91e3 Refactor DriverExecutionPrepareEngine (#28189)
d040c3b91e3 is described below
commit d040c3b91e3a137c0416dbfbbf80ce2dc86c9deb
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Aug 20 23:35:31 2023 +0800
Refactor DriverExecutionPrepareEngine (#28189)
* Refactor usage of StorageUnitMetaData.unitNodeMappers
* Refactor DriverExecutionPrepareEngine
---
.../sql/prepare/driver/DriverExecutionPrepareEngine.java | 14 ++++++++------
.../core/statement/ShardingSpherePreparedStatement.java | 4 ++--
.../jdbc/core/statement/ShardingSphereStatement.java | 2 +-
.../proxy/backend/connector/DatabaseConnector.java | 2 +-
.../proxy/backend/connector/ProxySQLExecutor.java | 2 +-
.../backend/handler/distsql/rul/sql/PreviewExecutor.java | 2 +-
.../admin/OpenGaussSystemCatalogAdminQueryExecutor.java | 2 +-
.../query/text/query/MySQLMultiStatementsHandler.java | 2 +-
.../extended/PostgreSQLBatchedStatementsExecutor.java | 2 +-
9 files changed, 17 insertions(+), 15 deletions(-)
diff --git
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
index 8212310f6b7..848b7efd42a 100644
---
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
+++
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
@@ -24,6 +24,7 @@ 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.metadata.database.resource.storage.StorageUnitMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -54,17 +55,17 @@ public final class DriverExecutionPrepareEngine<T extends
DriverExecutionUnit<?>
@SuppressWarnings("rawtypes")
private final SQLExecutionUnitBuilder sqlExecutionUnitBuilder;
- private final Map<String, DatabaseType> databaseTypes;
+ private final StorageUnitMetaData storageUnitMetaData;
public DriverExecutionPrepareEngine(final String type, final int
maxConnectionsSizePerQuery, final DatabaseConnectionManager<C>
databaseConnectionManager,
final ExecutorStatementManager<C, ?,
?> statementManager, final StorageResourceOption option, final
Collection<ShardingSphereRule> rules,
- final Map<String, DatabaseType>
databaseTypes) {
+ final StorageUnitMetaData
storageUnitMetaData) {
super(maxConnectionsSizePerQuery, rules);
this.databaseConnectionManager = databaseConnectionManager;
this.statementManager = statementManager;
this.option = option;
sqlExecutionUnitBuilder = getCachedSqlExecutionUnitBuilder(type);
- this.databaseTypes = databaseTypes;
+ this.storageUnitMetaData = storageUnitMetaData;
}
/**
@@ -95,10 +96,11 @@ public final class DriverExecutionPrepareEngine<T extends
DriverExecutionUnit<?>
@SuppressWarnings("unchecked")
private ExecutionGroup<T> createExecutionGroup(final String
dataSourceName, final List<SQLUnit> sqlUnits, final C connection, final
ConnectionMode connectionMode) throws SQLException {
- List<T> result = new LinkedList<>();
+ List<T> inputs = new LinkedList<>();
+ DatabaseType databaseType =
storageUnitMetaData.getStorageUnits().get(dataSourceName).getStorageType();
for (SQLUnit each : sqlUnits) {
- result.add((T) sqlExecutionUnitBuilder.build(new
ExecutionUnit(dataSourceName, each), statementManager, connection,
connectionMode, option, databaseTypes.get(dataSourceName)));
+ inputs.add((T) sqlExecutionUnitBuilder.build(new
ExecutionUnit(dataSourceName, each), statementManager, connection,
connectionMode, option, databaseType));
}
- return new ExecutionGroup<>(result);
+ return new ExecutionGroup<>(inputs);
}
}
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 0743313513d..4557cfc16b0 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -323,7 +323,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(),
statementManager,
statementOption,
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
}
@Override
@@ -664,7 +664,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
metaDataContexts.getMetaData().getProps()
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
connection.getDatabaseConnectionManager(), statementManager, statementOption,
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
List<ExecutionUnit> executionUnits = new
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits().size());
for (BatchExecutionUnit each :
batchPreparedStatementExecutor.getBatchExecutionUnits()) {
ExecutionUnit executionUnit = each.getExecutionUnit();
diff --git
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index a004bfd0415..a0fdfb4bd0b 100644
---
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -240,7 +240,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(),
statementManager, statementOption,
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
}
@Override
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
index 6ed19a8b914..3e5e126e96e 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseConnector.java
@@ -251,7 +251,7 @@ public final class DatabaseConnector implements
DatabaseBackendHandler {
JDBCBackendStatement statementManager = (JDBCBackendStatement)
databaseConnectionManager.getConnectionSession().getStatementManager();
return new DriverExecutionPrepareEngine<>(driverType,
maxConnectionsSizePerQuery, databaseConnectionManager, statementManager,
new StatementOption(isReturnGeneratedKeys),
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getRuleMetaData().getRules(),
-
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaData.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
}
private ResponseHeader processExecuteFederation(final ResultSet resultSet,
final MetaDataContexts metaDataContexts) throws SQLException {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 9357d97cbba..f97904426a3 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -204,7 +204,7 @@ public final class ProxySQLExecutor {
JDBCBackendStatement statementManager = (JDBCBackendStatement)
databaseConnectionManager.getConnectionSession().getStatementManager();
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(
type, maxConnectionsSizePerQuery, databaseConnectionManager,
statementManager, new StatementOption(isReturnGeneratedKeys), rules,
-
ProxyContext.getInstance().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
ProxyContext.getInstance().getDatabase(databaseConnectionManager.getConnectionSession().getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext;
try {
executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits(),
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
index 130d9b44e22..7c6db81c6f5 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewExecutor.java
@@ -168,7 +168,7 @@ public final class PreviewExecutor implements
ConnectionSessionRequiredRULExecut
return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
(JDBCBackendStatement)
connectionSession.getStatementManager(), new
StatementOption(isReturnGeneratedKeys),
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getRuleMetaData().getRules(),
-
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(getDatabaseName(connectionSession)).getResourceMetaData().getStorageUnitMetaData());
}
private String getDatabaseName(final ConnectionSession connectionSession) {
diff --git
a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
index d970a30712c..7ef0dac7a86 100644
---
a/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
+++
b/proxy/backend/type/opengauss/src/main/java/org/apache/shardingsphere/proxy/backend/opengauss/handler/admin/OpenGaussSystemCatalogAdminQueryExecutor.java
@@ -100,7 +100,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutor
implements DatabaseA
return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
connectionSession.getStatementManager(), new
StatementOption(false),
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules(),
-
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData());
}
private JDBCExecutorCallback<ExecuteResult>
createOpenGaussSystemCatalogAdminQueryCallback(final DatabaseType protocolType,
final ResourceMetaData resourceMetaData,
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index b451a85d9da..7cf088c7b45 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -140,7 +140,7 @@ public final class MySQLMultiStatementsHandler implements
ProxyBackendHandler {
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
metaDataContexts.getMetaData().getProps()
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
connectionSession.getDatabaseConnectionManager(),
(JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules,
-
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
prepareEngine.prepare(anyExecutionContext.getRouteContext(),
samplingExecutionUnit(),
new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
for (ExecutionGroup<JDBCExecutionUnit> eachGroup :
executionGroupContext.getInputGroups()) {
diff --git
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index 8ee8cf0de6c..e771a94df73 100644
---
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -151,7 +151,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
connectionSession.getDatabaseConnectionManager(),
(JDBCBackendStatement) connectionSession.getStatementManager(),
- new StatementOption(false), rules,
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData().getStorageTypes());
+ new StatementOption(false), rules,
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getStorageUnitMetaData());
executionGroupContext =
prepareEngine.prepare(anyExecutionContext.getRouteContext(),
executionUnitParams.keySet(),
new
ExecutionGroupReportContext(connectionSession.getProcessId(),
connectionSession.getDatabaseName(), connectionSession.getGrantee()));
for (ExecutionGroup<JDBCExecutionUnit> eachGroup :
executionGroupContext.getInputGroups()) {