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 ae8eb76c2cd Add metaData as field for DriverExecutor (#31521)
ae8eb76c2cd is described below
commit ae8eb76c2cd9a5d84739871702b27f9a525915fe
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jun 1 23:23:11 2024 +0800
Add metaData as field for DriverExecutor (#31521)
---
.../driver/executor/DriverExecutor.java | 44 ++++++++++------------
.../statement/ShardingSpherePreparedStatement.java | 7 ++--
.../core/statement/ShardingSphereStatement.java | 7 ++--
3 files changed, 26 insertions(+), 32 deletions(-)
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index 23bcb365ba7..8d2430f191c 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -62,7 +62,6 @@ import
org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
import
org.apache.shardingsphere.infra.rule.attribute.raw.RawExecutionRuleAttribute;
import org.apache.shardingsphere.infra.session.query.QueryContext;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
@@ -95,6 +94,8 @@ public final class DriverExecutor implements AutoCloseable {
private final ShardingSphereConnection connection;
+ private final ShardingSphereMetaData metaData;
+
private final DriverJDBCExecutor regularExecutor;
private final RawExecutor rawExecutor;
@@ -115,21 +116,20 @@ public final class DriverExecutor implements
AutoCloseable {
public DriverExecutor(final ShardingSphereConnection connection) {
this.connection = connection;
- MetaDataContexts metaDataContexts =
connection.getContextManager().getMetaDataContexts();
+ metaData =
connection.getContextManager().getMetaDataContexts().getMetaData();
ExecutorEngine executorEngine =
connection.getContextManager().getExecutorEngine();
JDBCExecutor jdbcExecutor = new JDBCExecutor(executorEngine,
connection.getDatabaseConnectionManager().getConnectionContext());
regularExecutor = new DriverJDBCExecutor(connection.getDatabaseName(),
connection.getContextManager(), jdbcExecutor);
rawExecutor = new RawExecutor(executorEngine,
connection.getDatabaseConnectionManager().getConnectionContext());
- String schemaName = new
DatabaseTypeRegistry(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType()).getDefaultSchemaName(connection.getDatabaseName());
+ String schemaName = new
DatabaseTypeRegistry(metaData.getDatabase(connection.getDatabaseName()).getProtocolType()).getDefaultSchemaName(connection.getDatabaseName());
trafficExecutor = new TrafficExecutor();
- sqlFederationEngine = new
SQLFederationEngine(connection.getDatabaseName(), schemaName,
metaDataContexts.getMetaData(), metaDataContexts.getStatistics(), jdbcExecutor);
+ sqlFederationEngine = new
SQLFederationEngine(connection.getDatabaseName(), schemaName, metaData,
connection.getContextManager().getMetaDataContexts().getStatistics(),
jdbcExecutor);
kernelProcessor = new KernelProcessor();
}
/**
* Execute query.
*
- * @param metaData meta data
* @param database database
* @param queryContext query context
* @param prepareEngine prepare engine
@@ -140,7 +140,7 @@ public final class DriverExecutor implements AutoCloseable {
* @throws SQLException SQL exception
*/
@SuppressWarnings("rawtypes")
- public ResultSet executeQuery(final ShardingSphereMetaData metaData, final
ShardingSphereDatabase database, final QueryContext queryContext,
+ public ResultSet executeQuery(final ShardingSphereDatabase database, final
QueryContext queryContext,
final
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
final Statement statement,
final Map<String, Integer>
columnLabelAndIndexMap, final StatementReplayCallback statementReplayCallback)
throws SQLException {
Optional<String> trafficInstanceId =
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
queryContext);
@@ -152,8 +152,8 @@ public final class DriverExecutor implements AutoCloseable {
return sqlFederationEngine.executeQuery(
prepareEngine, getExecuteQueryCallback(database,
queryContext, prepareEngine.getType()), new SQLFederationContext(false,
queryContext, metaData, connection.getProcessId()));
}
- List<QueryResult> queryResults = executePushDownQuery(metaData,
database, queryContext, prepareEngine, statementReplayCallback);
- MergedResult mergedResult = mergeQuery(metaData, database,
queryResults, queryContext.getSqlStatementContext());
+ List<QueryResult> queryResults = executePushDownQuery(database,
queryContext, prepareEngine, statementReplayCallback);
+ MergedResult mergedResult = mergeQuery(database, queryResults,
queryContext.getSqlStatementContext());
boolean selectContainsEnhancedTable =
queryContext.getSqlStatementContext() instanceof SelectStatementContext
&& ((SelectStatementContext)
queryContext.getSqlStatementContext()).isContainsEnhancedTable();
List<ResultSet> resultSets = getResultSets();
@@ -176,12 +176,12 @@ public final class DriverExecutor implements
AutoCloseable {
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private List<QueryResult> executePushDownQuery(final
ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final
QueryContext queryContext,
+ private List<QueryResult> executePushDownQuery(final
ShardingSphereDatabase database, final QueryContext queryContext,
final
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
final
StatementReplayCallback statementReplayCallback) throws SQLException {
- ExecutionContext executionContext = createExecutionContext(metaData,
database, queryContext);
+ ExecutionContext executionContext = createExecutionContext(database,
queryContext);
if (hasRawExecutionRule(database)) {
- return
rawExecutor.execute(createRawExecutionGroupContext(metaData, database,
executionContext),
+ return
rawExecutor.execute(createRawExecutionGroupContext(database, executionContext),
queryContext, new
RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
}
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
prepareEngine.prepare(executionContext.getRouteContext(),
executionContext.getExecutionUnits(),
@@ -216,7 +216,7 @@ public final class DriverExecutor implements AutoCloseable {
return result;
}
- private ExecutionContext createExecutionContext(final
ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final
QueryContext queryContext) throws SQLException {
+ private ExecutionContext createExecutionContext(final
ShardingSphereDatabase database, final QueryContext queryContext) throws
SQLException {
clearStatements();
RuleMetaData globalRuleMetaData = metaData.getGlobalRuleMetaData();
SQLAuditEngine.audit(queryContext.getSqlStatementContext(),
queryContext.getParameters(), globalRuleMetaData, database, null,
queryContext.getHintValueContext());
@@ -230,15 +230,13 @@ public final class DriverExecutor implements
AutoCloseable {
statements.clear();
}
- private ExecutionGroupContext<RawSQLExecutionUnit>
createRawExecutionGroupContext(final ShardingSphereMetaData metaData,
-
final ShardingSphereDatabase database, final ExecutionContext
executionContext) throws SQLException {
+ private ExecutionGroupContext<RawSQLExecutionUnit>
createRawExecutionGroupContext(final ShardingSphereDatabase database, final
ExecutionContext executionContext) throws SQLException {
int maxConnectionsSizePerQuery =
metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery,
database.getRuleMetaData().getRules()).prepare(
executionContext.getRouteContext(),
executionContext.getExecutionUnits(), new
ExecutionGroupReportContext(connection.getProcessId(), database.getName(), new
Grantee("", "")));
}
- private MergedResult mergeQuery(final ShardingSphereMetaData metaData,
final ShardingSphereDatabase database,
- final List<QueryResult> queryResults,
final SQLStatementContext sqlStatementContext) throws SQLException {
+ private MergedResult mergeQuery(final ShardingSphereDatabase database,
final List<QueryResult> queryResults, final SQLStatementContext
sqlStatementContext) throws SQLException {
MergeEngine mergeEngine = new
MergeEngine(metaData.getGlobalRuleMetaData(), database, metaData.getProps(),
connection.getDatabaseConnectionManager().getConnectionContext());
return mergeEngine.merge(queryResults, sqlStatementContext);
}
@@ -256,7 +254,6 @@ public final class DriverExecutor implements AutoCloseable {
/**
* Execute update.
*
- * @param metaData meta data
* @param database database
* @param queryContext query context
* @param prepareEngine prepare engine
@@ -267,20 +264,20 @@ public final class DriverExecutor implements
AutoCloseable {
* @throws SQLException SQL exception
*/
@SuppressWarnings("rawtypes")
- public int executeUpdate(final ShardingSphereMetaData metaData, final
ShardingSphereDatabase database, final QueryContext queryContext,
+ public int executeUpdate(final ShardingSphereDatabase database, final
QueryContext queryContext,
final
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
final TrafficExecutorCallback<Integer> trafficCallback,
final ExecuteUpdateCallback updateCallback, final
StatementReplayCallback statementReplayCallback) throws SQLException {
Optional<String> trafficInstanceId =
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
queryContext);
if (trafficInstanceId.isPresent()) {
return trafficExecutor.execute(connection.getProcessId(),
database.getName(), trafficInstanceId.get(), queryContext, prepareEngine,
trafficCallback);
}
- ExecutionContext executionContext = createExecutionContext(metaData,
database, queryContext);
+ ExecutionContext executionContext = createExecutionContext(database,
queryContext);
return
database.getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty()
? executeUpdate(database, updateCallback,
queryContext.getSqlStatementContext(), executionContext, prepareEngine,
isNeedImplicitCommitTransaction(connection,
queryContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1),
statementReplayCallback)
- :
accumulate(rawExecutor.execute(createRawExecutionGroupContext(metaData,
database, executionContext), queryContext, new RawSQLExecutorCallback()));
+ :
accumulate(rawExecutor.execute(createRawExecutionGroupContext(database,
executionContext), queryContext, new RawSQLExecutorCallback()));
}
@SuppressWarnings("rawtypes")
@@ -360,7 +357,6 @@ public final class DriverExecutor implements AutoCloseable {
/**
* Execute advance.
*
- * @param metaData meta data
* @param database database
* @param queryContext query context
* @param prepareEngine prepare engine
@@ -371,7 +367,7 @@ public final class DriverExecutor implements AutoCloseable {
* @throws SQLException SQL exception
*/
@SuppressWarnings("rawtypes")
- public boolean executeAdvance(final ShardingSphereMetaData metaData, final
ShardingSphereDatabase database, final QueryContext queryContext,
+ public boolean executeAdvance(final ShardingSphereDatabase database, final
QueryContext queryContext,
final
DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine,
final TrafficExecutorCallback<Boolean> trafficCallback,
final ExecuteCallback executeCallback, final
StatementReplayCallback statementReplayCallback) throws SQLException {
Optional<String> trafficInstanceId =
connection.getTrafficInstanceId(metaData.getGlobalRuleMetaData().getSingleRule(TrafficRule.class),
queryContext);
@@ -385,9 +381,9 @@ public final class DriverExecutor implements AutoCloseable {
prepareEngine, getExecuteQueryCallback(database,
queryContext, prepareEngine.getType()), new SQLFederationContext(false,
queryContext, metaData, connection.getProcessId()));
return null != resultSet;
}
- ExecutionContext executionContext = createExecutionContext(metaData,
database, queryContext);
+ ExecutionContext executionContext = createExecutionContext(database,
queryContext);
if
(!database.getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
{
- Collection<ExecuteResult> results =
rawExecutor.execute(createRawExecutionGroupContext(metaData, database,
executionContext), queryContext, new RawSQLExecutorCallback());
+ Collection<ExecuteResult> results =
rawExecutor.execute(createRawExecutionGroupContext(database, executionContext),
queryContext, new RawSQLExecutorCallback());
return results.iterator().next() instanceof QueryResult;
}
boolean isNeedImplicitCommitTransaction =
isNeedImplicitCommitTransaction(
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index a10c9e17b2a..198fe9bb813 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -210,7 +210,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
ShardingSphereDatabase database =
metaData.getDatabase(databaseName);
findGeneratedKey().ifPresent(optional ->
generatedValues.addAll(optional.getGeneratedValues()));
- currentResultSet = executor.executeQuery(metaData, database,
queryContext, createDriverExecutionPrepareEngine(database), this,
columnLabelAndIndexMap,
+ currentResultSet = executor.executeQuery(database, queryContext,
createDriverExecutionPrepareEngine(database), this, columnLabelAndIndexMap,
(StatementReplayCallback<PreparedStatement>) this::replay);
if (currentResultSet instanceof ShardingSphereResultSet) {
columnLabelAndIndexMap = ((ShardingSphereResultSet)
currentResultSet).getColumnLabelAndIndexMap();
@@ -260,7 +260,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
QueryContext queryContext = createQueryContext();
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
ShardingSphereDatabase database =
metaData.getDatabase(databaseName);
- final int result = executor.executeUpdate(metaData, database,
queryContext, createDriverExecutionPrepareEngine(database),
+ final int result = executor.executeUpdate(database, queryContext,
createDriverExecutionPrepareEngine(database),
(statement, sql) -> ((PreparedStatement)
statement).executeUpdate(), null, (StatementReplayCallback<PreparedStatement>)
this::replay);
for (Statement each : executor.getStatements()) {
statements.add((PreparedStatement) each);
@@ -289,8 +289,7 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
QueryContext queryContext = createQueryContext();
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
ShardingSphereDatabase database =
metaData.getDatabase(databaseName);
- final boolean result = executor.executeAdvance(
- metaData, database, queryContext,
createDriverExecutionPrepareEngine(database), (statement, sql) ->
((PreparedStatement) statement).execute(),
+ final boolean result = executor.executeAdvance(database,
queryContext, createDriverExecutionPrepareEngine(database), (statement, sql) ->
((PreparedStatement) statement).execute(),
null, (StatementReplayCallback<PreparedStatement>)
this::replay);
for (Statement each : executor.getStatements()) {
statements.add((PreparedStatement) each);
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 9c63028f24f..7cb715a0b5f 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -129,7 +129,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
ShardingSphereDatabase database =
metaData.getDatabase(databaseName);
sqlStatementContext = queryContext.getSqlStatementContext();
- currentResultSet = executor.executeQuery(metaData, database,
queryContext, createDriverExecutionPrepareEngine(database), this, null,
+ currentResultSet = executor.executeQuery(database, queryContext,
createDriverExecutionPrepareEngine(database), this, null,
(StatementReplayCallback<Statement>) (statements,
parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
return currentResultSet;
@@ -218,8 +218,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
sqlStatementContext = queryContext.getSqlStatementContext();
clearStatements();
- int result = executor.executeUpdate(
- metaData, database, queryContext,
createDriverExecutionPrepareEngine(database), trafficCallback, updateCallback,
+ int result = executor.executeUpdate(database, queryContext,
createDriverExecutionPrepareEngine(database), trafficCallback, updateCallback,
(StatementReplayCallback<Statement>) (statements,
parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
replay(statements);
@@ -288,7 +287,7 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
sqlStatementContext = queryContext.getSqlStatementContext();
clearStatements();
- boolean result = executor.executeAdvance(metaData, database,
queryContext, createDriverExecutionPrepareEngine(database), trafficCallback,
+ boolean result = executor.executeAdvance(database, queryContext,
createDriverExecutionPrepareEngine(database), trafficCallback,
executeCallback, (StatementReplayCallback<Statement>)
(statements, parameterSets) -> replay(statements));
statements.addAll(executor.getStatements());
return result;