This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 96443c52034 Refactor ParameterRewritersBuilder (#33617)
96443c52034 is described below
commit 96443c5203471453525ca26ea53ce4b39f7718f5
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Nov 12 00:54:04 2024 +0800
Refactor ParameterRewritersBuilder (#33617)
---
.../context/EncryptSQLRewriteContextDecorator.java | 3 ++-
.../parameter/EncryptParameterRewritersRegistry.java | 7 ++-----
.../EncryptParameterRewritersRegistryTest.java | 17 +++++++++++++----
.../context/ShardingSQLRewriteContextDecorator.java | 3 ++-
.../parameter/ShardingParameterRewritersRegistry.java | 7 ++-----
.../ShardingParameterRewritersRegistryTest.java | 11 +++++++----
.../parameter/rewriter/ParameterRewritersBuilder.java | 11 +++++++----
7 files changed, 35 insertions(+), 24 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
index b9dd3c68cbb..f117fc4e277 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/context/EncryptSQLRewriteContextDecorator.java
@@ -32,6 +32,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
import
org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContextDecorator;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
+import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersBuilder;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.builder.SQLTokenGeneratorBuilder;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
@@ -55,7 +56,7 @@ public final class EncryptSQLRewriteContextDecorator
implements SQLRewriteContex
Collection<EncryptCondition> encryptConditions =
createEncryptConditions(rule, sqlRewriteContext);
String databaseName = sqlRewriteContext.getDatabase().getName();
if (!sqlRewriteContext.getParameters().isEmpty()) {
- Collection<ParameterRewriter> parameterRewriters = new
EncryptParameterRewritersRegistry(rule, databaseName, sqlStatementContext,
encryptConditions).getParameterRewriters();
+ Collection<ParameterRewriter> parameterRewriters = new
ParameterRewritersBuilder(sqlStatementContext).build(new
EncryptParameterRewritersRegistry(rule, databaseName, encryptConditions));
rewriteParameters(sqlRewriteContext, parameterRewriters);
}
SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new
EncryptTokenGenerateBuilder(rule, sqlStatementContext, encryptConditions,
databaseName);
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java
index fc38272baa1..6872ed73c38 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistry.java
@@ -25,11 +25,10 @@ import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInser
import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertValueParameterRewriter;
import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptPredicateParameterRewriter;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersRegistry;
-import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersBuilder;
+import java.util.Arrays;
import java.util.Collection;
/**
@@ -42,13 +41,11 @@ public final class EncryptParameterRewritersRegistry
implements ParameterRewrite
private final String databaseName;
- private final SQLStatementContext sqlStatementContext;
-
private final Collection<EncryptCondition> encryptConditions;
@Override
public Collection<ParameterRewriter> getParameterRewriters() {
- return new ParameterRewritersBuilder().build(sqlStatementContext,
+ return Arrays.asList(
new EncryptAssignmentParameterRewriter(rule, databaseName),
new EncryptPredicateParameterRewriter(rule, databaseName,
encryptConditions),
new EncryptInsertPredicateParameterRewriter(rule,
databaseName, encryptConditions),
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java
index 3fa4a122c7d..9854425abd3 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewritersRegistryTest.java
@@ -17,6 +17,10 @@
package org.apache.shardingsphere.encrypt.rewrite.parameter;
+import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptAssignmentParameterRewriter;
+import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter;
+import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertPredicateParameterRewriter;
+import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertValueParameterRewriter;
import
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptPredicateParameterRewriter;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -24,8 +28,9 @@ import
org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
import org.junit.jupiter.api.Test;
-import java.util.Collection;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
@@ -42,8 +47,12 @@ class EncryptParameterRewritersRegistryTest {
when(rule.findEncryptTable("foo_tbl").isPresent()).thenReturn(true);
SelectStatementContext sqlStatementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singleton("foo_tbl"));
- Collection<ParameterRewriter> actual = new
EncryptParameterRewritersRegistry(rule, DefaultDatabase.LOGIC_NAME,
sqlStatementContext, Collections.emptyList()).getParameterRewriters();
- assertThat(actual.size(), is(1));
- assertThat(actual.iterator().next(),
instanceOf(EncryptPredicateParameterRewriter.class));
+ List<ParameterRewriter> actual = new ArrayList<>(new
EncryptParameterRewritersRegistry(rule, DefaultDatabase.LOGIC_NAME,
Collections.emptyList()).getParameterRewriters());
+ assertThat(actual.size(), is(5));
+ assertThat(actual.get(0),
instanceOf(EncryptAssignmentParameterRewriter.class));
+ assertThat(actual.get(1),
instanceOf(EncryptPredicateParameterRewriter.class));
+ assertThat(actual.get(2),
instanceOf(EncryptInsertPredicateParameterRewriter.class));
+ assertThat(actual.get(3),
instanceOf(EncryptInsertValueParameterRewriter.class));
+ assertThat(actual.get(4),
instanceOf(EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.class));
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
index 16d26575fb9..a81ea26820e 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContext;
import
org.apache.shardingsphere.infra.rewrite.context.SQLRewriteContextDecorator;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
+import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersBuilder;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.sharding.constant.ShardingOrder;
import
org.apache.shardingsphere.sharding.rewrite.parameter.ShardingParameterRewritersRegistry;
@@ -51,7 +52,7 @@ public final class ShardingSQLRewriteContextDecorator
implements SQLRewriteConte
return;
}
if (!sqlRewriteContext.getParameters().isEmpty()) {
- Collection<ParameterRewriter> parameterRewriters = new
ShardingParameterRewritersRegistry(routeContext,
sqlStatementContext).getParameterRewriters();
+ Collection<ParameterRewriter> parameterRewriters = new
ParameterRewritersBuilder(sqlStatementContext).build(new
ShardingParameterRewritersRegistry(routeContext));
rewriteParameters(sqlRewriteContext, parameterRewriters);
}
sqlRewriteContext.addSQLTokenGenerators(new
ShardingTokenGenerateBuilder(rule, routeContext,
sqlStatementContext).getSQLTokenGenerators());
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistry.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistry.java
index 0bd9bc5da37..9bdbee35b9b 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistry.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistry.java
@@ -18,14 +18,13 @@
package org.apache.shardingsphere.sharding.rewrite.parameter;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersRegistry;
-import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewritersBuilder;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.keygen.GeneratedKeyInsertValueParameterRewriter;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import
org.apache.shardingsphere.sharding.rewrite.parameter.impl.ShardingPaginationParameterRewriter;
+import java.util.Arrays;
import java.util.Collection;
/**
@@ -36,10 +35,8 @@ public final class ShardingParameterRewritersRegistry
implements ParameterRewrit
private final RouteContext routeContext;
- private final SQLStatementContext sqlStatementContext;
-
@Override
public Collection<ParameterRewriter> getParameterRewriters() {
- return new ParameterRewritersBuilder().build(sqlStatementContext, new
GeneratedKeyInsertValueParameterRewriter(), new
ShardingPaginationParameterRewriter(routeContext));
+ return Arrays.asList(new GeneratedKeyInsertValueParameterRewriter(),
new ShardingPaginationParameterRewriter(routeContext));
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistryTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistryTest.java
index b923ba36bdf..2805707be23 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistryTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameter/ShardingParameterRewritersRegistryTest.java
@@ -19,11 +19,13 @@ package
org.apache.shardingsphere.sharding.rewrite.parameter;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
+import
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.keygen.GeneratedKeyInsertValueParameterRewriter;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import
org.apache.shardingsphere.sharding.rewrite.parameter.impl.ShardingPaginationParameterRewriter;
import org.junit.jupiter.api.Test;
-import java.util.Collection;
+import java.util.ArrayList;
+import java.util.List;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
@@ -38,8 +40,9 @@ class ShardingParameterRewritersRegistryTest {
void assertGetParameterRewriters() {
SelectStatementContext statementContext =
mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
when(statementContext.getPaginationContext().isHasPagination()).thenReturn(true);
- Collection<ParameterRewriter> actual = new
ShardingParameterRewritersRegistry(mock(RouteContext.class),
statementContext).getParameterRewriters();
- assertThat(actual.size(), is(1));
- assertThat(actual.iterator().next(),
instanceOf(ShardingPaginationParameterRewriter.class));
+ List<ParameterRewriter> actual = new ArrayList<>(new
ShardingParameterRewritersRegistry(mock(RouteContext.class)).getParameterRewriters());
+ assertThat(actual.size(), is(2));
+ assertThat(actual.get(0),
instanceOf(GeneratedKeyInsertValueParameterRewriter.class));
+ assertThat(actual.get(1),
instanceOf(ShardingPaginationParameterRewriter.class));
}
}
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/parameter/rewriter/ParameterRewritersBuilder.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/parameter/rewriter/ParameterRewritersBuilder.java
index d088ce6916c..9921dbef29b 100644
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/parameter/rewriter/ParameterRewritersBuilder.java
+++
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/parameter/rewriter/ParameterRewritersBuilder.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.infra.rewrite.parameter.rewriter;
+import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
@@ -27,18 +28,20 @@ import java.util.LinkedList;
* Parameter rewriters builder.
*/
@HighFrequencyInvocation
+@RequiredArgsConstructor
public final class ParameterRewritersBuilder {
+ private final SQLStatementContext sqlStatementContext;
+
/**
* Build parameter rewriters.
*
- * @param sqlStatementContext SQL statement context
- * @param rewriters parameter rewriters
+ * @param registry parameter rewriters registry
* @return built parameter rewriters
*/
- public Collection<ParameterRewriter> build(final SQLStatementContext
sqlStatementContext, final ParameterRewriter... rewriters) {
+ public Collection<ParameterRewriter> build(final
ParameterRewritersRegistry registry) {
Collection<ParameterRewriter> result = new LinkedList<>();
- for (ParameterRewriter each : rewriters) {
+ for (ParameterRewriter each : registry.getParameterRewriters()) {
if (each.isNeedRewrite(sqlStatementContext)) {
result.add(each);
}