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();