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 4c2d2828c0e Refactor DatabaseConnector (#32439)
4c2d2828c0e is described below

commit 4c2d2828c0e93e0576fe829642a33b38d477119d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Aug 9 14:58:18 2024 +0800

    Refactor DatabaseConnector (#32439)
---
 .../proxy/backend/connector/DatabaseConnector.java | 48 ++++++++--------------
 1 file changed, 18 insertions(+), 30 deletions(-)

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 ad377f30f56..296ae5d9510 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
@@ -154,18 +154,11 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         cachedResultSets.add(resultSet);
     }
     
-    /**
-     * Execute to database.
-     *
-     * @return backend response
-     * @throws SQLException SQL exception
-     */
     @Override
     public ResponseHeader execute() throws SQLException {
         MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
         if (proxySQLExecutor.getSqlFederationEngine().decide(queryContext, 
metaDataContexts.getMetaData().getGlobalRuleMetaData())) {
-            ResultSet resultSet = doExecuteFederation(queryContext, 
metaDataContexts);
-            return processExecuteFederation(resultSet, metaDataContexts);
+            return 
processExecuteFederation(doExecuteFederation(metaDataContexts), 
metaDataContexts);
         }
         MetaDataRefreshEngine metaDataRefreshEngine = 
getMetaDataRefreshEngine();
         if (proxySQLExecutor.getSqlFederationEngine().enabled() && 
metaDataRefreshEngine.isFederation(queryContext.getSqlStatementContext())) {
@@ -180,8 +173,8 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
     
     private ExecutionContext generateExecutionContext() {
         ShardingSphereMetaData metaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
-        return new KernelProcessor().generateExecutionContext(queryContext, 
metaData.getGlobalRuleMetaData(), metaData.getProps(),
-                
databaseConnectionManager.getConnectionSession().getConnectionContext());
+        return new KernelProcessor().generateExecutionContext(
+                queryContext, metaData.getGlobalRuleMetaData(), 
metaData.getProps(), 
databaseConnectionManager.getConnectionSession().getConnectionContext());
     }
     
     private boolean isNeedImplicitCommitTransaction(final SQLStatement 
sqlStatement, final boolean multiExecutionUnits) {
@@ -190,10 +183,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         }
         TransactionType transactionType = 
TransactionUtils.getTransactionType(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext());
         TransactionStatus transactionStatus = 
databaseConnectionManager.getConnectionSession().getTransactionStatus();
-        if (!TransactionType.isDistributedTransaction(transactionType) || 
transactionStatus.isInTransaction()) {
-            return false;
-        }
-        return isWriteDMLStatement(sqlStatement) && multiExecutionUnits;
+        return multiExecutionUnits && 
TransactionType.isDistributedTransaction(transactionType) && 
!transactionStatus.isInTransaction() && isWriteDMLStatement(sqlStatement);
     }
     
     private boolean isWriteDMLStatement(final SQLStatement sqlStatement) {
@@ -230,7 +220,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
                 : processExecuteUpdate(result.stream().map(each -> 
(UpdateResult) each).collect(Collectors.toList()));
     }
     
-    private ResultSet doExecuteFederation(final QueryContext queryContext, 
final MetaDataContexts metaDataContexts) {
+    private ResultSet doExecuteFederation(final MetaDataContexts 
metaDataContexts) {
         boolean isReturnGeneratedKeys = 
queryContext.getSqlStatementContext().getSqlStatement() instanceof 
MySQLInsertStatement;
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseConnectionManager.getConnectionSession().getUsedDatabaseName());
         DatabaseType protocolType = database.getProtocolType();
@@ -291,8 +281,8 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
     
     private MetaDataRefreshEngine getMetaDataRefreshEngine() {
         ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
-        return new 
MetaDataRefreshEngine(contextManager.getPersistServiceFacade().getMetaDataManagerPersistService(),
 queryContext.getUsedDatabase(),
-                contextManager.getMetaDataContexts().getMetaData().getProps());
+        return new MetaDataRefreshEngine(
+                
contextManager.getPersistServiceFacade().getMetaDataManagerPersistService(), 
queryContext.getUsedDatabase(), 
contextManager.getMetaDataContexts().getMetaData().getProps());
     }
     
     private QueryResponseHeader processExecuteQuery(final SQLStatementContext 
sqlStatementContext, final List<QueryResult> queryResults, final QueryResult 
queryResultSample) throws SQLException {
@@ -327,8 +317,8 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
     
     private MergedResult mergeQuery(final SQLStatementContext 
sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
         ShardingSphereMetaData metaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
-        MergeEngine mergeEngine =
-                new MergeEngine(metaData.getGlobalRuleMetaData(), 
queryContext.getUsedDatabase(), metaData.getProps(), 
databaseConnectionManager.getConnectionSession().getConnectionContext());
+        MergeEngine mergeEngine = new MergeEngine(
+                metaData.getGlobalRuleMetaData(), 
queryContext.getUsedDatabase(), metaData.getProps(), 
databaseConnectionManager.getConnectionSession().getConnectionContext());
         return mergeEngine.merge(queryResults, sqlStatementContext);
     }
     
@@ -336,22 +326,20 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         Optional<GeneratedKeyContext> generatedKeyContext = 
queryContext.getSqlStatementContext() instanceof InsertStatementContext
                 ? ((InsertStatementContext) 
queryContext.getSqlStatementContext()).getGeneratedKeyContext()
                 : Optional.empty();
-        Collection<Comparable<?>> autoIncrementGeneratedValues =
-                
generatedKeyContext.filter(GeneratedKeyContext::isSupportAutoIncrement).map(GeneratedKeyContext::getGeneratedValues).orElseGet(Collections::emptyList);
+        Collection<Comparable<?>> autoIncrementGeneratedValues = 
generatedKeyContext.filter(GeneratedKeyContext::isSupportAutoIncrement)
+                
.map(GeneratedKeyContext::getGeneratedValues).orElseGet(Collections::emptyList);
         UpdateResponseHeader result = new 
UpdateResponseHeader(queryContext.getSqlStatementContext().getSqlStatement(), 
updateResults, autoIncrementGeneratedValues);
-        mergeUpdateCount(queryContext.getSqlStatementContext(), result);
-        return result;
-    }
-    
-    private void mergeUpdateCount(final SQLStatementContext 
sqlStatementContext, final UpdateResponseHeader response) {
-        if (isNeedAccumulate(sqlStatementContext)) {
-            response.mergeUpdateCount();
+        if (isNeedAccumulate()) {
+            result.mergeUpdateCount();
         }
+        return result;
     }
     
-    private boolean isNeedAccumulate(final SQLStatementContext 
sqlStatementContext) {
+    private boolean isNeedAccumulate() {
         Collection<DataNodeRuleAttribute> ruleAttributes = 
queryContext.getUsedDatabase().getRuleMetaData().getAttributes(DataNodeRuleAttribute.class);
-        Collection<String> tableNames = sqlStatementContext instanceof 
TableAvailable ? ((TableAvailable) 
sqlStatementContext).getTablesContext().getTableNames() : 
Collections.emptyList();
+        Collection<String> tableNames = queryContext.getSqlStatementContext() 
instanceof TableAvailable
+                ? ((TableAvailable) 
queryContext.getSqlStatementContext()).getTablesContext().getTableNames()
+                : Collections.emptyList();
         return !ruleAttributes.isEmpty() && 
ruleAttributes.iterator().next().isNeedAccumulate(tableNames);
     }
     

Reply via email to