This is an automated email from the ASF dual-hosted git repository.

zhangliang 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 1f9bf14fcf0 Refactor ShardingSphereStatement (#31431)
1f9bf14fcf0 is described below

commit 1f9bf14fcf0ff135bb814fd30d11f464e343becb
Author: Liang Zhang <[email protected]>
AuthorDate: Wed May 29 11:58:55 2024 +0800

    Refactor ShardingSphereStatement (#31431)
---
 .../statement/ShardingSpherePreparedStatement.java | 45 +++++++++++-----------
 .../core/statement/ShardingSphereStatement.java    | 16 +++++---
 2 files changed, 32 insertions(+), 29 deletions(-)

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 9bb56e20c94..3109edbd160 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
@@ -253,6 +253,22 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         return new ShardingSphereResultSet(resultSets, mergedResult, this, 
selectContainsEnhancedTable, executionContext, columnLabelAndIndexMap);
     }
     
+    private List<QueryResult> executeQuery0(final ExecutionContext 
executionContext) throws SQLException {
+        if (hasRawExecutionRule()) {
+            return 
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
+                    executionContext.getQueryContext(), new 
RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
+        }
+        ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionGroupContext(executionContext);
+        cacheStatements(executionGroupContext.getInputGroups());
+        PreparedStatementExecuteQueryCallback callback = new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType(),
+                
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), 
sqlStatement, SQLExecutorExceptionHandler.isExceptionThrown());
+        return 
executor.getRegularExecutor().executeQuery(executionGroupContext, 
executionContext.getQueryContext(), callback);
+    }
+    
+    private boolean hasRawExecutionRule() {
+        return 
!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty();
+    }
+    
     private void handleAutoCommit(final SQLStatement sqlStatement) throws 
SQLException {
         if (AutoCommitUtils.needOpenTransaction(sqlStatement)) {
             connection.handleAutoCommit();
@@ -265,19 +281,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         replaySetParameter();
     }
     
-    private List<QueryResult> executeQuery0(final ExecutionContext 
executionContext) throws SQLException {
-        if (hasRawExecutionRule()) {
-            return 
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
-                    executionContext.getQueryContext(), new 
RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
-        }
-        ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionGroupContext(executionContext);
-        cacheStatements(executionGroupContext.getInputGroups());
-        return 
executor.getRegularExecutor().executeQuery(executionGroupContext, 
executionContext.getQueryContext(),
-                new 
PreparedStatementExecuteQueryCallback(metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType(),
-                        
metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), 
sqlStatement,
-                        SQLExecutorExceptionHandler.isExceptionThrown()));
-    }
-    
     private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final ShardingSphereDatabase database) {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new 
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager, statementOption,
@@ -382,16 +385,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         }
     }
     
-    private boolean hasRawExecutionRule() {
-        return 
!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty();
-    }
-    
-    private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext(final ExecutionContext executionContext) throws 
SQLException {
-        int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
-                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getProcessId(), databaseName, new 
Grantee("", "")));
-    }
-    
     private boolean executeWithExecutionContext(final ExecutionContext 
executionContext) throws SQLException {
         return isNeedImplicitCommitTransaction(connection, 
executionContext.getSqlStatementContext().getSqlStatement(), 
executionContext.getExecutionUnits().size() > 1)
                 ? executeWithImplicitCommitTransaction(() -> 
useDriverToExecute(executionContext), connection, 
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
@@ -494,6 +487,12 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         return new ExecutionContext(queryContext, 
Collections.singletonList(executionUnit), new RouteContext());
     }
     
+    private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext(final ExecutionContext executionContext) throws 
SQLException {
+        int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+        return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
+                .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getProcessId(), databaseName, new 
Grantee("", "")));
+    }
+    
     private QueryContext createQueryContext() {
         List<Object> params = new ArrayList<>(getParameters());
         if (sqlStatementContext instanceof ParameterAware) {
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 55edd1785d9..ef05eb294cf 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
@@ -177,9 +177,9 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     }
     
     private List<QueryResult> executeQuery0(final ExecutionContext 
executionContext) throws SQLException {
-        if 
(!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
 {
-            return executor.getRawExecutor().execute(
-                    createRawExecutionContext(executionContext), 
executionContext.getQueryContext(), new 
RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
+        if (hasRawExecutionRule()) {
+            return 
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
+                    executionContext.getQueryContext(), new 
RawSQLExecutorCallback()).stream().map(QueryResult.class::cast).collect(Collectors.toList());
         }
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
createExecutionGroupContext(executionContext);
         cacheStatements(executionGroupContext.getInputGroups());
@@ -189,6 +189,10 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         return 
executor.getRegularExecutor().executeQuery(executionGroupContext, 
executionContext.getQueryContext(), callback);
     }
     
+    private boolean hasRawExecutionRule() {
+        return 
!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty();
+    }
+    
     private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
createDriverExecutionPrepareEngine(final ShardingSphereDatabase database) {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, 
maxConnectionsSizePerQuery, connection.getDatabaseConnectionManager(), 
statementManager, statementOption,
@@ -276,7 +280,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         executionContext = createExecutionContext(queryContext);
         if 
(!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
 {
-            Collection<ExecuteResult> results = 
executor.getRawExecutor().execute(createRawExecutionContext(executionContext), 
executionContext.getQueryContext(), new RawSQLExecutorCallback());
+            Collection<ExecuteResult> results = 
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
 executionContext.getQueryContext(), new RawSQLExecutorCallback());
             return accumulate(results);
         }
         return executeUpdate(updateCallback, 
queryContext.getSqlStatementContext(), executionContext);
@@ -382,7 +386,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
         executionContext = createExecutionContext(queryContext);
         if 
(!metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getAttributes(RawExecutionRuleAttribute.class).isEmpty())
 {
-            Collection<ExecuteResult> results = 
executor.getRawExecutor().execute(createRawExecutionContext(executionContext), 
executionContext.getQueryContext(), new RawSQLExecutorCallback());
+            Collection<ExecuteResult> results = 
executor.getRawExecutor().execute(createRawExecutionGroupContext(executionContext),
 executionContext.getQueryContext(), new RawSQLExecutorCallback());
             return results.iterator().next() instanceof QueryResult;
         }
         return executeWithExecutionContext(executeCallback, executionContext);
@@ -441,7 +445,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
                 new ExecutionGroupReportContext(connection.getProcessId(), 
databaseName, new Grantee("", "")));
     }
     
-    private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionContext(final ExecutionContext executionContext) throws 
SQLException {
+    private ExecutionGroupContext<RawSQLExecutionUnit> 
createRawExecutionGroupContext(final ExecutionContext executionContext) throws 
SQLException {
         int maxConnectionsSizePerQuery = 
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new RawExecutionPrepareEngine(maxConnectionsSizePerQuery, 
metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules())
                 .prepare(executionContext.getRouteContext(), 
executionContext.getExecutionUnits(), new 
ExecutionGroupReportContext(connection.getProcessId(), databaseName, new 
Grantee("", "")));

Reply via email to