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 c6dd048d127 Refactor DatabaseConnector avoid repeat call findRules 
method (#24816)
c6dd048d127 is described below

commit c6dd048d127b0379fcb1a5991fb86ed96dd0e242
Author: zhaojinchao <[email protected]>
AuthorDate: Fri Mar 24 21:50:24 2023 +0800

    Refactor DatabaseConnector avoid repeat call findRules method (#24816)
    
    * Refactor DatabaseConnector avoid repeat call findRules method
    
    * Update
    
    * Fix index
---
 .../proxy/backend/connector/DatabaseConnector.java | 57 ++++++++++++----------
 1 file changed, 30 insertions(+), 27 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 dac2093d2f3..21255f5999d 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
@@ -111,6 +111,8 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
     
     private final ShardingSphereDatabase database;
     
+    private final boolean transparentStatement;
+    
     private final QueryContext queryContext;
     
     private final BackendConnection backendConnection;
@@ -126,6 +128,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         failedIfBackendNotReady(backendConnection.getConnectionSession(), 
sqlStatementContext);
         this.driverType = driverType;
         this.database = database;
+        this.transparentStatement = 
isTransparentStatement(sqlStatementContext);
         this.queryContext = queryContext;
         this.backendConnection = backendConnection;
         if (sqlStatementContext instanceof CursorAvailable) {
@@ -143,6 +146,31 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
         }
     }
     
+    private boolean isTransparentStatement(final SQLStatementContext<?> 
sqlStatementContext) {
+        Optional<DataNodeContainedRule> dataNodeContainedRule = 
getDataNodeContainedRuleForShardingRule(database.getRuleMetaData().findRules(DataNodeContainedRule.class));
+        Collection<ColumnContainedRule> columnContainedRules = 
database.getRuleMetaData().findRules(ColumnContainedRule.class);
+        for (String each : 
sqlStatementContext.getTablesContext().getTableNames()) {
+            return (!dataNodeContainedRule.isPresent() || 
!dataNodeContainedRule.get().getAllTables().contains(each)) && 
!containsInColumnContainedRule(each, columnContainedRules);
+        }
+        return true;
+    }
+    
+    private Optional<DataNodeContainedRule> 
getDataNodeContainedRuleForShardingRule(final Collection<DataNodeContainedRule> 
dataNodeContainedRules) {
+        for (DataNodeContainedRule each : dataNodeContainedRules) {
+            if (!(each instanceof MutableDataNodeRule)) {
+                return Optional.of(each);
+            }
+        }
+        return Optional.empty();
+    }
+    
+    private boolean containsInColumnContainedRule(final String tableName, 
final Collection<ColumnContainedRule> columnContainedRules) {
+        for (ColumnContainedRule each : columnContainedRules) {
+            return each.getTables().contains(tableName);
+        }
+        return false;
+    }
+    
     /**
      * Add statement.
      *
@@ -337,7 +365,7 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
     }
     
     private int getColumnCount(final ExecutionContext executionContext, final 
QueryResult queryResultSample) throws SQLException {
-        if (isTransparentStatement(executionContext.getSqlStatementContext())) 
{
+        if (transparentStatement) {
             return queryResultSample.getMetaData().getColumnCount();
         }
         return 
hasSelectExpandProjections(executionContext.getSqlStatementContext())
@@ -345,38 +373,13 @@ public final class DatabaseConnector implements 
DatabaseBackendHandler {
                 : queryResultSample.getMetaData().getColumnCount();
     }
     
-    private boolean isTransparentStatement(final SQLStatementContext<?> 
sqlStatementContext) {
-        Optional<DataNodeContainedRule> dataNodeContainedRule = 
getDataNodeContainedRuleForShardingRule(database.getRuleMetaData().findRules(DataNodeContainedRule.class));
-        Collection<ColumnContainedRule> columnContainedRules = 
database.getRuleMetaData().findRules(ColumnContainedRule.class);
-        for (String each : 
sqlStatementContext.getTablesContext().getTableNames()) {
-            return (!dataNodeContainedRule.isPresent() || 
!dataNodeContainedRule.get().getAllTables().contains(each)) && 
!containsInColumnContainedRule(each, columnContainedRules);
-        }
-        return true;
-    }
-    
-    private Optional<DataNodeContainedRule> 
getDataNodeContainedRuleForShardingRule(final Collection<DataNodeContainedRule> 
dataNodeContainedRules) {
-        for (DataNodeContainedRule each : dataNodeContainedRules) {
-            if (!(each instanceof MutableDataNodeRule)) {
-                return Optional.of(each);
-            }
-        }
-        return Optional.empty();
-    }
-    
-    private boolean containsInColumnContainedRule(final String tableName, 
final Collection<ColumnContainedRule> columnContainedRules) {
-        for (ColumnContainedRule each : columnContainedRules) {
-            return each.getTables().contains(tableName);
-        }
-        return false;
-    }
-    
     private boolean hasSelectExpandProjections(final SQLStatementContext<?> 
sqlStatementContext) {
         return sqlStatementContext instanceof SelectStatementContext && 
!((SelectStatementContext) 
sqlStatementContext).getProjectionsContext().getExpandProjections().isEmpty();
     }
     
     private QueryHeader createQueryHeader(final QueryHeaderBuilderEngine 
queryHeaderBuilderEngine, final ExecutionContext executionContext,
                                           final QueryResult queryResultSample, 
final ShardingSphereDatabase database, final int columnIndex) throws 
SQLException {
-        if (isTransparentStatement(executionContext.getSqlStatementContext())) 
{
+        if (transparentStatement) {
             return 
queryHeaderBuilderEngine.build(queryResultSample.getMetaData(), database, 
columnIndex);
         }
         return 
hasSelectExpandProjections(executionContext.getSqlStatementContext())

Reply via email to