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 c60967804c3 Refactor ShardingSpherePreparedStatement (#31672)
c60967804c3 is described below

commit c60967804c3fcac46629f939dcd99111c52a2dcf
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 12 19:12:31 2024 +0800

    Refactor ShardingSpherePreparedStatement (#31672)
---
 .../statement/ShardingSpherePreparedStatement.java | 31 +++++++++-------------
 1 file changed, 13 insertions(+), 18 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 d7294fde494..e7ce2f8a160 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
@@ -46,7 +46,6 @@ import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.hint.SQLHintUtils;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
 import 
org.apache.shardingsphere.infra.rule.attribute.resoure.StorageConnectorReusableRuleAttribute;
@@ -85,7 +84,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private final SQLStatementContext sqlStatementContext;
     
-    private final String databaseName;
+    private final ShardingSphereDatabase database;
     
     private final StatementOption statementOption;
     
@@ -143,17 +142,17 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
         hintValueContext = SQLHintUtils.extractHint(sql);
         SQLStatement sqlStatement = parseSQL(connection);
         sqlStatementContext = new SQLBindEngine(metaData, 
connection.getDatabaseName(), hintValueContext).bind(sqlStatement, 
Collections.emptyList());
-        databaseName = sqlStatementContext instanceof TableAvailable
+        String databaseName = sqlStatementContext instanceof TableAvailable
                 ? ((TableAvailable) 
sqlStatementContext).getTablesContext().getDatabaseName().orElse(connection.getDatabaseName())
                 : connection.getDatabaseName();
         
connection.getDatabaseConnectionManager().getConnectionContext().setCurrentDatabase(databaseName);
+        database = metaData.getDatabase(databaseName);
         statementOption = returnGeneratedKeys ? new StatementOption(true, 
columns) : new StatementOption(resultSetType, resultSetConcurrency, 
resultSetHoldability);
         statementManager = new StatementManager();
         parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         driverExecutorFacade = new DriverExecutorFacade(connection, 
statementOption, statementManager, JDBCDriverType.PREPARED_STATEMENT, new 
Grantee("", ""));
         executeBatchExecutor = new DriverExecuteBatchExecutor(connection, 
metaData, statementOption, statementManager, database);
-        statementsCacheable = 
isStatementsCacheable(database.getRuleMetaData());
+        statementsCacheable = isStatementsCacheable();
     }
     
     private SQLStatement parseSQL(final ShardingSphereConnection connection) {
@@ -161,8 +160,8 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         return 
sqlParserRule.getSQLParserEngine(metaData.getDatabase(connection.getDatabaseName()).getProtocolType()).parse(sql,
 true);
     }
     
-    private boolean isStatementsCacheable(final RuleMetaData 
databaseRuleMetaData) {
-        return 
databaseRuleMetaData.getAttributes(StorageConnectorReusableRuleAttribute.class).size()
 == databaseRuleMetaData.getRules().size() && !HintManager.isInstantiated();
+    private boolean isStatementsCacheable() {
+        return 
database.getRuleMetaData().getAttributes(StorageConnectorReusableRuleAttribute.class).size()
 == database.getRuleMetaData().getRules().size() && 
!HintManager.isInstantiated();
     }
     
     @Override
@@ -175,7 +174,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-            ShardingSphereDatabase database = 
metaData.getDatabase(databaseName);
             findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
             currentResultSet = driverExecutorFacade.executeQuery(database, 
queryContext, this, columnLabelAndIndexMap, 
(StatementAddCallback<PreparedStatement>) this::addStatements, this::replay);
             if (currentResultSet instanceof ShardingSphereResultSet) {
@@ -186,7 +184,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
-            throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
+            throw SQLExceptionTransformEngine.toSQLException(ex, 
database.getProtocolType());
         } finally {
             executeBatchExecutor.clear();
             clearParameters();
@@ -218,7 +216,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-            ShardingSphereDatabase database = 
metaData.getDatabase(databaseName);
             int result = driverExecutorFacade.executeUpdate(database, 
queryContext,
                     (sql, statement) -> ((PreparedStatement) 
statement).executeUpdate(), (StatementAddCallback<PreparedStatement>) 
this::addStatements, this::replay);
             findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
@@ -227,7 +224,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
-            throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
+            throw SQLExceptionTransformEngine.toSQLException(ex, 
database.getProtocolType());
         } finally {
             clearBatch();
         }
@@ -243,7 +240,6 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
             clearPrevious();
             QueryContext queryContext = createQueryContext();
             
handleAutoCommit(queryContext.getSqlStatementContext().getSqlStatement());
-            ShardingSphereDatabase database = 
metaData.getDatabase(databaseName);
             boolean result = driverExecutorFacade.execute(database, 
queryContext, (sql, statement) -> ((PreparedStatement) statement).execute(),
                     (StatementAddCallback<PreparedStatement>) 
this::addStatements, this::replay);
             findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
@@ -252,7 +248,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         } catch (final RuntimeException ex) {
             // CHECKSTYLE:ON
             handleExceptionInTransaction(connection, metaData);
-            throw SQLExceptionTransformEngine.toSQLException(ex, 
metaData.getDatabase(databaseName).getProtocolType());
+            throw SQLExceptionTransformEngine.toSQLException(ex, 
database.getProtocolType());
         } finally {
             clearBatch();
         }
@@ -263,7 +259,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (null != currentResultSet) {
             return currentResultSet;
         }
-        driverExecutorFacade.getResultSet(metaData.getDatabase(databaseName), 
sqlStatementContext, this, statements).ifPresent(optional -> currentResultSet = 
optional);
+        driverExecutorFacade.getResultSet(database, sqlStatementContext, this, 
statements).ifPresent(optional -> currentResultSet = optional);
         if (null == columnLabelAndIndexMap && currentResultSet instanceof 
ShardingSphereResultSet) {
             columnLabelAndIndexMap = ((ShardingSphereResultSet) 
currentResultSet).getColumnLabelAndIndexMap();
         }
@@ -322,7 +318,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     }
     
     private String getGeneratedKeysColumnName(final String columnName) {
-        return 
DatabaseTypedSPILoader.findService(GeneratedKeyColumnProvider.class, 
metaData.getDatabase(databaseName).getProtocolType())
+        return 
DatabaseTypedSPILoader.findService(GeneratedKeyColumnProvider.class, 
database.getProtocolType())
                 
.map(GeneratedKeyColumnProvider::getColumnName).orElse(columnName);
     }
     
@@ -330,14 +326,13 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
     public void addBatch() {
         currentResultSet = null;
         QueryContext queryContext = createQueryContext();
-        executeBatchExecutor.addBatch(queryContext, 
metaData.getDatabase(databaseName));
+        executeBatchExecutor.addBatch(queryContext, database);
         findGeneratedKey().ifPresent(optional -> 
generatedValues.addAll(optional.getGeneratedValues()));
         clearParameters();
     }
     
     @Override
     public int[] executeBatch() throws SQLException {
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
         try {
             return executeBatchExecutor.executeBatch(database, 
sqlStatementContext, generatedValues, statementOption,
                     (StatementAddCallback<PreparedStatement>) (statements, 
parameterSets) -> this.statements.addAll(statements),
@@ -385,7 +380,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
         if (!(sqlStatementContext instanceof TableAvailable)) {
             return false;
         }
-        for (DataNodeRuleAttribute each : 
metaData.getDatabase(databaseName).getRuleMetaData().getAttributes(DataNodeRuleAttribute.class))
 {
+        for (DataNodeRuleAttribute each : 
database.getRuleMetaData().getAttributes(DataNodeRuleAttribute.class)) {
             if (each.isNeedAccumulate(((TableAvailable) 
sqlStatementContext).getTablesContext().getTableNames())) {
                 return true;
             }

Reply via email to