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 b2ec597  Optimize rewrite engine logic to reduce token generator size 
(#14907)
b2ec597 is described below

commit b2ec5972f0d169a52b1b997a2a168c01e717e91f
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jan 20 09:37:51 2022 +0800

    Optimize rewrite engine logic to reduce token generator size (#14907)
---
 .../context/EncryptSQLRewriteContextDecorator.java  | 21 +++++++++++++++------
 .../parameter/EncryptParameterRewriterBuilder.java  |  7 +++++--
 .../rewrite/token/EncryptTokenGenerateBuilder.java  | 15 ++++++++++++---
 .../context/ShardingSQLRewriteContextDecorator.java | 18 ++++++++++++++----
 .../token/pojo/ShardingTokenGenerateBuilder.java    |  7 ++++++-
 .../infra/rewrite/context/SQLRewriteContext.java    |  2 +-
 .../sql/token/generator/SQLTokenGenerators.java     |  3 ---
 .../builder/DefaultTokenGeneratorBuilder.java       | 13 ++++++++++++-
 .../rewrite/context/SQLRewriteContextTest.java      | 11 +++++++----
 .../rewrite/engine/RouteSQLRewriteEngineTest.java   | 15 +++++++++++----
 10 files changed, 83 insertions(+), 29 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
index 53c2c50..712e80f 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
@@ -27,22 +27,31 @@ import 
org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContextDecorato
 import 
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 
+import java.util.Collection;
+
 /**
  * SQL rewrite context decorator for encrypt.
  */
 public final class EncryptSQLRewriteContextDecorator implements 
SQLRewriteContextDecorator<EncryptRule> {
     
-    @SuppressWarnings({"rawtypes", "unchecked"})
+    @SuppressWarnings("rawtypes")
     @Override
     public void decorate(final EncryptRule encryptRule, final 
ConfigurationProperties props, final SQLRewriteContext sqlRewriteContext, final 
RouteContext routeContext) {
-        for (ParameterRewriter each : new 
EncryptParameterRewriterBuilder(encryptRule, 
encryptRule.isQueryWithCipherColumn())
-                .getParameterRewriters(sqlRewriteContext.getSchema())) {
-            if (!sqlRewriteContext.getParameters().isEmpty() && 
each.isNeedRewrite(sqlRewriteContext.getSqlStatementContext())) {
+        if (!sqlRewriteContext.getParameters().isEmpty()) {
+            Collection<ParameterRewriter> parameterRewriters = new 
EncryptParameterRewriterBuilder(encryptRule).getParameterRewriters(sqlRewriteContext.getSchema());
+            rewriteParameters(sqlRewriteContext, parameterRewriters);
+        }
+        encryptRule.setUpEncryptorSchema(sqlRewriteContext.getSchema());
+        sqlRewriteContext.addSQLTokenGenerators(new 
EncryptTokenGenerateBuilder(encryptRule, 
sqlRewriteContext.getSqlStatementContext()).getSQLTokenGenerators());
+    }
+    
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private void rewriteParameters(final SQLRewriteContext sqlRewriteContext, 
final Collection<ParameterRewriter> parameterRewriters) {
+        for (ParameterRewriter each : parameterRewriters) {
+            if 
(each.isNeedRewrite(sqlRewriteContext.getSqlStatementContext())) {
                 each.rewrite(sqlRewriteContext.getParameterBuilder(), 
sqlRewriteContext.getSqlStatementContext(), sqlRewriteContext.getParameters());
             }
         }
-        encryptRule.setUpEncryptorSchema(sqlRewriteContext.getSchema());
-        sqlRewriteContext.addSQLTokenGenerators(new 
EncryptTokenGenerateBuilder(encryptRule, 
encryptRule.isQueryWithCipherColumn()).getSQLTokenGenerators());
     }
     
     @Override
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
index 7058ab6..276a3c0 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.parameter;
 
-import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.encrypt.rewrite.aware.QueryWithCipherColumnAware;
 import 
org.apache.shardingsphere.encrypt.rewrite.parameter.impl.EncryptAssignmentParameterRewriter;
 import 
org.apache.shardingsphere.encrypt.rewrite.parameter.impl.EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter;
@@ -36,13 +35,17 @@ import java.util.LinkedList;
 /**
  * Parameter rewriter builder for encrypt.
  */
-@RequiredArgsConstructor
 public final class EncryptParameterRewriterBuilder implements 
ParameterRewriterBuilder {
     
     private final EncryptRule encryptRule;
     
     private final boolean queryWithCipherColumn;
     
+    public EncryptParameterRewriterBuilder(final EncryptRule encryptRule) {
+        this.encryptRule = encryptRule;
+        this.queryWithCipherColumn = encryptRule.isQueryWithCipherColumn();
+    }
+    
     @Override
     public Collection<ParameterRewriter> getParameterRewriters(final 
ShardingSphereSchema schema) {
         Collection<ParameterRewriter> result = getParameterRewriters();
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 7520738..5907046 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
@@ -17,7 +17,6 @@
 
 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;
@@ -33,6 +32,7 @@ import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.impl.EncryptPro
 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.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.SQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.builder.SQLTokenGeneratorBuilder;
 
@@ -42,13 +42,20 @@ import java.util.LinkedList;
 /**
  * SQL token generator builder for encrypt.
  */
-@RequiredArgsConstructor
 public final class EncryptTokenGenerateBuilder implements 
SQLTokenGeneratorBuilder {
     
     private final EncryptRule encryptRule;
     
     private final boolean queryWithCipherColumn;
     
+    private final SQLStatementContext<?> sqlStatementContext;
+    
+    public EncryptTokenGenerateBuilder(final EncryptRule encryptRule, final 
SQLStatementContext<?> sqlStatementContext) {
+        this.encryptRule = encryptRule;
+        this.queryWithCipherColumn = encryptRule.isQueryWithCipherColumn();
+        this.sqlStatementContext = sqlStatementContext;
+    }
+    
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
         Collection<SQLTokenGenerator> result = new LinkedList<>();
@@ -74,6 +81,8 @@ public final class EncryptTokenGenerateBuilder implements 
SQLTokenGeneratorBuild
         if (toBeAddedSQLTokenGenerator instanceof QueryWithCipherColumnAware) {
             ((QueryWithCipherColumnAware) 
toBeAddedSQLTokenGenerator).setQueryWithCipherColumn(queryWithCipherColumn);
         }
-        sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
+        if 
(toBeAddedSQLTokenGenerator.isGenerateSQLToken(sqlStatementContext)) {
+            sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
+        }
     }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
index f02fa9f..ef000ef 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
@@ -28,24 +28,34 @@ import 
org.apache.shardingsphere.sharding.rewrite.parameter.ShardingParameterRew
 import 
org.apache.shardingsphere.sharding.rewrite.token.pojo.ShardingTokenGenerateBuilder;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 
+import java.util.Collection;
+
 /**
  * SQL rewrite context decorator for sharding.
  */
 @Setter
 public final class ShardingSQLRewriteContextDecorator implements 
SQLRewriteContextDecorator<ShardingRule> {
     
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings("rawtypes")
     @Override
     public void decorate(final ShardingRule shardingRule, final 
ConfigurationProperties props, final SQLRewriteContext sqlRewriteContext, final 
RouteContext routeContext) {
         if (routeContext.isFederated()) {
             return;
         }
-        for (ParameterRewriter each : new 
ShardingParameterRewriterBuilder(shardingRule, 
routeContext).getParameterRewriters(sqlRewriteContext.getSchema())) {
-            if (!sqlRewriteContext.getParameters().isEmpty() && 
each.isNeedRewrite(sqlRewriteContext.getSqlStatementContext())) {
+        if (!sqlRewriteContext.getParameters().isEmpty()) {
+            Collection<ParameterRewriter> parameterRewriters = new 
ShardingParameterRewriterBuilder(shardingRule, 
routeContext).getParameterRewriters(sqlRewriteContext.getSchema());
+            rewriteParameters(sqlRewriteContext, parameterRewriters);
+        }
+        sqlRewriteContext.addSQLTokenGenerators(new 
ShardingTokenGenerateBuilder(shardingRule, routeContext, 
sqlRewriteContext.getSqlStatementContext()).getSQLTokenGenerators());
+    }
+    
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private void rewriteParameters(final SQLRewriteContext sqlRewriteContext, 
final Collection<ParameterRewriter> parameterRewriters) {
+        for (ParameterRewriter each : parameterRewriters) {
+            if 
(each.isNeedRewrite(sqlRewriteContext.getSqlStatementContext())) {
                 each.rewrite(sqlRewriteContext.getParameterBuilder(), 
sqlRewriteContext.getSqlStatementContext(), sqlRewriteContext.getParameters());
             }
         }
-        sqlRewriteContext.addSQLTokenGenerators(new 
ShardingTokenGenerateBuilder(shardingRule, 
routeContext).getSQLTokenGenerators());
     }
     
     @Override
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 bd35088..9a626be 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,6 +18,7 @@
 package org.apache.shardingsphere.sharding.rewrite.token.pojo;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 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;
@@ -54,6 +55,8 @@ public final class ShardingTokenGenerateBuilder implements 
SQLTokenGeneratorBuil
     
     private final RouteContext routeContext;
     
+    private final SQLStatementContext<?> sqlStatementContext;
+    
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
         Collection<SQLTokenGenerator> result = new LinkedList<>();
@@ -85,6 +88,8 @@ public final class ShardingTokenGenerateBuilder implements 
SQLTokenGeneratorBuil
         if (toBeAddedSQLTokenGenerator instanceof RouteContextAware) {
             ((RouteContextAware) 
toBeAddedSQLTokenGenerator).setRouteContext(routeContext);
         }
-        sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
+        if 
(toBeAddedSQLTokenGenerator.isGenerateSQLToken(sqlStatementContext)) {
+            sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
+        }
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
index 117b6b8..1ef3449 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContext.java
@@ -60,7 +60,7 @@ public final class SQLRewriteContext {
         this.sqlStatementContext = sqlStatementContext;
         this.sql = sql;
         this.parameters = parameters;
-        addSQLTokenGenerators(new 
DefaultTokenGeneratorBuilder().getSQLTokenGenerators());
+        addSQLTokenGenerators(new 
DefaultTokenGeneratorBuilder(sqlStatementContext).getSQLTokenGenerators());
         parameterBuilder = ((sqlStatementContext instanceof 
InsertStatementContext) && (null == ((InsertStatementContext) 
sqlStatementContext).getInsertSelectContext()))
                 ? new GroupedParameterBuilder(
                         ((InsertStatementContext) 
sqlStatementContext).getGroupedParameters(), ((InsertStatementContext) 
sqlStatementContext).getOnDuplicateKeyUpdateParameters())
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 72c53d7..13a02a5 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
@@ -63,9 +63,6 @@ public final class SQLTokenGenerators {
         List<SQLToken> result = new LinkedList<>();
         for (SQLTokenGenerator each : sqlTokenGenerators.values()) {
             setUpSQLTokenGenerator(each, parameters, schema, result);
-            if (!each.isGenerateSQLToken(sqlStatementContext)) {
-                continue;
-            }
             if (each instanceof OptionalSQLTokenGenerator) {
                 SQLToken sqlToken = ((OptionalSQLTokenGenerator) 
each).generateSQLToken(sqlStatementContext);
                 if (!result.contains(sqlToken)) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/builder/DefaultTokenGeneratorBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/builder/DefaultTokenGeneratorBuilder.java
index 8a10d67..8f649a4 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/builder/DefaultTokenGeneratorBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/builder/DefaultTokenGeneratorBuilder.java
@@ -17,6 +17,8 @@
 
 package org.apache.shardingsphere.infra.rewrite.sql.token.generator.builder;
 
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.SQLTokenGenerator;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.generic.RemoveTokenGenerator;
 
@@ -26,12 +28,21 @@ import java.util.LinkedList;
 /**
  * Default SQL token generator builder.
  */
+@RequiredArgsConstructor
 public final class DefaultTokenGeneratorBuilder implements 
SQLTokenGeneratorBuilder {
     
+    private final SQLStatementContext<?> sqlStatementContext;
+    
     @Override
     public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
         Collection<SQLTokenGenerator> result = new LinkedList<>();
-        result.add(new RemoveTokenGenerator());
+        addSQLTokenGenerator(result, new RemoveTokenGenerator());
         return result;
     }
+    
+    private void addSQLTokenGenerator(final Collection<SQLTokenGenerator> 
sqlTokenGenerators, final SQLTokenGenerator toBeAddedSQLTokenGenerator) {
+        if 
(toBeAddedSQLTokenGenerator.isGenerateSQLToken(sqlStatementContext)) {
+            sqlTokenGenerators.add(toBeAddedSQLTokenGenerator);
+        }
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
index ca9c851..e90cfaf 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/context/SQLRewriteContextTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.rewrite.context;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.infra.binder.type.TableAvailable;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.GroupedParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder;
@@ -37,6 +38,7 @@ import java.util.Collections;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -61,21 +63,22 @@ public final class SQLRewriteContextTest {
     @Before
     public void setUp() {
         
when(optionalSQLTokenGenerator.generateSQLToken(sqlStatementContext)).thenReturn(sqlToken);
-        
when(optionalSQLTokenGenerator.isGenerateSQLToken(sqlStatementContext)).thenReturn(true);
         
when(collectionSQLTokenGenerator.generateSQLTokens(sqlStatementContext)).thenReturn(Collections.singleton(sqlToken));
-        
when(collectionSQLTokenGenerator.isGenerateSQLToken(sqlStatementContext)).thenReturn(true);
     }
     
     @Test
     public void assertInsertStatementContext() {
-        InsertStatementContext statementContext = 
mock(InsertStatementContext.class);
+        InsertStatementContext statementContext = 
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
+        when(statementContext.getInsertSelectContext()).thenReturn(null);
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "INSERT 
INTO tbl VALUES (?)", Collections.singletonList(1));
         assertThat(sqlRewriteContext.getParameterBuilder(), 
instanceOf(GroupedParameterBuilder.class));
     }
     
     @Test
     public void assertNotInsertStatementContext() {
-        SelectStatementContext statementContext = 
mock(SelectStatementContext.class);
+        SelectStatementContext statementContext = 
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "SELECT * 
FROM tbl WHERE id = ?", Collections.singletonList(1));
         assertThat(sqlRewriteContext.getParameterBuilder(), 
instanceOf(StandardParameterBuilder.class));
     }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
index fbb5380..97eaea8 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.rewrite.engine;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.infra.binder.type.TableAvailable;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
@@ -72,7 +73,8 @@ public final class RouteSQLRewriteEngineTest {
     
     @Test
     public void assertRewriteWithGroupedParameterBuilderForBroadcast() {
-        InsertStatementContext statementContext = 
mock(InsertStatementContext.class);
+        InsertStatementContext statementContext = 
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
         
when(statementContext.getGroupedParameters()).thenReturn(Collections.singletonList(Collections.singletonList(1)));
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "INSERT 
INTO tbl VALUES (?)", Collections.singletonList(1));
         RouteUnit routeUnit = new RouteUnit(new RouteMapper("ds", "ds_0"), 
Collections.singletonList(new RouteMapper("tbl", "tbl_0")));
@@ -86,7 +88,8 @@ public final class RouteSQLRewriteEngineTest {
     
     @Test
     public void 
assertRewriteWithGroupedParameterBuilderForRouteWithSameDataNode() {
-        InsertStatementContext statementContext = 
mock(InsertStatementContext.class);
+        InsertStatementContext statementContext = 
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
         
when(statementContext.getGroupedParameters()).thenReturn(Collections.singletonList(Collections.singletonList(1)));
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "INSERT 
INTO tbl VALUES (?)", Collections.singletonList(1));
         RouteUnit routeUnit = new RouteUnit(new RouteMapper("ds", "ds_0"), 
Collections.singletonList(new RouteMapper("tbl", "tbl_0")));
@@ -102,7 +105,8 @@ public final class RouteSQLRewriteEngineTest {
     
     @Test
     public void 
assertRewriteWithGroupedParameterBuilderForRouteWithEmptyDataNode() {
-        InsertStatementContext statementContext = 
mock(InsertStatementContext.class);
+        InsertStatementContext statementContext = 
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
         
when(statementContext.getGroupedParameters()).thenReturn(Collections.singletonList(Collections.singletonList(1)));
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "INSERT 
INTO tbl VALUES (?)", Collections.singletonList(1));
         RouteUnit routeUnit = new RouteUnit(new RouteMapper("ds", "ds_0"), 
Collections.singletonList(new RouteMapper("tbl", "tbl_0")));
@@ -117,8 +121,11 @@ public final class RouteSQLRewriteEngineTest {
     
     @Test
     public void 
assertRewriteWithGroupedParameterBuilderForRouteWithNotSameDataNode() {
-        InsertStatementContext statementContext = 
mock(InsertStatementContext.class);
+        InsertStatementContext statementContext = 
mock(InsertStatementContext.class, RETURNS_DEEP_STUBS);
+        when(((TableAvailable) 
statementContext).getTablesContext().getSchemaName().isPresent()).thenReturn(false);
+        when(statementContext.getInsertSelectContext()).thenReturn(null);
         
when(statementContext.getGroupedParameters()).thenReturn(Collections.singletonList(Collections.singletonList(1)));
+        
when(statementContext.getOnDuplicateKeyUpdateParameters()).thenReturn(Collections.emptyList());
         SQLRewriteContext sqlRewriteContext = new 
SQLRewriteContext(mock(ShardingSphereSchema.class), statementContext, "INSERT 
INTO tbl VALUES (?)", Collections.singletonList(1));
         RouteUnit routeUnit = new RouteUnit(new RouteMapper("ds", "ds_0"), 
Collections.singletonList(new RouteMapper("tbl", "tbl_0")));
         RouteContext routeContext = new RouteContext();

Reply via email to