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;