You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/04/29 03:31:47 UTC
[shardingsphere] branch master updated: Add schemaName parameter to EncryptContext and adjust usage logic (#17193)
This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 3d08a8d176d Add schemaName parameter to EncryptContext and adjust usage logic (#17193)
3d08a8d176d is described below
commit 3d08a8d176d494239c575b84535d30408cc6b456
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Fri Apr 29 11:31:40 2022 +0800
Add schemaName parameter to EncryptContext and adjust usage logic (#17193)
* Add schemaName parameter to EncryptContext and adjust usage logic
* fix unit test
---
.../encrypt/spi/context/EncryptContext.java | 2 ++
.../encrypt/context/EncryptContextBuilder.java | 7 ++++---
.../encrypt/merge/dql/EncryptAlgorithmMetaData.java | 2 +-
.../{SchemaNameAware.java => DatabaseNameAware.java} | 10 +++++-----
.../parameter/EncryptParameterRewriterBuilder.java | 8 ++++----
.../rewriter/EncryptAssignmentParameterRewriter.java | 17 +++++++++--------
...ertOnDuplicateKeyUpdateValueParameterRewriter.java | 9 +++++----
.../rewriter/EncryptInsertValueParameterRewriter.java | 9 +++++----
.../rewriter/EncryptPredicateParameterRewriter.java | 11 ++++++-----
.../rewrite/token/EncryptTokenGenerateBuilder.java | 8 ++++----
.../generator/EncryptAssignmentTokenGenerator.java | 11 ++++++-----
.../EncryptInsertOnUpdateTokenGenerator.java | 19 ++++++++++---------
.../generator/EncryptInsertValuesTokenGenerator.java | 17 ++++++++++-------
.../EncryptPredicateRightValueTokenGenerator.java | 15 ++++++++-------
.../shardingsphere/encrypt/rule/EncryptRule.java | 10 ++++++----
.../encrypt/context/EncryptContextBuilderTest.java | 4 ++--
.../encrypt/merge/dql/EncryptMergedResultTest.java | 8 ++++----
.../shardingsphere/encrypt/rule/EncryptRuleTest.java | 8 ++++----
.../spring/boot/SpringBootStarterTest.java | 4 ++--
19 files changed, 97 insertions(+), 82 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
index 18498b212c6..c6e32ae736d 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-api/src/main/java/org/apache/shardingsphere/encrypt/spi/context/EncryptContext.java
@@ -33,6 +33,8 @@ public final class EncryptContext {
private final String databaseName;
+ private final String schemaName;
+
private final String tableName;
private final String columnName;
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilder.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilder.java
index 8e271f63b2d..d3f11ac7f77 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilder.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilder.java
@@ -32,14 +32,15 @@ public final class EncryptContextBuilder {
/**
* Build encrypt context.
*
- * @param databaseName schema name
+ * @param databaseName database name
+ * @param schemaName schema name
* @param tableName table name
* @param columnName column name
* @param encryptRule encrypt rule
* @return encrypt context
*/
- public static EncryptContext build(final String databaseName, final String tableName, final String columnName, final EncryptRule encryptRule) {
- EncryptContext result = new EncryptContext(databaseName, tableName, columnName);
+ public static EncryptContext build(final String databaseName, final String schemaName, final String tableName, final String columnName, final EncryptRule encryptRule) {
+ EncryptContext result = new EncryptContext(databaseName, schemaName, tableName, columnName);
encryptRule.findEncryptTable(tableName).flatMap(optional -> optional.findEncryptColumn(columnName)).ifPresent(optional -> setEncryptDataType(result, optional));
return result;
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
index 783e527a275..95b38af3f7a 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptAlgorithmMetaData.java
@@ -83,7 +83,7 @@ public final class EncryptAlgorithmMetaData {
String schemaName = tablesContext.getSchemaName().orElse(selectStatementContext.getDatabaseType().getDefaultSchema(metaData.getDatabaseName()));
Map<String, String> expressionTableNames = tablesContext.findTableNamesByColumnProjection(Collections.singletonList(columnProjection.get()), metaData.getSchemaByName(schemaName));
Optional<String> tableName = findTableName(columnProjection.get(), expressionTableNames);
- return tableName.map(optional -> EncryptContextBuilder.build(databaseName, optional, columnProjection.get().getName(), encryptRule));
+ return tableName.map(optional -> EncryptContextBuilder.build(databaseName, schemaName, optional, columnProjection.get().getName(), encryptRule));
}
private Optional<ColumnProjection> findColumnProjection(final int columnIndex) {
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/SchemaNameAware.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java
similarity index 83%
rename from shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/SchemaNameAware.java
rename to shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java
index fa9a4f5d0cd..db6ee3319d6 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/SchemaNameAware.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/aware/DatabaseNameAware.java
@@ -18,14 +18,14 @@
package org.apache.shardingsphere.encrypt.rewrite.aware;
/**
- * Schema name aware.
+ * Database name aware.
*/
-public interface SchemaNameAware {
+public interface DatabaseNameAware {
/**
- * Set schema name.
+ * Set database name.
*
- * @param schemaName schema name
+ * @param databaseName database name
*/
- void setSchemaName(String schemaName);
+ void setDatabaseName(String databaseName);
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
index 51666689bf0..99babd67143 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/EncryptParameterRewriterBuilder.java
@@ -18,8 +18,8 @@
package org.apache.shardingsphere.encrypt.rewrite.parameter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptAssignmentParameterRewriter;
import org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter.EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter;
@@ -45,7 +45,7 @@ public final class EncryptParameterRewriterBuilder implements ParameterRewriterB
private final EncryptRule encryptRule;
- private final String schemaName;
+ private final String databaseName;
private final Map<String, ShardingSphereSchema> schemas;
@@ -82,8 +82,8 @@ public final class EncryptParameterRewriterBuilder implements ParameterRewriterB
if (toBeAddedParameterRewriter instanceof EncryptConditionsAware) {
((EncryptConditionsAware) toBeAddedParameterRewriter).setEncryptConditions(encryptConditions);
}
- if (toBeAddedParameterRewriter instanceof SchemaNameAware) {
- ((SchemaNameAware) toBeAddedParameterRewriter).setSchemaName(schemaName);
+ if (toBeAddedParameterRewriter instanceof DatabaseNameAware) {
+ ((DatabaseNameAware) toBeAddedParameterRewriter).setDatabaseName(databaseName);
}
}
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
index 4614e0aa466..02c83141d9d 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -48,11 +48,11 @@ import java.util.Optional;
* Assignment parameter rewriter for encrypt.
*/
@Setter
-public final class EncryptAssignmentParameterRewriter implements ParameterRewriter<SQLStatementContext<?>>, EncryptRuleAware, SchemaNameAware {
+public final class EncryptAssignmentParameterRewriter implements ParameterRewriter<SQLStatementContext<?>>, EncryptRuleAware, DatabaseNameAware {
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isNeedRewrite(final SQLStatementContext<?> sqlStatementContext) {
@@ -68,12 +68,13 @@ public final class EncryptAssignmentParameterRewriter implements ParameterRewrit
@Override
public void rewrite(final ParameterBuilder parameterBuilder, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters) {
String tableName = ((TableAvailable) sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> sqlStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (AssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) {
if (each.getValue() instanceof ParameterMarkerExpressionSegment && encryptRule.findEncryptor(tableName, each.getColumns().get(0).getIdentifier().getValue()).isPresent()) {
StandardParameterBuilder standardParameterBuilder = parameterBuilder instanceof StandardParameterBuilder
? (StandardParameterBuilder) parameterBuilder
: ((GroupedParameterBuilder) parameterBuilder).getParameterBuilders().get(0);
- encryptParameters(standardParameterBuilder, tableName, each, parameters);
+ encryptParameters(standardParameterBuilder, schemaName, tableName, each, parameters);
}
}
}
@@ -87,16 +88,16 @@ public final class EncryptAssignmentParameterRewriter implements ParameterRewrit
return ((UpdateStatement) sqlStatement).getSetAssignment();
}
- private void encryptParameters(final StandardParameterBuilder parameterBuilder, final String tableName, final AssignmentSegment assignmentSegment,
- final List<Object> parameters) {
+ private void encryptParameters(final StandardParameterBuilder parameterBuilder, final String schemaName,
+ final String tableName, final AssignmentSegment assignmentSegment, final List<Object> parameters) {
String columnName = assignmentSegment.getColumns().get(0).getIdentifier().getValue();
int parameterMarkerIndex = ((ParameterMarkerExpressionSegment) assignmentSegment.getValue()).getParameterMarkerIndex();
Object originalValue = parameters.get(parameterMarkerIndex);
- Object cipherValue = encryptRule.getEncryptValues(schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
+ Object cipherValue = encryptRule.getEncryptValues(databaseName, schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
parameterBuilder.addReplacedParameters(parameterMarkerIndex, cipherValue);
Collection<Object> addedParameters = new LinkedList<>();
if (encryptRule.findAssistedQueryColumn(tableName, columnName).isPresent()) {
- Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
+ Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
addedParameters.add(assistedQueryValue);
}
if (encryptRule.findPlainColumn(tableName, columnName).isPresent()) {
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
index 8a1834205c7..700e78e0165 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import com.google.common.base.Preconditions;
import lombok.Setter;
import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
@@ -44,11 +44,11 @@ import java.util.Optional;
* Insert on duplicate key update parameter rewriter for encrypt.
*/
@Setter
-public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter implements ParameterRewriter<InsertStatementContext>, EncryptRuleAware, SchemaNameAware {
+public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter implements ParameterRewriter<InsertStatementContext>, EncryptRuleAware, DatabaseNameAware {
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isNeedRewrite(final SQLStatementContext<?> sqlStatementContext) {
@@ -62,10 +62,11 @@ public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter imple
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
GroupedParameterBuilder groupedParameterBuilder = (GroupedParameterBuilder) parameterBuilder;
OnDuplicateUpdateContext onDuplicateKeyUpdateValueContext = insertStatementContext.getOnDuplicateKeyUpdateValueContext();
+ String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> insertStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (int index = 0; index < onDuplicateKeyUpdateValueContext.getValueExpressions().size(); index++) {
int columnIndex = index;
String encryptLogicColumnName = onDuplicateKeyUpdateValueContext.getColumn(columnIndex).getIdentifier().getValue();
- EncryptContext encryptContext = EncryptContextBuilder.build(schemaName, tableName, encryptLogicColumnName, encryptRule);
+ EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, tableName, encryptLogicColumnName, encryptRule);
Optional<EncryptAlgorithm> encryptor = encryptRule.findEncryptor(tableName, encryptLogicColumnName);
encryptor.ifPresent(optional -> {
Object plainColumnValue = onDuplicateKeyUpdateValueContext.getValue(columnIndex);
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
index 13a805c9dff..202e049e3c7 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import com.google.common.base.Preconditions;
import lombok.Setter;
import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
@@ -48,11 +48,11 @@ import java.util.Optional;
* Insert value parameter rewriter for encrypt.
*/
@Setter
-public final class EncryptInsertValueParameterRewriter implements ParameterRewriter<InsertStatementContext>, EncryptRuleAware, SchemaNameAware {
+public final class EncryptInsertValueParameterRewriter implements ParameterRewriter<InsertStatementContext>, EncryptRuleAware, DatabaseNameAware {
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isNeedRewrite(final SQLStatementContext<?> sqlStatementContext) {
@@ -64,9 +64,10 @@ public final class EncryptInsertValueParameterRewriter implements ParameterRewri
public void rewrite(final ParameterBuilder parameterBuilder, final InsertStatementContext insertStatementContext, final List<Object> parameters) {
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
Iterator<String> descendingColumnNames = insertStatementContext.getDescendingColumnNames();
+ String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> insertStatementContext.getDatabaseType().getDefaultSchema(databaseName));
while (descendingColumnNames.hasNext()) {
String columnName = descendingColumnNames.next();
- EncryptContext encryptContext = EncryptContextBuilder.build(schemaName, tableName, columnName, encryptRule);
+ EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, tableName, columnName, encryptRule);
encryptRule.findEncryptor(tableName, columnName)
.ifPresent(encryptAlgorithm -> encryptInsertValues((GroupedParameterBuilder) parameterBuilder, insertStatementContext, encryptAlgorithm, encryptContext));
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
index 0392f685ac1..d4bfc5595e4 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import lombok.Setter;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
@@ -38,13 +38,13 @@ import java.util.Map.Entry;
* Predicate parameter rewriter for encrypt.
*/
@Setter
-public final class EncryptPredicateParameterRewriter implements ParameterRewriter<SQLStatementContext<?>>, EncryptRuleAware, EncryptConditionsAware, SchemaNameAware {
+public final class EncryptPredicateParameterRewriter implements ParameterRewriter<SQLStatementContext<?>>, EncryptRuleAware, EncryptConditionsAware, DatabaseNameAware {
private EncryptRule encryptRule;
private Collection<EncryptCondition> encryptConditions;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isNeedRewrite(final SQLStatementContext<?> sqlStatementContext) {
@@ -53,6 +53,7 @@ public final class EncryptPredicateParameterRewriter implements ParameterRewrite
@Override
public void rewrite(final ParameterBuilder parameterBuilder, final SQLStatementContext<?> sqlStatementContext, final List<Object> parameters) {
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> sqlStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (EncryptCondition each : encryptConditions) {
boolean queryWithCipherColumn = encryptRule.isQueryWithCipherColumn(each.getTableName());
if (queryWithCipherColumn) {
@@ -65,8 +66,8 @@ public final class EncryptPredicateParameterRewriter implements ParameterRewrite
String tableName = encryptCondition.getTableName();
String columnName = encryptCondition.getColumnName();
return encryptRule.findAssistedQueryColumn(tableName, columnName).isPresent()
- ? encryptRule.getEncryptAssistedQueryValues(schemaName, tableName, columnName, originalValues)
- : encryptRule.getEncryptValues(schemaName, tableName, columnName, originalValues);
+ ? encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, tableName, columnName, originalValues)
+ : encryptRule.getEncryptValues(databaseName, schemaName, tableName, columnName, originalValues);
}
private void encryptParameters(final ParameterBuilder parameterBuilder, final Map<Integer, Integer> positionIndexes, final List<Object> encryptValues) {
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
index 9216100e39b..3cc64519175 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilder.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import org.apache.shardingsphere.encrypt.rewrite.token.generator.AssistQueryAndPlainInsertColumnsTokenGenerator;
import org.apache.shardingsphere.encrypt.rewrite.token.generator.EncryptAlterTableTokenGenerator;
@@ -54,7 +54,7 @@ public final class EncryptTokenGenerateBuilder implements SQLTokenGeneratorBuild
private final Collection<EncryptCondition> encryptConditions;
- private final String schemaName;
+ private final String databaseName;
@Override
public Collection<SQLTokenGenerator> getSQLTokenGenerators() {
@@ -88,8 +88,8 @@ public final class EncryptTokenGenerateBuilder implements SQLTokenGeneratorBuild
if (toBeAddedSQLTokenGenerator instanceof EncryptConditionsAware) {
((EncryptConditionsAware) toBeAddedSQLTokenGenerator).setEncryptConditions(encryptConditions);
}
- if (toBeAddedSQLTokenGenerator instanceof SchemaNameAware) {
- ((SchemaNameAware) toBeAddedSQLTokenGenerator).setSchemaName(schemaName);
+ if (toBeAddedSQLTokenGenerator instanceof DatabaseNameAware) {
+ ((DatabaseNameAware) toBeAddedSQLTokenGenerator).setDatabaseName(databaseName);
}
}
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
index f801336bf8f..b5d284a66f1 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptAssignmentToken;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptLiteralAssignmentToken;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptParameterAssignmentToken;
@@ -48,11 +48,11 @@ import java.util.Optional;
* Assignment generator for encrypt.
*/
@Setter
-public final class EncryptAssignmentTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware, SchemaNameAware {
+public final class EncryptAssignmentTokenGenerator implements CollectionSQLTokenGenerator, EncryptRuleAware, DatabaseNameAware {
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) {
@@ -64,6 +64,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken
public Collection<EncryptAssignmentToken> generateSQLTokens(final SQLStatementContext sqlStatementContext) {
Collection<EncryptAssignmentToken> result = new LinkedList<>();
String tableName = ((TableAvailable) sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> sqlStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (AssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) {
if (encryptRule.findEncryptor(tableName, each.getColumns().get(0).getIdentifier().getValue()).isPresent()) {
generateSQLToken(schemaName, tableName, each).ifPresent(result::add);
@@ -122,7 +123,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken
private void addCipherAssignment(final String schemaName, final String tableName, final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) {
Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals();
- Object cipherValue = encryptRule.getEncryptValues(schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(),
+ Object cipherValue = encryptRule.getEncryptValues(databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(),
Collections.singletonList(originalValue)).iterator().next();
token.addAssignment(encryptRule.getCipherColumn(tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue()), cipherValue);
}
@@ -131,7 +132,7 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken
Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals();
Optional<String> assistedQueryColumn = encryptRule.findAssistedQueryColumn(tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue());
if (assistedQueryColumn.isPresent()) {
- Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(schemaName,
+ Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName,
tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue)).iterator().next();
token.addAssignment(assistedQueryColumn.get(), assistedQueryValue);
}
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
index 281502e649c..21330074b65 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
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;
@@ -48,11 +48,11 @@ import java.util.Optional;
* Insert on update values token generator for encrypt.
*/
@Setter
-public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, EncryptRuleAware, SchemaNameAware {
+public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLTokenGenerator<InsertStatementContext>, EncryptRuleAware, DatabaseNameAware {
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) {
@@ -71,6 +71,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
if (onDuplicateKeyColumnsSegments.isEmpty()) {
return result;
}
+ String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> insertStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (AssignmentSegment each : onDuplicateKeyColumnsSegments) {
boolean leftEncryptorPresent = encryptRule.findEncryptor(tableName, each.getColumns().get(0).getIdentifier().getValue()).isPresent();
if (each.getValue() instanceof FunctionSegment && "VALUES".equalsIgnoreCase(((FunctionSegment) each.getValue()).getFunctionName())) {
@@ -83,12 +84,12 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
if (!leftEncryptorPresent) {
continue;
}
- generateSQLToken(tableName, each).ifPresent(result::add);
+ generateSQLToken(schemaName, tableName, each).ifPresent(result::add);
}
return result;
}
- private Optional<EncryptAssignmentToken> generateSQLToken(final String tableName, final AssignmentSegment assignmentSegment) {
+ private Optional<EncryptAssignmentToken> generateSQLToken(final String schemaName, final String tableName, final AssignmentSegment assignmentSegment) {
if (assignmentSegment.getValue() instanceof ParameterMarkerExpressionSegment) {
return Optional.of(generateParameterSQLToken(tableName, assignmentSegment));
}
@@ -96,7 +97,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
return Optional.of(generateValuesSQLToken(tableName, assignmentSegment, (FunctionSegment) assignmentSegment.getValue()));
}
if (assignmentSegment.getValue() instanceof LiteralExpressionSegment) {
- return Optional.of(generateLiteralSQLToken(tableName, assignmentSegment));
+ return Optional.of(generateLiteralSQLToken(schemaName, tableName, assignmentSegment));
}
return Optional.empty();
}
@@ -110,7 +111,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
return result;
}
- private EncryptAssignmentToken generateLiteralSQLToken(final String tableName, final AssignmentSegment assignmentSegment) {
+ private EncryptAssignmentToken generateLiteralSQLToken(final String schemaName, final String tableName, final AssignmentSegment assignmentSegment) {
EncryptLiteralAssignmentToken result = new EncryptLiteralAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(), assignmentSegment.getStopIndex());
addCipherAssignment(schemaName, tableName, assignmentSegment, result);
addAssistedQueryAssignment(schemaName, tableName, assignmentSegment, result);
@@ -167,7 +168,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
private void addCipherAssignment(final String schemaName, final String tableName, final AssignmentSegment assignmentSegment, final EncryptLiteralAssignmentToken token) {
Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals();
- Object cipherValue = encryptRule.getEncryptValues(schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(),
+ Object cipherValue = encryptRule.getEncryptValues(databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(),
Collections.singletonList(originalValue)).iterator().next();
token.addAssignment(encryptRule.getCipherColumn(tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue()), cipherValue);
}
@@ -176,7 +177,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
encryptRule.findAssistedQueryColumn(tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue()).ifPresent(assistedQueryColumn -> {
Object originalValue = ((LiteralExpressionSegment) assignmentSegment.getValue()).getLiterals();
Object assistedQueryValue = encryptRule
- .getEncryptAssistedQueryValues(schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue))
+ .getEncryptAssistedQueryValues(databaseName, schemaName, tableName, assignmentSegment.getColumns().get(0).getIdentifier().getValue(), Collections.singletonList(originalValue))
.iterator().next();
token.addAssignment(assistedQueryColumn, assistedQueryValue);
});
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
index 48e78fb4004..43f64055fb7 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import lombok.Setter;
import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptInsertValuesToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.aware.EncryptRuleAware;
@@ -53,13 +53,13 @@ import java.util.Optional;
* Insert values token generator for encrypt.
*/
@Setter
-public final class EncryptInsertValuesTokenGenerator implements OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware, EncryptRuleAware, SchemaNameAware {
+public final class EncryptInsertValuesTokenGenerator implements OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware, EncryptRuleAware, DatabaseNameAware {
private List<SQLToken> previousSQLTokens;
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) {
@@ -88,8 +88,9 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
private void processPreviousSQLToken(final InsertStatementContext insertStatementContext, final InsertValuesToken insertValuesToken) {
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
int count = 0;
+ String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> insertStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
- encryptToken(insertValuesToken.getInsertValues().get(count), tableName, insertStatementContext, each);
+ encryptToken(insertValuesToken.getInsertValues().get(count), schemaName, tableName, insertStatementContext, each);
count++;
}
}
@@ -98,9 +99,10 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
Collection<InsertValuesSegment> insertValuesSegments = insertStatementContext.getSqlStatement().getValues();
InsertValuesToken result = new EncryptInsertValuesToken(getStartIndex(insertValuesSegments), getStopIndex(insertValuesSegments));
+ String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> insertStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
InsertValue insertValueToken = new InsertValue(each.getValueExpressions());
- encryptToken(insertValueToken, tableName, insertStatementContext, each);
+ encryptToken(insertValueToken, schemaName, tableName, insertStatementContext, each);
result.getInsertValues().add(insertValueToken);
}
return result;
@@ -122,7 +124,8 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
return result;
}
- private void encryptToken(final InsertValue insertValueToken, final String tableName, final InsertStatementContext insertStatementContext, final InsertValueContext insertValueContext) {
+ private void encryptToken(final InsertValue insertValueToken, final String schemaName, final String tableName,
+ final InsertStatementContext insertStatementContext, final InsertValueContext insertValueContext) {
Optional<SQLToken> useDefaultInsertColumnsToken = findPreviousSQLToken(UseDefaultInsertColumnsToken.class);
Iterator<String> descendingColumnNames = insertStatementContext.getDescendingColumnNames();
while (descendingColumnNames.hasNext()) {
@@ -132,7 +135,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
int columnIndex = useDefaultInsertColumnsToken.map(sqlToken -> ((UseDefaultInsertColumnsToken) sqlToken).getColumns().indexOf(columnName))
.orElseGet(() -> insertStatementContext.getColumnNames().indexOf(columnName));
Object originalValue = insertValueContext.getValue(columnIndex).orElseThrow(() -> new ShardingSphereException("Not support for encrypt!"));
- EncryptContext encryptContext = EncryptContextBuilder.build(schemaName, tableName, columnName, encryptRule);
+ EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, tableName, columnName, encryptRule);
addPlainColumn(insertValueToken, columnIndex, encryptContext, insertValueContext, originalValue);
addAssistedQueryColumn(insertValueToken, encryptor.get(), columnIndex, encryptContext, insertValueContext, originalValue);
setCipherColumn(insertValueToken, encryptor.get(), columnIndex, encryptContext, insertValueContext.getValueExpressions().get(columnIndex), originalValue);
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
index a5dec4a3ed6..b75da412bd1 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
@@ -18,8 +18,8 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import lombok.Setter;
+import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware;
-import org.apache.shardingsphere.encrypt.rewrite.aware.SchemaNameAware;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptInCondition;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptPredicateEqualRightValueToken;
@@ -44,7 +44,7 @@ import java.util.Optional;
* Predicate right value token generator for encrypt.
*/
@Setter
-public final class EncryptPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator, ParametersAware, EncryptConditionsAware, EncryptRuleAware, SchemaNameAware {
+public final class EncryptPredicateRightValueTokenGenerator implements CollectionSQLTokenGenerator, ParametersAware, EncryptConditionsAware, EncryptRuleAware, DatabaseNameAware {
private List<Object> parameters;
@@ -52,7 +52,7 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio
private EncryptRule encryptRule;
- private String schemaName;
+ private String databaseName;
@Override
public boolean isGenerateSQLToken(final SQLStatementContext sqlStatementContext) {
@@ -62,6 +62,7 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio
@Override
public Collection<SQLToken> generateSQLTokens(final SQLStatementContext sqlStatementContext) {
Collection<SQLToken> result = new LinkedHashSet<>();
+ String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElse(sqlStatementContext.getDatabaseType().getDefaultSchema(databaseName));
for (EncryptCondition each : encryptConditions) {
result.add(generateSQLToken(schemaName, each));
}
@@ -73,7 +74,7 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio
int startIndex = encryptCondition.getStartIndex();
boolean queryWithCipherColumn = encryptRule.isQueryWithCipherColumn(encryptCondition.getTableName());
return queryWithCipherColumn ? generateSQLTokenForQueryWithCipherColumn(schemaName, encryptCondition, originalValues, startIndex)
- : generateSQLTokenForQueryWithoutCipherColumn(encryptCondition, originalValues, startIndex);
+ : generateSQLTokenForQueryWithoutCipherColumn(schemaName, encryptCondition, originalValues, startIndex);
}
private SQLToken generateSQLTokenForQueryWithCipherColumn(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
@@ -88,11 +89,11 @@ public final class EncryptPredicateRightValueTokenGenerator implements Collectio
private List<Object> getEncryptedValues(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues) {
Optional<String> assistedQueryColumn = encryptRule.findAssistedQueryColumn(encryptCondition.getTableName(), encryptCondition.getColumnName());
return assistedQueryColumn.isPresent()
- ? encryptRule.getEncryptAssistedQueryValues(schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)
- : encryptRule.getEncryptValues(schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues);
+ ? encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)
+ : encryptRule.getEncryptValues(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues);
}
- private SQLToken generateSQLTokenForQueryWithoutCipherColumn(final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
+ private SQLToken generateSQLTokenForQueryWithoutCipherColumn(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
int stopIndex = encryptCondition.getStopIndex();
Map<Integer, Object> indexValues = new HashMap<>();
Optional<String> plainColumn = encryptRule.findPlainColumn(encryptCondition.getTableName(), encryptCondition.getColumnName());
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index 0f602522ebb..bd41b8806cd 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -177,6 +177,7 @@ public final class EncryptRule implements SchemaRule, TableContainedRule {
/**
* get encrypt values.
*
+ * @param databaseName database name
* @param schemaName schema name
* @param logicTable logic table
* @param logicColumn logic column
@@ -184,9 +185,9 @@ public final class EncryptRule implements SchemaRule, TableContainedRule {
* @return encrypt values
*/
@SuppressWarnings("rawtypes")
- public List<Object> getEncryptValues(final String schemaName, final String logicTable, final String logicColumn, final List<Object> originalValues) {
+ public List<Object> getEncryptValues(final String databaseName, final String schemaName, final String logicTable, final String logicColumn, final List<Object> originalValues) {
Optional<EncryptAlgorithm> encryptor = findEncryptor(logicTable, logicColumn);
- EncryptContext encryptContext = EncryptContextBuilder.build(schemaName, logicTable, logicColumn, this);
+ EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, logicTable, logicColumn, this);
Preconditions.checkArgument(encryptor.isPresent(), "Can not find EncryptAlgorithm by %s.%s.", logicTable, logicColumn);
return getEncryptValues(encryptor.get(), originalValues, encryptContext);
}
@@ -246,6 +247,7 @@ public final class EncryptRule implements SchemaRule, TableContainedRule {
/**
* Get encrypt assisted query values.
*
+ * @param databaseName database name
* @param schemaName schema name
* @param logicTable logic table
* @param logicColumn logic column
@@ -253,9 +255,9 @@ public final class EncryptRule implements SchemaRule, TableContainedRule {
* @return assisted query values
*/
@SuppressWarnings("rawtypes")
- public List<Object> getEncryptAssistedQueryValues(final String schemaName, final String logicTable, final String logicColumn, final List<Object> originalValues) {
+ public List<Object> getEncryptAssistedQueryValues(final String databaseName, final String schemaName, final String logicTable, final String logicColumn, final List<Object> originalValues) {
Optional<EncryptAlgorithm> encryptor = findEncryptor(logicTable, logicColumn);
- EncryptContext encryptContext = EncryptContextBuilder.build(schemaName, logicTable, logicColumn, this);
+ EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, logicTable, logicColumn, this);
Preconditions.checkArgument(encryptor.isPresent() && encryptor.get() instanceof QueryAssistedEncryptAlgorithm,
"Can not find QueryAssistedEncryptAlgorithm by %s.%s.", logicTable, logicColumn);
return getEncryptAssistedQueryValues((QueryAssistedEncryptAlgorithm) encryptor.get(), originalValues, encryptContext);
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilderTest.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilderTest.java
index 8ce8bf69efb..05358b8ab14 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilderTest.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/context/EncryptContextBuilderTest.java
@@ -40,7 +40,7 @@ public final class EncryptContextBuilderTest {
@Test
public void assertBuildWhenConfigDateType() {
- EncryptContext actual = EncryptContextBuilder.build("encrypt_db", "test", "cipher", mockEncryptRule());
+ EncryptContext actual = EncryptContextBuilder.build("encrypt_db", "encrypt_db", "test", "cipher", mockEncryptRule());
assertThat(actual.getDatabaseName(), is("encrypt_db"));
assertThat(actual.getTableName(), is("test"));
assertThat(actual.getColumnName(), is("cipher"));
@@ -60,7 +60,7 @@ public final class EncryptContextBuilderTest {
@Test
public void assertBuildWhenNotConfigDateType() {
- EncryptContext actual = EncryptContextBuilder.build("encrypt_db", "test", "cipher", mock(EncryptRule.class));
+ EncryptContext actual = EncryptContextBuilder.build("encrypt_db", "encrypt_db", "test", "cipher", mock(EncryptRule.class));
assertThat(actual.getDatabaseName(), is("encrypt_db"));
assertThat(actual.getTableName(), is("test"));
assertThat(actual.getColumnName(), is("cipher"));
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
index 1ac2c9d9650..9881c218e03 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
@@ -65,7 +65,7 @@ public final class EncryptMergedResultTest {
@Test
public void assertGetValueWithQueryWithPlainColumn() throws SQLException {
when(mergedResult.getValue(1, String.class)).thenReturn("VALUE");
- EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
+ EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
when(metaData.findEncryptContext(1)).thenReturn(Optional.of(encryptContext));
assertThat(new EncryptMergedResult(metaData, mergedResult).getValue(1, String.class), is("VALUE"));
}
@@ -73,7 +73,7 @@ public final class EncryptMergedResultTest {
@Test
public void assertGetValueWithQueryWithCipherColumnAndMismatchedEncryptor() throws SQLException {
when(mergedResult.getValue(1, String.class)).thenReturn("VALUE");
- EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
+ EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
when(metaData.findEncryptContext(1)).thenReturn(Optional.of(encryptContext));
when(metaData.isQueryWithCipherColumn("t_encrypt")).thenReturn(true);
when(metaData.findEncryptor("t_encrypt", "order_id")).thenReturn(Optional.empty());
@@ -85,7 +85,7 @@ public final class EncryptMergedResultTest {
public void assertGetValueWithQueryWithCipherColumnAndMatchedEncryptorWithNotNullCiphertext() throws SQLException {
when(mergedResult.getValue(1, Object.class)).thenReturn("VALUE");
EncryptAlgorithm<String, String> encryptAlgorithm = mock(EncryptAlgorithm.class);
- EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
+ EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
when(encryptAlgorithm.decrypt("VALUE", encryptContext)).thenReturn("ORIGINAL_VALUE");
when(metaData.findEncryptContext(1)).thenReturn(Optional.of(encryptContext));
when(metaData.isQueryWithCipherColumn("t_encrypt")).thenReturn(true);
@@ -97,7 +97,7 @@ public final class EncryptMergedResultTest {
@Test
public void assertGetValueWithQueryWithCipherColumnAndMatchedEncryptorWithNullCiphertext() throws SQLException {
EncryptAlgorithm<String, String> encryptAlgorithm = mock(EncryptAlgorithm.class);
- EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
+ EncryptContext encryptContext = EncryptContextBuilder.build(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "order_id", mock(EncryptRule.class));
when(metaData.findEncryptContext(1)).thenReturn(Optional.of(encryptContext));
when(metaData.isQueryWithCipherColumn("t_encrypt")).thenReturn(true);
when(metaData.findEncryptor("t_encrypt", "order_id")).thenReturn(Optional.of(encryptAlgorithm));
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index dea1ecf0a0f..0cf4b2c6887 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -93,8 +93,8 @@ public final class EncryptRuleTest {
@Test
public void assertGetEncryptValues() {
- List<Object> encryptAssistedQueryValues = new EncryptRule(createEncryptRuleConfiguration(), Collections.emptyMap()).getEncryptValues(DefaultSchema.LOGIC_NAME, "t_encrypt", "pwd",
- Collections.singletonList(null));
+ List<Object> encryptAssistedQueryValues = new EncryptRule(createEncryptRuleConfiguration(), Collections.emptyMap())
+ .getEncryptValues(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "pwd", Collections.singletonList(null));
for (final Object value : encryptAssistedQueryValues) {
assertNull(value);
}
@@ -122,8 +122,8 @@ public final class EncryptRuleTest {
@Test
public void assertGetEncryptAssistedQueryValues() {
- List<Object> encryptAssistedQueryValues = new EncryptRule(createEncryptRuleConfiguration(), Collections.emptyMap()).getEncryptAssistedQueryValues(DefaultSchema.LOGIC_NAME, "t_encrypt", "pwd",
- Collections.singletonList(null));
+ List<Object> encryptAssistedQueryValues = new EncryptRule(createEncryptRuleConfiguration(), Collections.emptyMap())
+ .getEncryptAssistedQueryValues(DefaultSchema.LOGIC_NAME, DefaultSchema.LOGIC_NAME, "t_encrypt", "pwd", Collections.singletonList(null));
for (final Object value : encryptAssistedQueryValues) {
assertNull(value);
}
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
index 21202f9df31..71daccc6a29 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
@@ -27,10 +27,10 @@ import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.datanode.DataNodeUtil;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
-import org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReplicaLoadBalanceAlgorithm;
import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingDataSourceRule;
import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
+import org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
import org.apache.shardingsphere.shadow.api.shadow.column.ColumnShadowAlgorithm;
import org.apache.shardingsphere.shadow.api.shadow.hint.HintShadowAlgorithm;
import org.apache.shardingsphere.shadow.rule.ShadowDataSourceRule;
@@ -135,7 +135,7 @@ public class SpringBootStarterTest {
assertThat(actual.getCipherColumn("t_order", "pwd"), is("pwd_cipher"));
assertThat(actual.getAssistedQueryColumns("t_order"), is(Collections.singletonList("pwd_assisted_query_cipher")));
assertThat(actual.getLogicAndCipherColumns("t_order"), is(Collections.singletonMap("pwd", "pwd_cipher")));
- assertThat(actual.getEncryptValues("foo_db", "t_order", "pwd", Collections.singletonList("pwd_plain")), is(Collections.singletonList("V/RkV1+dVv80Y3csT3cR4g==")));
+ assertThat(actual.getEncryptValues("foo_db", "foo_db", "t_order", "pwd", Collections.singletonList("pwd_plain")), is(Collections.singletonList("V/RkV1+dVv80Y3csT3cR4g==")));
}
private void assertEncryptTable(final EncryptTable actual) {