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 <[email protected]>
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));