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

zhaojinchao 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 61da1489df1 Refactor ShardingSpherePreparedStatement (#31400)
61da1489df1 is described below

commit 61da1489df1d9d1e41eda1c9b58392372c9e156b
Author: Liang Zhang <[email protected]>
AuthorDate: Sun May 26 18:08:07 2024 +0800

    Refactor ShardingSpherePreparedStatement (#31400)
    
    * Remove ShardingSpherePreparedStatement
    
    * Remove ShardingSpherePreparedStatement
    
    * Remove ShardingSpherePreparedStatement
    
    * Remove ShardingSpherePreparedStatement
    
    * Remove ShardingSpherePreparedStatement
    
    * Remove ShardingSpherePreparedStatement
---
 .../statement/ShardingSpherePreparedStatement.java | 54 +++++++++-------------
 .../proxy/backend/connector/DatabaseConnector.java |  2 +-
 2 files changed, 24 insertions(+), 32 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 5f93209c5ba..227cfc2fbe9 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
@@ -159,10 +159,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private ResultSet currentResultSet;
     
-    private String trafficInstanceId;
-    
-    private boolean useFederation;
-    
     private final HintValueContext hintValueContext;
     
     private ResultSet currentBatchGeneratedKeysResultSet;
@@ -224,7 +220,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     @Override
     public ResultSet executeQuery() throws SQLException {
-        ResultSet result;
         try {
             if (statementsCacheable && !statements.isEmpty()) {
                 resetParameters();
@@ -233,28 +228,28 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             handleAutoCommit(queryContext);
-            trafficInstanceId = getInstanceIdAndSet(queryContext).orElse(null);
+            String trafficInstanceId = 
getInstanceIdAndSet(queryContext).orElse(null);
             if (null != trafficInstanceId) {
                 JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, queryContext);
-                return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).executeQuery());
+                currentResultSet = 
executor.getTrafficExecutor().execute(executionUnit, (statement, sql) -> 
((PreparedStatement) statement).executeQuery());
+                return currentResultSet;
             }
-            useFederation = decide(queryContext,
-                    metaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getGlobalRuleMetaData());
-            if (useFederation) {
-                return executeFederationQuery(queryContext);
+            if (decide(queryContext, 
metaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getGlobalRuleMetaData())) {
+                currentResultSet = executeFederationQuery(queryContext);
+                return currentResultSet;
             }
             executionContext = createExecutionContext(queryContext);
-            result = doExecuteQuery(executionContext);
+            currentResultSet = doExecuteQuery(executionContext);
+            return currentResultSet;
             // CHECKSTYLE:OFF
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaDataContexts);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
         } finally {
-            clearBatch();
+            batchPreparedStatementExecutor.clear();
+            clearParameters();
         }
-        currentResultSet = result;
-        return result;
     }
     
     private ShardingSphereResultSet doExecuteQuery(final ExecutionContext 
executionContext) throws SQLException {
@@ -347,7 +342,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             handleAutoCommit(queryContext);
-            trafficInstanceId = getInstanceIdAndSet(queryContext).orElse(null);
+            String trafficInstanceId = 
getInstanceIdAndSet(queryContext).orElse(null);
             if (null != trafficInstanceId) {
                 JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, queryContext);
                 return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).executeUpdate());
@@ -411,17 +406,19 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             handleAutoCommit(queryContext);
-            trafficInstanceId = getInstanceIdAndSet(queryContext).orElse(null);
+            String trafficInstanceId = 
getInstanceIdAndSet(queryContext).orElse(null);
             if (null != trafficInstanceId) {
                 JDBCExecutionUnit executionUnit = 
createTrafficExecutionUnit(trafficInstanceId, queryContext);
-                return executor.getTrafficExecutor().execute(executionUnit, 
(statement, sql) -> ((PreparedStatement) statement).execute());
+                boolean result = 
executor.getTrafficExecutor().execute(executionUnit, (statement, sql) -> 
((PreparedStatement) statement).execute());
+                currentResultSet = 
executor.getTrafficExecutor().getResultSet();
+                return result;
             }
-            useFederation = decide(queryContext,
-                    metaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getGlobalRuleMetaData());
-            if (useFederation) {
+            if (decide(queryContext, 
metaDataContexts.getMetaData().getDatabase(databaseName), 
metaDataContexts.getMetaData().getGlobalRuleMetaData())) {
                 ResultSet resultSet = executeFederationQuery(queryContext);
+                currentResultSet = resultSet;
                 return null != resultSet;
             }
+            currentResultSet = null;
             executionContext = createExecutionContext(queryContext);
             if (hasRawExecutionRule()) {
                 Collection<ExecuteResult> results =
@@ -435,7 +432,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             handleExceptionInTransaction(connection, metaDataContexts);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
         } finally {
-            clearBatch();
+            batchPreparedStatementExecutor.clear();
+            clearParameters();
         }
     }
     
@@ -496,14 +494,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (null != currentResultSet) {
             return currentResultSet;
         }
-        if (null != trafficInstanceId) {
-            return executor.getTrafficExecutor().getResultSet();
-        }
-        if (useFederation) {
-            return executor.getSqlFederationEngine().getResultSet();
-        }
-        if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext
-                || executionContext.getSqlStatementContext().getSqlStatement() 
instanceof DALStatement) {
+        if (executionContext.getSqlStatementContext() instanceof 
SelectStatementContext || 
executionContext.getSqlStatementContext().getSqlStatement() instanceof 
DALStatement) {
             List<ResultSet> resultSets = getResultSets();
             if (resultSets.isEmpty()) {
                 return currentResultSet;
@@ -591,6 +582,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     }
     
     private void clearPrevious() {
+        currentResultSet = null;
         statements.clear();
         parameterSets.clear();
         generatedValues.clear();
@@ -629,7 +621,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     public void addBatch() {
         try {
             QueryContext queryContext = createQueryContext();
-            trafficInstanceId = getInstanceIdAndSet(queryContext).orElse(null);
+            String trafficInstanceId = 
getInstanceIdAndSet(queryContext).orElse(null);
             executionContext = null == trafficInstanceId ? 
createExecutionContext(queryContext) : createExecutionContext(queryContext, 
trafficInstanceId);
             
batchPreparedStatementExecutor.addBatchForExecutionUnits(executionContext.getExecutionUnits());
         } finally {
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 cd6c51bcb2c..32dc87430d7 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
@@ -120,7 +120,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         this.driverType = driverType;
         this.database = database;
         this.queryContext = queryContext;
-        this.selectContainsEnhancedTable = sqlStatementContext instanceof 
SelectStatementContext && ((SelectStatementContext) 
sqlStatementContext).isContainsEnhancedTable();
+        selectContainsEnhancedTable = sqlStatementContext instanceof 
SelectStatementContext && ((SelectStatementContext) 
sqlStatementContext).isContainsEnhancedTable();
         this.databaseConnectionManager = databaseConnectionManager;
         if (sqlStatementContext instanceof CursorAvailable) {
             prepareCursorStatementContext((CursorAvailable) 
sqlStatementContext, databaseConnectionManager.getConnectionSession());

Reply via email to