This is an automated email from the ASF dual-hosted git repository. duanzhengqiang 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 c5926e22744 Refactor DatabaseNameAware to DatabaseAware (#33868) c5926e22744 is described below commit c5926e22744915bbe4383146c0a8416b600a8338 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Dec 1 21:09:08 2024 +0800 Refactor DatabaseNameAware to DatabaseAware (#33868) * Refactor DatabaseNameAware to DatabaseAware * Refactor DatabaseNameAware to DatabaseAware --- .../{DatabaseNameAware.java => DatabaseAware.java} | 12 +++++++----- .../context/EncryptSQLRewriteContextDecorator.java | 6 +++--- .../rewrite/token/EncryptTokenGenerateBuilder.java | 9 +++++---- .../EncryptInsertAssignmentTokenGenerator.java | 9 +++++---- .../EncryptUpdateAssignmentTokenGenerator.java | 9 +++++---- .../insert/EncryptInsertOnUpdateTokenGenerator.java | 15 ++++++++------- .../insert/EncryptInsertValuesTokenGenerator.java | 18 ++++++++++-------- ...EncryptInsertPredicateRightValueTokenGenerator.java | 9 +++++---- .../EncryptPredicateRightValueTokenGenerator.java | 15 ++++++++------- .../rewrite/token/EncryptTokenGenerateBuilderTest.java | 6 +++--- .../EncryptInsertOnUpdateTokenGeneratorTest.java | 2 ++ .../insert/EncryptInsertValuesTokenGeneratorTest.java | 15 ++++++++++++--- .../EncryptPredicateRightValueTokenGeneratorTest.java | 8 ++++++-- 13 files changed, 79 insertions(+), 54 deletions(-) diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseAware.java similarity index 78% rename from features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java rename to features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseAware.java index 4d17c55012a..3670849b209 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseAware.java @@ -17,15 +17,17 @@ package org.apache.shardingsphere.encrypt.rewrite.aware; +import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; + /** - * Database name aware. + * Database aware. */ -public interface DatabaseNameAware { +public interface DatabaseAware { /** - * Set database name. + * Set database. * - * @param databaseName database name + * @param database database */ - void setDatabaseName(String databaseName); + void setDatabase(ShardingSphereDatabase database); } 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 6d9a24a1e8d..c79fe379b8a 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 @@ -56,12 +56,12 @@ public final class EncryptSQLRewriteContextDecorator implements SQLRewriteContex return; } Collection<EncryptCondition> encryptConditions = createEncryptConditions(rule, sqlRewriteContext); - String databaseName = sqlRewriteContext.getDatabase().getName(); if (!sqlRewriteContext.getParameters().isEmpty()) { - Collection<ParameterRewriter> parameterRewriters = new ParameterRewritersBuilder(sqlStatementContext).build(new EncryptParameterRewritersRegistry(rule, databaseName, encryptConditions)); + Collection<ParameterRewriter> parameterRewriters = new ParameterRewritersBuilder(sqlStatementContext) + .build(new EncryptParameterRewritersRegistry(rule, sqlRewriteContext.getDatabase().getName(), encryptConditions)); rewriteParameters(sqlRewriteContext, parameterRewriters); } - SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new EncryptTokenGenerateBuilder(rule, sqlStatementContext, encryptConditions, databaseName); + SQLTokenGeneratorBuilder sqlTokenGeneratorBuilder = new EncryptTokenGenerateBuilder(rule, sqlStatementContext, encryptConditions, 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 b4d015c323e..b3b42278fd3 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 @@ -18,7 +18,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token; import lombok.RequiredArgsConstructor; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseAware; import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseTypeAware; import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware; import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition; @@ -41,6 +41,7 @@ import org.apache.shardingsphere.encrypt.rewrite.token.generator.select.EncryptG import org.apache.shardingsphere.encrypt.rewrite.token.generator.select.EncryptIndexColumnTokenGenerator; 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.builder.SQLTokenGeneratorBuilder; @@ -59,7 +60,7 @@ public final class EncryptTokenGenerateBuilder implements SQLTokenGeneratorBuild private final Collection<EncryptCondition> encryptConditions; - private final String databaseName; + private final ShardingSphereDatabase database; @Override public Collection<SQLTokenGenerator> getSQLTokenGenerators() { @@ -95,8 +96,8 @@ public final class EncryptTokenGenerateBuilder implements SQLTokenGeneratorBuild if (toBeAddedSQLTokenGenerator instanceof EncryptConditionsAware) { ((EncryptConditionsAware) toBeAddedSQLTokenGenerator).setEncryptConditions(encryptConditions); } - if (toBeAddedSQLTokenGenerator instanceof DatabaseNameAware) { - ((DatabaseNameAware) toBeAddedSQLTokenGenerator).setDatabaseName(databaseName); + if (toBeAddedSQLTokenGenerator instanceof DatabaseAware) { + ((DatabaseAware) toBeAddedSQLTokenGenerator).setDatabase(database); } if (toBeAddedSQLTokenGenerator instanceof DatabaseTypeAware) { ((DatabaseTypeAware) toBeAddedSQLTokenGenerator).setDatabaseType(sqlStatementContext.getDatabaseType()); 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 824c20c84ee..1526918bd93 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,12 +19,13 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment; import lombok.RequiredArgsConstructor; import lombok.Setter; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.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; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; +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.pojo.SQLToken; @@ -36,11 +37,11 @@ import java.util.Collection; @HighFrequencyInvocation @RequiredArgsConstructor @Setter -public final class EncryptInsertAssignmentTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseNameAware { +public final class EncryptInsertAssignmentTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseAware { private final EncryptRule rule; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -51,7 +52,7 @@ public final class EncryptInsertAssignmentTokenGenerator implements CollectionSQ @SuppressWarnings("OptionalGetWithoutIsPresent") @Override public Collection<SQLToken> generateSQLTokens(final InsertStatementContext sqlStatementContext) { - return new EncryptAssignmentTokenGenerator(rule, databaseName, sqlStatementContext.getDatabaseType()).generateSQLTokens( + return new EncryptAssignmentTokenGenerator(rule, database.getName(), sqlStatementContext.getDatabaseType()).generateSQLTokens( sqlStatementContext.getTablesContext(), sqlStatementContext.getSqlStatement().getSetAssignment().get()); } } 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 1c1333c9d1c..4dc4d5c226c 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,12 +19,13 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment; import lombok.RequiredArgsConstructor; import lombok.Setter; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.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; import org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext; import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; +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.pojo.SQLToken; @@ -36,11 +37,11 @@ import java.util.Collection; @HighFrequencyInvocation @RequiredArgsConstructor @Setter -public final class EncryptUpdateAssignmentTokenGenerator implements CollectionSQLTokenGenerator<UpdateStatementContext>, DatabaseNameAware { +public final class EncryptUpdateAssignmentTokenGenerator implements CollectionSQLTokenGenerator<UpdateStatementContext>, DatabaseAware { private final EncryptRule rule; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -50,7 +51,7 @@ public final class EncryptUpdateAssignmentTokenGenerator implements CollectionSQ @Override public Collection<SQLToken> generateSQLTokens(final UpdateStatementContext sqlStatementContext) { - return new EncryptAssignmentTokenGenerator(rule, databaseName, sqlStatementContext.getDatabaseType()) + return new EncryptAssignmentTokenGenerator(rule, database.getName(), sqlStatementContext.getDatabaseType()) .generateSQLTokens(sqlStatementContext.getTablesContext(), sqlStatementContext.getSqlStatement().getSetAssignment()); } } 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 6c33f06c0aa..664e2925518 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,7 @@ import com.google.common.base.Preconditions; import lombok.RequiredArgsConstructor; import lombok.Setter; import org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.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; @@ -35,6 +35,7 @@ import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; 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.pojo.SQLToken; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment; @@ -56,11 +57,11 @@ import java.util.Optional; @HighFrequencyInvocation @RequiredArgsConstructor @Setter -public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseNameAware { +public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, DatabaseAware { private final EncryptRule rule; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -76,7 +77,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT return Collections.emptyList(); } String schemaName = insertStatementContext.getTablesContext().getSchemaName() - .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); + .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())); String tableName = insertStatement.getTable().map(optional -> optional.getTableName().getIdentifier().getValue()).orElse(""); EncryptTable encryptTable = rule.getEncryptTable(tableName); Collection<SQLToken> result = new LinkedList<>(); @@ -173,7 +174,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT private void addCipherAssignment(final String schemaName, final String tableName, final EncryptColumn encryptColumn, final ColumnAssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); - Object cipherValue = encryptColumn.getCipher().encrypt(databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), + Object cipherValue = encryptColumn.getCipher().encrypt(database.getName(), schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); token.addAssignment(encryptColumn.getCipher().getName(), cipherValue); } @@ -183,7 +184,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT encryptColumn.getAssistedQuery().ifPresent(optional -> { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); Object assistedQueryValue = optional.encrypt( - databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); + database.getName(), schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); token.addAssignment(optional.getName(), assistedQueryValue); }); } @@ -193,7 +194,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT encryptColumn.getLikeQuery().ifPresent(optional -> { Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals(); Object likeValue = optional.encrypt( - databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); + database.getName(), schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next(); token.addAssignment(optional.getName(), likeValue); }); } 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 c6a64eb842e..138dba2ced8 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,7 @@ 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.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.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; @@ -33,6 +33,7 @@ import org.apache.shardingsphere.infra.binder.context.segment.insert.values.expr import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; 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.OptionalSQLTokenGenerator; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.aware.PreviousSQLTokensAware; import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken; @@ -57,13 +58,13 @@ import java.util.Optional; */ @RequiredArgsConstructor @Setter -public final class EncryptInsertValuesTokenGenerator implements OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware, DatabaseNameAware { +public final class EncryptInsertValuesTokenGenerator implements OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware, DatabaseAware { private final EncryptRule rule; private List<SQLToken> previousSQLTokens; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -94,7 +95,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken EncryptTable encryptTable = rule.getEncryptTable(tableName); int count = 0; String schemaName = insertStatementContext.getTablesContext().getSchemaName() - .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); + .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())); for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) { encryptToken(insertValuesToken.getInsertValues().get(count), schemaName, encryptTable, insertStatementContext, each); count++; @@ -107,7 +108,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken InsertValuesToken result = new EncryptInsertValuesToken(getStartIndex(insertValuesSegments), getStopIndex(insertValuesSegments)); EncryptTable encryptTable = rule.getEncryptTable(tableName); String schemaName = insertStatementContext.getTablesContext().getSchemaName() - .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); + .orElseGet(() -> new DatabaseTypeRegistry(insertStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())); for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) { InsertValue insertValueToken = new InsertValue(new LinkedList<>(each.getValueExpressions())); encryptToken(insertValueToken, schemaName, encryptTable, insertStatementContext, each); @@ -163,7 +164,8 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken final InsertValue insertValueToken, final ExpressionSegment valueExpression, final int columnIndex, final Object originalValue) { if (valueExpression instanceof LiteralExpressionSegment) { insertValueToken.getValues().set(columnIndex, new LiteralExpressionSegment( - valueExpression.getStartIndex(), valueExpression.getStopIndex(), encryptColumn.getCipher().encrypt(databaseName, schemaName, tableName, encryptColumn.getName(), originalValue))); + valueExpression.getStartIndex(), valueExpression.getStopIndex(), + encryptColumn.getCipher().encrypt(database.getName(), schemaName, tableName, encryptColumn.getName(), originalValue))); } } @@ -171,7 +173,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken final ExpressionSegment valueExpression, final int columnIndex, final int indexDelta, final Object originalValue) { Optional<AssistedQueryColumnItem> assistedQueryColumnItem = encryptColumn.getAssistedQuery(); Preconditions.checkState(assistedQueryColumnItem.isPresent()); - Object derivedValue = assistedQueryColumnItem.get().encrypt(databaseName, schemaName, tableName, encryptColumn.getName(), originalValue); + Object derivedValue = assistedQueryColumnItem.get().encrypt(database.getName(), schemaName, tableName, encryptColumn.getName(), originalValue); addDerivedColumn(insertValueToken, valueExpression, columnIndex, indexDelta, derivedValue, assistedQueryColumnItem.get().getName()); } @@ -179,7 +181,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken final ExpressionSegment valueExpression, final int columnIndex, final int indexDelta, final Object originalValue) { Optional<LikeQueryColumnItem> likeQueryColumnItem = encryptColumn.getLikeQuery(); Preconditions.checkState(likeQueryColumnItem.isPresent()); - Object derivedValue = likeQueryColumnItem.get().encrypt(databaseName, schemaName, tableName, encryptColumn.getName(), originalValue); + Object derivedValue = likeQueryColumnItem.get().encrypt(database.getName(), schemaName, tableName, encryptColumn.getName(), originalValue); addDerivedColumn(insertValueToken, valueExpression, columnIndex, indexDelta, derivedValue, likeQueryColumnItem.get().getName()); } diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateRightValueTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateRightValueTokenGenerator.java index cb4fa9e1c12..d5d933ca01d 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateRightValueTokenGenerator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateRightValueTokenGenerator.java @@ -19,13 +19,14 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator.predicate; import lombok.RequiredArgsConstructor; import lombok.Setter; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseAware; import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware; import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition; import org.apache.shardingsphere.encrypt.rule.EncryptRule; import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation; import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext; 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.ParametersAware; import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken; @@ -39,7 +40,7 @@ import java.util.List; @HighFrequencyInvocation @RequiredArgsConstructor @Setter -public final class EncryptInsertPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware, EncryptConditionsAware, DatabaseNameAware { +public final class EncryptInsertPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware, EncryptConditionsAware, DatabaseAware { private final EncryptRule rule; @@ -47,7 +48,7 @@ public final class EncryptInsertPredicateRightValueTokenGenerator implements Col private Collection<EncryptCondition> encryptConditions; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -60,7 +61,7 @@ public final class EncryptInsertPredicateRightValueTokenGenerator implements Col EncryptPredicateRightValueTokenGenerator generator = new EncryptPredicateRightValueTokenGenerator(rule); generator.setParameters(parameters); generator.setEncryptConditions(encryptConditions); - generator.setDatabaseName(databaseName); + 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/EncryptPredicateRightValueTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGenerator.java index 9d83fa7d758..efe01a79457 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGenerator.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGenerator.java @@ -20,7 +20,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator.predicate; import lombok.RequiredArgsConstructor; import lombok.Setter; import org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException; -import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware; +import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseAware; import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware; import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition; import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptConditionValues; @@ -38,6 +38,7 @@ import org.apache.shardingsphere.infra.binder.context.statement.SQLStatementCont import org.apache.shardingsphere.infra.binder.context.type.TableAvailable; 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.ParametersAware; import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken; @@ -55,7 +56,7 @@ import java.util.Map; @HighFrequencyInvocation @RequiredArgsConstructor @Setter -public final class EncryptPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware, EncryptConditionsAware, DatabaseNameAware { +public final class EncryptPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator<SQLStatementContext>, ParametersAware, EncryptConditionsAware, DatabaseAware { private final EncryptRule rule; @@ -63,7 +64,7 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio private Collection<EncryptCondition> encryptConditions; - private String databaseName; + private ShardingSphereDatabase database; @Override public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) { @@ -74,7 +75,7 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio public Collection<SQLToken> generateSQLTokens(final SQLStatementContext sqlStatementContext) { Collection<SQLToken> result = new LinkedHashSet<>(encryptConditions.size(), 1F); String schemaName = ((TableAvailable) sqlStatementContext).getTablesContext().getSchemaName() - .orElseGet(() -> new DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName)); + .orElseGet(() -> new DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName())); for (EncryptCondition each : encryptConditions) { rule.findEncryptTable(each.getTableName()).ifPresent(optional -> result.add(generateSQLToken(schemaName, optional, each))); } @@ -101,11 +102,11 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio if (encryptCondition instanceof EncryptBinaryCondition && "LIKE".equalsIgnoreCase(((EncryptBinaryCondition) encryptCondition).getOperator())) { LikeQueryColumnItem likeQueryColumnItem = encryptColumn.getLikeQuery() .orElseThrow(() -> new MissingMatchedEncryptQueryAlgorithmException(encryptTable.getTable(), encryptCondition.getColumnName(), "LIKE")); - return likeQueryColumnItem.encrypt(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues); + return likeQueryColumnItem.encrypt(database.getName(), schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues); } return encryptColumn.getAssistedQuery() - .map(optional -> optional.encrypt(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)) - .orElseGet(() -> encryptColumn.getCipher().encrypt(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)); + .map(optional -> optional.encrypt(database.getName(), schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)) + .orElseGet(() -> encryptColumn.getCipher().encrypt(database.getName(), schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)); } private Map<Integer, Object> getPositionValues(final Collection<Integer> valuePositions, final List<Object> encryptValues) { 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 749be212eb3..f5087709ffc 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 @@ -21,7 +21,7 @@ import org.apache.shardingsphere.encrypt.rewrite.token.generator.projection.Encr import org.apache.shardingsphere.encrypt.rule.EncryptRule; import org.apache.shardingsphere.infra.binder.context.segment.select.orderby.OrderByItem; import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext; -import org.apache.shardingsphere.infra.database.core.DefaultDatabase; +import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.SQLTokenGenerator; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -44,7 +44,7 @@ import static org.mockito.Mockito.when; class EncryptTokenGenerateBuilderTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) - private EncryptRule encryptRule; + private EncryptRule rule; @Test void assertGetSQLTokenGenerators() { @@ -54,7 +54,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(encryptRule, selectStatementContext, Collections.emptyList(), DefaultDatabase.LOGIC_NAME); + EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new EncryptTokenGenerateBuilder(rule, selectStatementContext, Collections.emptyList(), mock(ShardingSphereDatabase.class)); Collection<SQLTokenGenerator> sqlTokenGenerators = encryptTokenGenerateBuilder.getSQLTokenGenerators(); assertThat(sqlTokenGenerators.size(), is(1)); Iterator<SQLTokenGenerator> iterator = sqlTokenGenerators.iterator(); 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 3d32fe987d1..a84e756620d 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 @@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn; import org.apache.shardingsphere.encrypt.rule.table.EncryptTable; import org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext; import org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext; +import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment; import org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment; @@ -59,6 +60,7 @@ class EncryptInsertOnUpdateTokenGeneratorTest { @BeforeEach void setup() { generator = new EncryptInsertOnUpdateTokenGenerator(mockEncryptRule()); + generator.setDatabase(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 c9e92255309..a1437d6caca 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 @@ -18,6 +18,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator.insert; import org.apache.shardingsphere.encrypt.rewrite.token.generator.fixture.EncryptGeneratorFixtureBuilder; +import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -27,6 +28,8 @@ import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; class EncryptInsertValuesTokenGeneratorTest { @@ -45,15 +48,21 @@ class EncryptInsertValuesTokenGeneratorTest { @Test void assertGenerateSQLTokenFromGenerateNewSQLToken() { generator.setPreviousSQLTokens(Collections.emptyList()); - generator.setDatabaseName("db_schema"); + ShardingSphereDatabase database = mock(ShardingSphereDatabase.class); + when(database.getName()).thenReturn("db_schema"); + generator.setDatabase(database); assertThat(generator.generateSQLToken(EncryptGeneratorFixtureBuilder.createInsertStatementContext(Arrays.asList(1, "Tom", 0, "123456"))).toString(), is("(?, ?, ?, ?, ?, ?)")); } @Test void assertGenerateSQLTokenFromPreviousSQLTokens() { - generator.setDatabaseName("db-001"); + ShardingSphereDatabase database = mock(ShardingSphereDatabase.class); + when(database.getName()).thenReturn("db-001"); + generator.setDatabase(database); generator.setPreviousSQLTokens(EncryptGeneratorFixtureBuilder.getPreviousSQLTokens()); - generator.setDatabaseName("db_schema"); + database = mock(ShardingSphereDatabase.class); + when(database.getName()).thenReturn("db_schema"); + generator.setDatabase(database); 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/EncryptPredicateRightValueTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java index 00043ff32fa..9c076acf788 100644 --- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java +++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateRightValueTokenGeneratorTest.java @@ -47,14 +47,18 @@ class EncryptPredicateRightValueTokenGeneratorTest { @Test void assertIsGenerateSQLToken() { - generator.setDatabaseName(DefaultDatabase.LOGIC_NAME); + ShardingSphereDatabase database = mock(ShardingSphereDatabase.class); + when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME); + generator.setDatabase(database); assertTrue(generator.isGenerateSQLToken(EncryptGeneratorFixtureBuilder.createUpdateStatementContext())); } @Test void assertGenerateSQLTokenFromGenerateNewSQLToken() { UpdateStatementContext updateStatementContext = EncryptGeneratorFixtureBuilder.createUpdateStatementContext(); - generator.setDatabaseName(DefaultDatabase.LOGIC_NAME); + ShardingSphereDatabase database = mock(ShardingSphereDatabase.class); + when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME); + generator.setDatabase(database); generator.setEncryptConditions(getEncryptConditions(updateStatementContext)); Collection<SQLToken> sqlTokens = generator.generateSQLTokens(updateStatementContext); assertThat(sqlTokens.size(), is(1));