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 1c4f64de211 Refactor ShardingSphereStatement (#31524)
1c4f64de211 is described below

commit 1c4f64de21139fe1df9e49658ed5d14a2187046f
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 2 13:28:29 2024 +0800

    Refactor ShardingSphereStatement (#31524)
    
    * Refactor ShardingSphereStatement
    
    * Refactor ShardingSphereStatement
    
    * Refactor ShardingSphereStatement
---
 .../statement/ShardingSpherePreparedStatement.java |  6 +--
 .../core/statement/ShardingSphereStatement.java    | 52 +++++++++-------------
 2 files changed, 23 insertions(+), 35 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 a3dfffaa2fa..2c7ccd7150d 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
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.driver.jdbc.core.statement;
 
-import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.Getter;
 import org.apache.shardingsphere.driver.executor.DriverExecutor;
@@ -39,6 +38,7 @@ import 
org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
 import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
 import 
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
 import org.apache.shardingsphere.infra.executor.audit.SQLAuditEngine;
@@ -166,9 +166,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private ShardingSpherePreparedStatement(final ShardingSphereConnection 
connection, final String sql,
                                             final int resultSetType, final int 
resultSetConcurrency, final int resultSetHoldability, final boolean 
returnGeneratedKeys,
                                             final String[] columns) throws 
SQLException {
-        if (Strings.isNullOrEmpty(sql)) {
-            throw new EmptySQLException().toSQLException();
-        }
+        ShardingSpherePreconditions.checkNotEmpty(sql, () -> new 
EmptySQLException().toSQLException());
         this.connection = connection;
         metaData = 
connection.getContextManager().getMetaDataContexts().getMetaData();
         hintValueContext = SQLHintUtils.extractHint(sql);
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 c5d258b977f..5249ff22f86 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
@@ -120,15 +120,10 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     @Override
     public ResultSet executeQuery(final String sql) throws SQLException {
-        ShardingSpherePreconditions.checkNotEmpty(sql, () -> new 
EmptySQLException().toSQLException());
+        QueryContext queryContext = createQueryContext(sql);
         try {
-            QueryContext queryContext = createQueryContext(sql);
-            
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-            databaseName = 
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-            
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+            prepareExecute(queryContext);
             ShardingSphereDatabase database = 
metaData.getDatabase(databaseName);
-            sqlStatementContext = queryContext.getSqlStatementContext();
-            clearStatements();
             currentResultSet = executor.executeQuery(database, queryContext, 
createDriverExecutionPrepareEngine(database), this, null,
                     (StatementReplayCallback<Statement>) (statements, 
parameterSets) -> replay(statements));
             statements.addAll(executor.getStatements());
@@ -157,14 +152,13 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
-        } finally {
-            currentResultSet = null;
         }
     }
     
     @Override
     public int executeUpdate(final String sql, final int autoGeneratedKeys) 
throws SQLException {
         if (RETURN_GENERATED_KEYS == autoGeneratedKeys) {
+            currentResultSet = null;
             returnGeneratedKeys = true;
         }
         try {
@@ -174,8 +168,6 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
-        } finally {
-            currentResultSet = null;
         }
     }
     
@@ -189,8 +181,6 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
-        } finally {
-            currentResultSet = null;
         }
     }
     
@@ -204,19 +194,14 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
             throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
-        } finally {
-            currentResultSet = null;
         }
     }
     
     private int executeUpdate(final String sql, final ExecuteUpdateCallback 
updateCallback) throws SQLException {
+        currentResultSet = null;
         QueryContext queryContext = createQueryContext(sql);
-        
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-        databaseName = 
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-        
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+        prepareExecute(queryContext);
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        sqlStatementContext = queryContext.getSqlStatementContext();
-        clearStatements();
         int result = executor.executeUpdate(database, queryContext, 
createDriverExecutionPrepareEngine(database), updateCallback,
                 (StatementReplayCallback<Statement>) (statements, 
parameterSets) -> replay(statements));
         statements.addAll(executor.getStatements());
@@ -226,7 +211,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     @Override
     public boolean execute(final String sql) throws SQLException {
         try {
-            return execute0(sql, (actualSQL, statement) -> 
statement.execute(actualSQL));
+            return execute(sql, (actualSQL, statement) -> 
statement.execute(actualSQL));
             // CHECKSTYLE:OFF
         } catch (final SQLException ex) {
             // CHECKSTYLE:ON
@@ -241,7 +226,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
             if (RETURN_GENERATED_KEYS == autoGeneratedKeys) {
                 returnGeneratedKeys = true;
             }
-            return execute0(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, autoGeneratedKeys));
+            return execute(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, autoGeneratedKeys));
             // CHECKSTYLE:OFF
         } catch (final SQLException ex) {
             // CHECKSTYLE:ON
@@ -254,7 +239,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     public boolean execute(final String sql, final int[] columnIndexes) throws 
SQLException {
         try {
             returnGeneratedKeys = true;
-            return execute0(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, columnIndexes));
+            return execute(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, columnIndexes));
             // CHECKSTYLE:OFF
         } catch (final SQLException ex) {
             // CHECKSTYLE:ON
@@ -267,7 +252,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     public boolean execute(final String sql, final String[] columnNames) 
throws SQLException {
         try {
             returnGeneratedKeys = true;
-            return execute0(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, columnNames));
+            return execute(sql, (actualSQL, statement) -> 
statement.execute(actualSQL, columnNames));
             // CHECKSTYLE:OFF
         } catch (final SQLException ex) {
             // CHECKSTYLE:ON
@@ -276,21 +261,25 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
     }
     
-    private boolean execute0(final String sql, final ExecuteCallback 
executeCallback) throws SQLException {
+    private boolean execute(final String sql, final ExecuteCallback 
executeCallback) throws SQLException {
         currentResultSet = null;
         QueryContext queryContext = createQueryContext(sql);
-        
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-        databaseName = 
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
-        
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+        prepareExecute(queryContext);
         ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        sqlStatementContext = queryContext.getSqlStatementContext();
-        clearStatements();
         boolean result = executor.executeAdvance(database, queryContext, 
createDriverExecutionPrepareEngine(database),
                 executeCallback, (StatementReplayCallback<Statement>) 
(statements, parameterSets) -> replay(statements));
         statements.addAll(executor.getStatements());
         return result;
     }
     
+    private void prepareExecute(final QueryContext queryContext) throws 
SQLException {
+        
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
+        databaseName = 
queryContext.getDatabaseNameFromSQLStatement().orElse(connection.getDatabaseName());
+        
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+        sqlStatementContext = queryContext.getSqlStatementContext();
+        clearStatements();
+    }
+    
     private void handleAutoCommit(final SQLStatement sqlStatement) throws 
SQLException {
         if (AutoCommitUtils.needOpenTransaction(sqlStatement)) {
             connection.handleAutoCommit();
@@ -320,7 +309,8 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         return batchStatementExecutor.executeBatch();
     }
     
-    private QueryContext createQueryContext(final String originSQL) {
+    private QueryContext createQueryContext(final String originSQL) throws 
SQLException {
+        ShardingSpherePreconditions.checkNotEmpty(originSQL, () -> new 
EmptySQLException().toSQLException());
         SQLParserRule sqlParserRule = 
metaData.getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
         String sql = SQLHintUtils.removeHint(originSQL);
         HintValueContext hintValueContext = 
SQLHintUtils.extractHint(originSQL);

Reply via email to