This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 485153d1ed1 Remove DatabaseAware and refactor encrypt token generator
logic (#34427)
485153d1ed1 is described below
commit 485153d1ed1ad99ee91cde4168a32838a78fffc4
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Jan 22 14:26:19 2025 +0800
Remove DatabaseAware and refactor encrypt token generator logic (#34427)
* Refactor EncryptPredicateColumnTokenGenerator encrypt logic
* Remove DatabaseAware and refactor encrypt token generator logic
* fix unit test
---
.../context/EncryptSQLRewriteContextDecorator.java | 2 +-
.../rewrite/token/EncryptTokenGenerateBuilder.java | 20 ++++++-------
.../EncryptInsertAssignmentTokenGenerator.java | 5 ++--
.../EncryptUpdateAssignmentTokenGenerator.java | 5 ++--
.../EncryptInsertOnUpdateTokenGenerator.java | 5 ++--
.../insert/EncryptInsertValuesTokenGenerator.java | 7 ++---
.../EncryptInsertPredicateValueTokenGenerator.java | 10 +++----
.../EncryptPredicateColumnTokenGenerator.java | 10 +++----
.../EncryptPredicateValueTokenGenerator.java | 7 ++---
...ncryptInsertSelectProjectionTokenGenerator.java | 4 +--
.../EncryptProjectionTokenGenerator.java | 4 +--
.../EncryptSelectProjectionTokenGenerator.java | 2 +-
.../select/EncryptGroupByItemTokenGenerator.java | 4 +--
.../token/EncryptTokenGenerateBuilderTest.java | 2 +-
.../EncryptInsertAssignmentTokenGeneratorTest.java | 3 +-
.../EncryptUpdateAssignmentTokenGeneratorTest.java | 3 +-
.../EncryptInsertOnUpdateTokenGeneratorTest.java | 3 +-
.../EncryptInsertValuesTokenGeneratorTest.java | 4 +--
.../EncryptPredicateValueTokenGeneratorTest.java | 5 ++--
.../EncryptProjectionTokenGeneratorTest.java | 6 +++-
.../common/generator/aware/DatabaseAware.java | 33 ----------------------
.../generic/SubstitutableColumnNameTokenTest.java | 10 +++++--
22 files changed, 59 insertions(+), 95 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 bfcaa9c4890..05678e43ac1 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
@@ -60,7 +60,7 @@ public final class EncryptSQLRewriteContextDecorator
implements SQLRewriteContex
.build(new EncryptParameterRewritersRegistry(rule,
sqlRewriteContext.getDatabase().getName(), encryptConditions));
rewriteParameters(sqlRewriteContext, parameterRewriters);
}
- SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new
EncryptTokenGenerateBuilder(rule, sqlStatementContext, encryptConditions,
sqlRewriteContext.getDatabase());
+ SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new
EncryptTokenGenerateBuilder(sqlStatementContext, encryptConditions, rule,
sqlRewriteContext.getDatabase());
sqlRewriteContext.addSQLTokenGenerators(sqlTokenGeneratorBuilder.getSQLTokenGenerators());
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
index d8aea0caf6e..a13fc0ec593 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
@@ -41,7 +41,6 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.SQLTokenGenerator;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.builder.SQLTokenGeneratorBuilder;
import java.util.Collection;
@@ -53,12 +52,12 @@ import java.util.LinkedList;
@RequiredArgsConstructor
public final class EncryptTokenGenerateBuilder implements
SQLTokenGeneratorBuilder {
- private final EncryptRule rule;
-
private final SQLStatementContext sqlStatementContext;
private final Collection<EncryptCondition> encryptConditions;
+ private final EncryptRule rule;
+
private final ShardingSphereDatabase database;
@Override
@@ -66,17 +65,17 @@ public final class EncryptTokenGenerateBuilder implements
SQLTokenGeneratorBuild
Collection<SQLTokenGenerator> result = new LinkedList<>();
addSQLTokenGenerator(result, new
EncryptSelectProjectionTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptInsertSelectProjectionTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptInsertAssignmentTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptUpdateAssignmentTokenGenerator(rule));
+ addSQLTokenGenerator(result, new
EncryptInsertAssignmentTokenGenerator(rule, database));
+ addSQLTokenGenerator(result, new
EncryptUpdateAssignmentTokenGenerator(rule, database));
addSQLTokenGenerator(result, new
EncryptPredicateColumnTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptInsertPredicateColumnTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptPredicateValueTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptInsertPredicateValueTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptInsertValuesTokenGenerator(rule));
+ addSQLTokenGenerator(result, new
EncryptPredicateValueTokenGenerator(rule, database));
+ addSQLTokenGenerator(result, new
EncryptInsertPredicateValueTokenGenerator(rule, database));
+ addSQLTokenGenerator(result, new
EncryptInsertValuesTokenGenerator(rule, database));
addSQLTokenGenerator(result, new
EncryptInsertDefaultColumnsTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptInsertCipherNameTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptInsertDerivedColumnsTokenGenerator(rule));
- addSQLTokenGenerator(result, new
EncryptInsertOnUpdateTokenGenerator(rule));
+ addSQLTokenGenerator(result, new
EncryptInsertOnUpdateTokenGenerator(rule, database));
addSQLTokenGenerator(result, new
EncryptGroupByItemTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptIndexColumnTokenGenerator(rule));
addSQLTokenGenerator(result, new
EncryptCreateTableTokenGenerator(rule));
@@ -92,9 +91,6 @@ public final class EncryptTokenGenerateBuilder implements
SQLTokenGeneratorBuild
}
private void setUpSQLTokenGenerator(final SQLTokenGenerator
toBeAddedSQLTokenGenerator) {
- if (toBeAddedSQLTokenGenerator instanceof DatabaseAware) {
- ((DatabaseAware) toBeAddedSQLTokenGenerator).setDatabase(database);
- }
if (toBeAddedSQLTokenGenerator instanceof EncryptConditionsAware) {
((EncryptConditionsAware)
toBeAddedSQLTokenGenerator).setEncryptConditions(encryptConditions);
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
index 7afea2b2fa9..5547fda947c 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
@@ -37,11 +36,11 @@ import java.util.Collection;
@HighFrequencyInvocation
@RequiredArgsConstructor
@Setter
-public final class EncryptInsertAssignmentTokenGenerator implements
CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseAware {
+public final class EncryptInsertAssignmentTokenGenerator implements
CollectionSQLTokenGenerator<InsertStatementContext> {
private final EncryptRule rule;
- private ShardingSphereDatabase database;
+ private final ShardingSphereDatabase database;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
index 9677c6a0565..ca41790067d 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
@@ -19,7 +19,6 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
@@ -37,11 +36,11 @@ import java.util.Collection;
@HighFrequencyInvocation
@RequiredArgsConstructor
@Setter
-public final class EncryptUpdateAssignmentTokenGenerator implements
CollectionSQLTokenGenerator<UpdateStatementContext>, DatabaseAware {
+public final class EncryptUpdateAssignmentTokenGenerator implements
CollectionSQLTokenGenerator<UpdateStatementContext> {
private final EncryptRule rule;
- private ShardingSphereDatabase database;
+ private final ShardingSphereDatabase database;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
index ba0fb916d0c..75d98a2bb8f 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
@@ -21,7 +21,6 @@ import com.google.common.base.Preconditions;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import
org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptAssignmentToken;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptFunctionAssignmentToken;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptLiteralAssignmentToken;
@@ -57,11 +56,11 @@ import java.util.Optional;
@HighFrequencyInvocation
@RequiredArgsConstructor
@Setter
-public final class EncryptInsertOnUpdateTokenGenerator implements
CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseAware {
+public final class EncryptInsertOnUpdateTokenGenerator implements
CollectionSQLTokenGenerator<InsertStatementContext> {
private final EncryptRule rule;
- private ShardingSphereDatabase database;
+ private final ShardingSphereDatabase database;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
index 964fc696784..f7799392089 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.insert;
import com.google.common.base.Preconditions;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptInsertValuesToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
@@ -58,13 +57,13 @@ import java.util.Optional;
*/
@RequiredArgsConstructor
@Setter
-public final class EncryptInsertValuesTokenGenerator implements
OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware,
DatabaseAware {
+public final class EncryptInsertValuesTokenGenerator implements
OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware {
private final EncryptRule rule;
- private List<SQLToken> previousSQLTokens;
+ private final ShardingSphereDatabase database;
- private ShardingSphereDatabase database;
+ private List<SQLToken> previousSQLTokens;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
index 28d809f7572..a288e9af239 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.ParametersAware;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
@@ -40,16 +39,16 @@ import java.util.List;
@HighFrequencyInvocation
@RequiredArgsConstructor
@Setter
-public final class EncryptInsertPredicateValueTokenGenerator implements
CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware,
EncryptConditionsAware, DatabaseAware {
+public final class EncryptInsertPredicateValueTokenGenerator implements
CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware,
EncryptConditionsAware {
private final EncryptRule rule;
+ private final ShardingSphereDatabase database;
+
private List<Object> parameters;
private Collection<EncryptCondition> encryptConditions;
- private ShardingSphereDatabase database;
-
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
return sqlStatementContext instanceof InsertStatementContext && null
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext()
@@ -58,10 +57,9 @@ public final class EncryptInsertPredicateValueTokenGenerator
implements Collecti
@Override
public Collection<SQLToken> generateSQLTokens(final SQLStatementContext
sqlStatementContext) {
- EncryptPredicateValueTokenGenerator generator = new
EncryptPredicateValueTokenGenerator(rule);
+ EncryptPredicateValueTokenGenerator generator = new
EncryptPredicateValueTokenGenerator(rule, database);
generator.setParameters(parameters);
generator.setEncryptConditions(encryptConditions);
- generator.setDatabase(database);
return generator.generateSQLTokens(((InsertStatementContext)
sqlStatementContext).getInsertSelectContext().getSelectStatementContext());
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
index 8497bb70a98..e06d6b83661 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
@@ -100,12 +100,12 @@ public final class EncryptPredicateColumnTokenGenerator
implements CollectionSQL
if (includesLike(andPredicates, columnSegment)) {
Optional<LikeQueryColumnItem> likeQueryColumnItem =
encryptColumn.getLikeQuery();
Preconditions.checkState(likeQueryColumnItem.isPresent());
- return new SubstitutableColumnNameToken(
- startIndex, stopIndex,
createColumnProjections(likeQueryColumnItem.get().getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType), databaseType);
+ return new SubstitutableColumnNameToken(startIndex, stopIndex,
+
createColumnProjections(likeQueryColumnItem.get().getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType), databaseType);
}
- Collection<Projection> columnProjections =
- encryptColumn.getAssistedQuery().map(optional ->
createColumnProjections(optional.getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType))
- .orElseGet(() ->
createColumnProjections(encryptColumn.getCipher().getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType));
+ Collection<Projection> columnProjections =
encryptColumn.getAssistedQuery()
+ .map(optional -> createColumnProjections(optional.getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType))
+ .orElseGet(() ->
createColumnProjections(encryptColumn.getCipher().getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType));
return new SubstitutableColumnNameToken(startIndex, stopIndex,
columnProjections, databaseType);
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
index bf963a3f665..cbc4d23f373 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
@@ -39,7 +39,6 @@ import
org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
-import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.DatabaseAware;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.ParametersAware;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.FunctionSegment;
@@ -57,16 +56,16 @@ import java.util.Optional;
@HighFrequencyInvocation
@RequiredArgsConstructor
@Setter
-public final class EncryptPredicateValueTokenGenerator implements
CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware,
EncryptConditionsAware, DatabaseAware {
+public final class EncryptPredicateValueTokenGenerator implements
CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware,
EncryptConditionsAware {
private final EncryptRule rule;
+ private final ShardingSphereDatabase database;
+
private List<Object> parameters;
private Collection<EncryptCondition> encryptConditions;
- private ShardingSphereDatabase database;
-
@Override
public boolean isGenerateSQLToken(final SQLStatementContext
sqlStatementContext) {
return sqlStatementContext instanceof WhereAvailable;
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
index 90a75eeab37..e6f5801b222 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
@@ -49,7 +49,7 @@ public final class
EncryptInsertSelectProjectionTokenGenerator implements Collec
@Override
public Collection<SQLToken> generateSQLTokens(final InsertStatementContext
sqlStatementContext) {
- return new EncryptProjectionTokenGenerator(
- previousSQLTokens, rule,
sqlStatementContext.getDatabaseType()).generateSQLTokens(sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
+ return new EncryptProjectionTokenGenerator(previousSQLTokens,
sqlStatementContext.getDatabaseType(), rule)
+
.generateSQLTokens(sqlStatementContext.getInsertSelectContext().getSelectStatementContext());
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
index 5877e355428..14aa6a20cad 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
@@ -57,10 +57,10 @@ public final class EncryptProjectionTokenGenerator {
private final List<SQLToken> previousSQLTokens;
- private final EncryptRule rule;
-
private final DatabaseType databaseType;
+ private final EncryptRule rule;
+
/**
* Generate SQL tokens.
*
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
index 0fe07b7e103..a4bc8f6677b 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptSelectProjectionTokenGenerator.java
@@ -49,6 +49,6 @@ public final class EncryptSelectProjectionTokenGenerator
implements CollectionSQ
@Override
public Collection<SQLToken> generateSQLTokens(final SelectStatementContext
sqlStatementContext) {
- return new EncryptProjectionTokenGenerator(previousSQLTokens, rule,
sqlStatementContext.getDatabaseType()).generateSQLTokens(sqlStatementContext);
+ return new EncryptProjectionTokenGenerator(previousSQLTokens,
sqlStatementContext.getDatabaseType(),
rule).generateSQLTokens(sqlStatementContext);
}
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
index cfc5d86a689..b7cbec1fde8 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/select/EncryptGroupByItemTokenGenerator.java
@@ -91,8 +91,8 @@ public final class EncryptGroupByItemTokenGenerator
implements CollectionSQLToke
int startIndex = columnSegment.getOwner().isPresent() ?
columnSegment.getOwner().get().getStopIndex() + 2 :
columnSegment.getStartIndex();
int stopIndex = columnSegment.getStopIndex();
return Optional.of(encryptColumn.getAssistedQuery()
- .map(optional -> new SubstitutableColumnNameToken(
- startIndex, stopIndex,
createColumnProjections(optional.getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType), databaseType))
+ .map(optional -> new SubstitutableColumnNameToken(startIndex,
stopIndex, createColumnProjections(optional.getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType),
+ databaseType))
.orElseGet(() -> new SubstitutableColumnNameToken(startIndex,
stopIndex,
createColumnProjections(encryptColumn.getCipher().getName(),
columnSegment.getIdentifier().getQuoteCharacter(), databaseType),
databaseType)));
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
index 3b55e6741e8..5b1f712cb32 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
@@ -56,7 +56,7 @@ class EncryptTokenGenerateBuilderTest {
when(selectStatementContext.getOrderByContext().getItems()).thenReturn(Collections.singleton(mock(OrderByItem.class)));
when(selectStatementContext.getGroupByContext().getItems()).thenReturn(Collections.emptyList());
when(selectStatementContext.getWhereSegments()).thenReturn(Collections.emptyList());
- EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new
EncryptTokenGenerateBuilder(rule, selectStatementContext,
Collections.emptyList(), mock(ShardingSphereDatabase.class));
+ EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new
EncryptTokenGenerateBuilder(selectStatementContext, Collections.emptyList(),
rule, mock(ShardingSphereDatabase.class));
Collection<SQLTokenGenerator> sqlTokenGenerators =
encryptTokenGenerateBuilder.getSQLTokenGenerators();
assertThat(sqlTokenGenerators.size(), is(3));
Iterator<SQLTokenGenerator> iterator = sqlTokenGenerators.iterator();
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
index 6c882557e37..b23b7578fee 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
import org.junit.jupiter.api.BeforeEach;
@@ -49,7 +50,7 @@ class EncryptInsertAssignmentTokenGeneratorTest {
@BeforeEach
void setup() {
- tokenGenerator = new
EncryptInsertAssignmentTokenGenerator(mockEncryptRule());
+ tokenGenerator = new
EncryptInsertAssignmentTokenGenerator(mockEncryptRule(),
mock(ShardingSphereDatabase.class));
when(insertStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).thenReturn("table");
ColumnAssignmentSegment assignmentSegment =
mock(ColumnAssignmentSegment.class);
when(setAssignmentSegment.getAssignments()).thenReturn(Collections.singleton(assignmentSegment));
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
index 2038b25a38e..c8e7efa75c3 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -45,7 +46,7 @@ class EncryptUpdateAssignmentTokenGeneratorTest {
@BeforeEach
void setup() {
- tokenGenerator = new
EncryptUpdateAssignmentTokenGenerator(mockEncryptRule());
+ tokenGenerator = new
EncryptUpdateAssignmentTokenGenerator(mockEncryptRule(),
mock(ShardingSphereDatabase.class));
when(updateStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).thenReturn("table");
ColumnAssignmentSegment assignmentSegment =
mock(ColumnAssignmentSegment.class);
when(updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()).thenReturn(Collections.singleton(assignmentSegment));
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java
index a84e756620d..f7f1947997c 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGeneratorTest.java
@@ -59,8 +59,7 @@ class EncryptInsertOnUpdateTokenGeneratorTest {
@BeforeEach
void setup() {
- generator = new EncryptInsertOnUpdateTokenGenerator(mockEncryptRule());
- generator.setDatabase(mock(ShardingSphereDatabase.class));
+ generator = new EncryptInsertOnUpdateTokenGenerator(mockEncryptRule(),
mock(ShardingSphereDatabase.class));
}
private EncryptRule mockEncryptRule() {
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGeneratorTest.java
index 93e2c434d8b..f6086456483 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGeneratorTest.java
@@ -36,7 +36,7 @@ class EncryptInsertValuesTokenGeneratorTest {
@BeforeEach
void setup() {
- generator = new
EncryptInsertValuesTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule());
+ generator = new
EncryptInsertValuesTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule(),
new ShardingSphereDatabase("foo_db", mock(), mock(), mock(),
Collections.emptyList()));
}
@Test
@@ -47,14 +47,12 @@ class EncryptInsertValuesTokenGeneratorTest {
@Test
void assertGenerateSQLTokenFromGenerateNewSQLToken() {
generator.setPreviousSQLTokens(Collections.emptyList());
- generator.setDatabase(new ShardingSphereDatabase("foo_db", mock(),
mock(), mock(), Collections.emptyList()));
assertThat(generator.generateSQLToken(EncryptGeneratorFixtureBuilder.createInsertStatementContext(Arrays.asList(1,
"Tom", 0, "123456"))).toString(), is("(?, ?, ?, ?, ?, ?)"));
}
@Test
void assertGenerateSQLTokenFromPreviousSQLTokens() {
generator.setPreviousSQLTokens(EncryptGeneratorFixtureBuilder.getPreviousSQLTokens());
- generator.setDatabase(new ShardingSphereDatabase("foo_db", mock(),
mock(), mock(), Collections.emptyList()));
assertThat(generator.generateSQLToken(EncryptGeneratorFixtureBuilder.createInsertStatementContext(Arrays.asList(1,
"Tom", 0, "123456"))).toString(), is("(?, ?, ?, ?, ?, ?)"));
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
index 29a88eae732..43eaf4af502 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
@@ -40,19 +40,18 @@ class EncryptPredicateValueTokenGeneratorTest {
@BeforeEach
void setup() {
- generator = new
EncryptPredicateValueTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule());
+ generator = new
EncryptPredicateValueTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule(),
+ new ShardingSphereDatabase("foo_db", mock(), mock(), mock(),
Collections.emptyList()));
}
@Test
void assertIsGenerateSQLToken() {
- generator.setDatabase(new ShardingSphereDatabase("foo_db", mock(),
mock(), mock(), Collections.emptyList()));
assertTrue(generator.isGenerateSQLToken(EncryptGeneratorFixtureBuilder.createUpdateStatementContext()));
}
@Test
void assertGenerateSQLTokenFromGenerateNewSQLToken() {
UpdateStatementContext updateStatementContext =
EncryptGeneratorFixtureBuilder.createUpdateStatementContext();
- generator.setDatabase(new ShardingSphereDatabase("foo_db", mock(),
mock(), mock(), Collections.emptyList()));
generator.setEncryptConditions(getEncryptConditions(updateStatementContext));
Collection<SQLToken> sqlTokens =
generator.generateSQLTokens(updateStatementContext);
assertThat(sqlTokens.size(), is(1));
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
index 5648193a7d5..cdfcea25991 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGeneratorTest.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
import
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
@@ -58,7 +59,10 @@ class EncryptProjectionTokenGeneratorTest {
@BeforeEach
void setup() {
- generator = new
EncryptProjectionTokenGenerator(Collections.emptyList(), mockEncryptRule(),
databaseType);
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
+
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
+
when(database.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
+ generator = new
EncryptProjectionTokenGenerator(Collections.emptyList(), databaseType,
mockEncryptRule());
}
private EncryptRule mockEncryptRule() {
diff --git
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/aware/DatabaseAware.java
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/aware/DatabaseAware.java
deleted file mode 100644
index 1d10afc64af..00000000000
---
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/generator/aware/DatabaseAware.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware;
-
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-
-/**
- * Database aware.
- */
-public interface DatabaseAware {
-
- /**
- * Set database.
- *
- * @param database database
- */
- void setDatabase(ShardingSphereDatabase database);
-}
diff --git
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstitutableColumnNameTokenTest.java
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstitutableColumnNameTokenTest.java
index 31df3869ece..4e7144c1cea 100644
---
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstitutableColumnNameTokenTest.java
+++
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/common/pojo/generic/SubstitutableColumnNameTokenTest.java
@@ -41,14 +41,20 @@ class SubstitutableColumnNameTokenTest {
@Test
void assertToString() {
Collection<Projection> projections = Collections.singletonList(new
ColumnProjection(null, "id", null, mock(DatabaseType.class)));
- assertThat(new SubstitutableColumnNameToken(0, 1, projections,
TypedSPILoader.getService(DatabaseType.class,
"MySQL")).toString(mock(RouteUnit.class)), is("id"));
+ assertThat(
+ new SubstitutableColumnNameToken(0, 1, projections,
TypedSPILoader.getService(DatabaseType.class, "MySQL"))
+ .toString(mock(RouteUnit.class)),
+ is("id"));
}
@Test
void assertToStringWithQuote() {
Collection<Projection> projections = Collections.singletonList(new
ColumnProjection(null,
new IdentifierValue("id", QuoteCharacter.BACK_QUOTE), new
IdentifierValue("id", QuoteCharacter.BACK_QUOTE), mock(DatabaseType.class)));
- assertThat(new SubstitutableColumnNameToken(0, 1, projections,
TypedSPILoader.getService(DatabaseType.class,
"MySQL")).toString(mock(RouteUnit.class)), is("`id` AS `id`"));
+ assertThat(
+ new SubstitutableColumnNameToken(0, 1, projections,
TypedSPILoader.getService(DatabaseType.class, "MySQL"))
+ .toString(mock(RouteUnit.class)),
+ is("`id` AS `id`"));
}
@Test