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

panjuan 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 10671be  optimize rewrite engine performance (#13916)
10671be is described below

commit 10671be9838a85573ebf4110d6108691690ed74c
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Fri Dec 3 16:48:09 2021 +0800

    optimize rewrite engine performance (#13916)
    
    * optimize containsClass method with map
    
    * reduce for each time
    
    * optimize java doc
---
 .../rewrite/token/EncryptTokenGenerateBuilder.java | 57 ++++++++++------------
 .../token/pojo/ShardingTokenGenerateBuilder.java   | 31 +++++-------
 .../shardingsphere/sharding/rule/ShardingRule.java |  2 +-
 .../sql/token/generator/SQLTokenGenerators.java    | 27 ++++------
 4 files changed, 50 insertions(+), 67 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
index 53b0ec8..e57968c 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
@@ -18,20 +18,20 @@
 package org.apache.shardingsphere.encrypt.rewrite.token;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.encrypt.rewrite.aware.QueryWithCipherColumnAware;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.AssistQueryAndPlainInsertColumnsTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptAlterTableTokenGenerator;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptAssignmentTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptCreateTableTokenGenerator;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptInsertOnUpdateTokenGenerator;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptForUseDefaultInsertColumnsTokenGenerator;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptInsertOnUpdateTokenGenerator;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptInsertValuesTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptPredicateColumnTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptPredicateRightValueTokenGenerator;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptProjectionTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.InsertCipherNameTokenGenerator;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
-import 
org.apache.shardingsphere.encrypt.rewrite.aware.QueryWithCipherColumnAware;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.AssistQueryAndPlainInsertColumnsTokenGenerator;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptAssignmentTokenGenerator;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptInsertValuesTokenGenerator;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptProjectionTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.SQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder;
 
@@ -50,31 +50,28 @@ public final class EncryptTokenGenerateBuilder implements 
SQLTokenGeneratorBuild
     
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
-        Collection<SQLTokenGenerator> result = buildSQLTokenGenerators();
-        for (SQLTokenGenerator each : result) {
-            if (each instanceof EncryptRuleAware) {
-                ((EncryptRuleAware) each).setEncryptRule(encryptRule);
-            }
-            if (each instanceof QueryWithCipherColumnAware) {
-                ((QueryWithCipherColumnAware) 
each).setQueryWithCipherColumn(queryWithCipherColumn);
-            }
-        }
+        Collection<SQLTokenGenerator> result = new LinkedList<>();
+        addSQLTokenGenerator(result, new EncryptProjectionTokenGenerator());
+        addSQLTokenGenerator(result, new EncryptAssignmentTokenGenerator());
+        addSQLTokenGenerator(result, new 
EncryptPredicateColumnTokenGenerator());
+        addSQLTokenGenerator(result, new 
EncryptPredicateRightValueTokenGenerator());
+        addSQLTokenGenerator(result, new EncryptInsertValuesTokenGenerator());
+        addSQLTokenGenerator(result, new 
EncryptForUseDefaultInsertColumnsTokenGenerator());
+        addSQLTokenGenerator(result, new InsertCipherNameTokenGenerator());
+        addSQLTokenGenerator(result, new 
AssistQueryAndPlainInsertColumnsTokenGenerator());
+        addSQLTokenGenerator(result, new 
EncryptInsertOnUpdateTokenGenerator());
+        addSQLTokenGenerator(result, new EncryptCreateTableTokenGenerator());
+        addSQLTokenGenerator(result, new EncryptAlterTableTokenGenerator());
         return result;
     }
     
-    private Collection<SQLTokenGenerator> buildSQLTokenGenerators() {
-        Collection<SQLTokenGenerator> result = new LinkedList<>();
-        result.add(new EncryptProjectionTokenGenerator());
-        result.add(new EncryptAssignmentTokenGenerator());
-        result.add(new EncryptPredicateColumnTokenGenerator());
-        result.add(new EncryptPredicateRightValueTokenGenerator());
-        result.add(new EncryptInsertValuesTokenGenerator());
-        result.add(new EncryptForUseDefaultInsertColumnsTokenGenerator());
-        result.add(new InsertCipherNameTokenGenerator());
-        result.add(new AssistQueryAndPlainInsertColumnsTokenGenerator());
-        result.add(new EncryptInsertOnUpdateTokenGenerator());
-        result.add(new EncryptCreateTableTokenGenerator());
-        result.add(new EncryptAlterTableTokenGenerator());
-        return result;
+    private void addSQLTokenGenerator(final Collection<SQLTokenGenerator> 
sqlTokenGenerators, final SQLTokenGenerator toBeAddedSQLTokenGenerator) {
+        if (toBeAddedSQLTokenGenerator instanceof EncryptRuleAware) {
+            ((EncryptRuleAware) 
toBeAddedSQLTokenGenerator).setEncryptRule(encryptRule);
+        }
+        if (toBeAddedSQLTokenGenerator instanceof QueryWithCipherColumnAware) {
+            ((QueryWithCipherColumnAware) 
toBeAddedSQLTokenGenerator).setQueryWithCipherColumn(queryWithCipherColumn);
+        }
+        sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ShardingTokenGenerateBuilder.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ShardingTokenGenerateBuilder.java
index 8657a6e..cf156f2 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ShardingTokenGenerateBuilder.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ShardingTokenGenerateBuilder.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.rewrite.token.pojo;
 
 import lombok.RequiredArgsConstructor;
-import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.ConstraintTokenGenerator;
-import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.sharding.rule.aware.ShardingRuleAware;
+import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.SQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.RouteContextAware;
+import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder;
+import org.apache.shardingsphere.infra.route.context.RouteContext;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.IgnoreForSingleRoute;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.AggregationDistinctTokenGenerator;
+import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.ConstraintTokenGenerator;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.DistinctProjectionPrefixTokenGenerator;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.IndexTokenGenerator;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.OffsetTokenGenerator;
@@ -36,9 +37,8 @@ import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.Ge
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.GeneratedKeyForUseDefaultInsertColumnsTokenGenerator;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.GeneratedKeyInsertColumnTokenGenerator;
 import 
org.apache.shardingsphere.sharding.rewrite.token.generator.impl.keygen.GeneratedKeyInsertValuesTokenGenerator;
-import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.SQLTokenGenerator;
-import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder;
-import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.sharding.rule.aware.ShardingRuleAware;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -55,19 +55,6 @@ public final class ShardingTokenGenerateBuilder implements 
SQLTokenGeneratorBuil
     
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
-        Collection<SQLTokenGenerator> result = buildSQLTokenGenerators();
-        for (SQLTokenGenerator each : result) {
-            if (each instanceof ShardingRuleAware) {
-                ((ShardingRuleAware) each).setShardingRule(shardingRule);
-            }
-            if (each instanceof RouteContextAware) {
-                ((RouteContextAware) each).setRouteContext(routeContext);
-            }
-        }
-        return result;
-    }
-    
-    private Collection<SQLTokenGenerator> buildSQLTokenGenerators() {
         Collection<SQLTokenGenerator> result = new LinkedList<>();
         addSQLTokenGenerator(result, new TableTokenGenerator());
         addSQLTokenGenerator(result, new 
DistinctProjectionPrefixTokenGenerator());
@@ -90,6 +77,12 @@ public final class ShardingTokenGenerateBuilder implements 
SQLTokenGeneratorBuil
         if (toBeAddedSQLTokenGenerator instanceof IgnoreForSingleRoute && 
routeContext.isSingleRouting()) {
             return;
         }
+        if (toBeAddedSQLTokenGenerator instanceof ShardingRuleAware) {
+            ((ShardingRuleAware) 
toBeAddedSQLTokenGenerator).setShardingRule(shardingRule);
+        }
+        if (toBeAddedSQLTokenGenerator instanceof RouteContextAware) {
+            ((RouteContextAware) 
toBeAddedSQLTokenGenerator).setRouteContext(routeContext);
+        }
         sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 700b065..e6bf2a7 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -282,7 +282,7 @@ public final class ShardingRule implements SchemaRule, 
DataNodeContainedRule, Ta
      * @param schema schema
      * @param sqlStatementContext sqlStatementContext
      * @param logicTableNames logic table names
-     * @return whether logic table is all binding tables.
+     * @return whether logic table is all binding tables
      */
     public boolean isAllBindingTables(final ShardingSphereSchema schema, final 
SQLStatementContext<?> sqlStatementContext, final Collection<String> 
logicTableNames) {
         if (!(sqlStatementContext instanceof SelectStatementContext && 
((SelectStatementContext) sqlStatementContext).isContainsJoinQuery())) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
index 6f5e8b1..72c53d7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
@@ -17,23 +17,25 @@
 
 package org.apache.shardingsphere.infra.rewrite.sql.token.generator;
 
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.ParametersAware;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.PreviousSQLTokensAware;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.SchemaMetaDataAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
-import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * SQL token generators.
  */
 public final class SQLTokenGenerators {
     
-    private final Collection<SQLTokenGenerator> sqlTokenGenerators = new 
LinkedList<>();
+    private final Map<Class<?>, SQLTokenGenerator> sqlTokenGenerators = new 
LinkedHashMap<>();
     
     /**
      * Add all SQL token generators.
@@ -42,19 +44,10 @@ public final class SQLTokenGenerators {
      */
     public void addAll(final Collection<SQLTokenGenerator> sqlTokenGenerators) 
{
         for (SQLTokenGenerator each : sqlTokenGenerators) {
-            if (!containsClass(each)) {
-                this.sqlTokenGenerators.add(each);
-            }
-        }
-    }
-    
-    private boolean containsClass(final SQLTokenGenerator sqlTokenGenerator) {
-        for (SQLTokenGenerator each : sqlTokenGenerators) {
-            if (each.getClass() == sqlTokenGenerator.getClass()) {
-                return true;
+            if (!this.sqlTokenGenerators.containsKey(each.getClass())) {
+                this.sqlTokenGenerators.put(each.getClass(), each);
             }
         }
-        return false;
     }
     
     /**
@@ -62,13 +55,13 @@ public final class SQLTokenGenerators {
      *
      * @param sqlStatementContext SQL statement context
      * @param parameters SQL parameters
-     * @param schema sShardingSphere schema
+     * @param schema ShardingSphere schema
      * @return SQL tokens
      */
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"rawtypes", "unchecked"})
     public List<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext, final List<Object> parameters, final ShardingSphereSchema 
schema) {
         List<SQLToken> result = new LinkedList<>();
-        for (SQLTokenGenerator each : sqlTokenGenerators) {
+        for (SQLTokenGenerator each : sqlTokenGenerators.values()) {
             setUpSQLTokenGenerator(each, parameters, schema, result);
             if (!each.isGenerateSQLToken(sqlStatementContext)) {
                 continue;

Reply via email to