You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/06/14 03:22:54 UTC
[shardingsphere] branch master updated: Remove usage of EncryptRule's findAssistedQueryColumn and findLikeQueryColumn (#26331)
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 c6827ec6cd7 Remove usage of EncryptRule's findAssistedQueryColumn and findLikeQueryColumn (#26331)
c6827ec6cd7 is described below
commit c6827ec6cd71234d3d5daf3119d3fb670313c821
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 14 11:22:46 2023 +0800
Remove usage of EncryptRule's findAssistedQueryColumn and findLikeQueryColumn (#26331)
* Refactor EncryptAssignmentParameterRewriter
* Refactor EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter
* Refactor EncryptInsertValueParameterRewriter
* Refactor EncryptPredicateParameterRewriter
* Remove usage of EncryptRule.findLikeQueryColumn
---
.../EncryptAssignmentParameterRewriter.java | 6 +++--
...OnDuplicateKeyUpdateValueParameterRewriter.java | 10 ++++++--
.../EncryptInsertValueParameterRewriter.java | 18 ++++++++-----
.../EncryptPredicateParameterRewriter.java | 10 +++++---
.../EncryptInsertValuesTokenGenerator.java | 30 ++++++++++++++--------
.../EncryptPredicateRightValueTokenGenerator.java | 18 +++++++------
.../encrypt/rule/EncryptRuleTest.java | 10 --------
7 files changed, 61 insertions(+), 41 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
index 92987469122..956e7b6a954 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptAssignmentParameterRewriter.java
@@ -22,6 +22,7 @@ import lombok.Setter;
import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.UpdateStatementContext;
@@ -97,11 +98,12 @@ public final class EncryptAssignmentParameterRewriter implements ParameterRewrit
Object cipherValue = encryptRule.encrypt(databaseName, schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
paramBuilder.addReplacedParameters(parameterMarkerIndex, cipherValue);
Collection<Object> addedParams = new LinkedList<>();
- if (encryptRule.findAssistedQueryColumn(tableName, columnName).isPresent()) {
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (encryptTable.isPresent() && encryptTable.get().findAssistedQueryColumn(columnName).isPresent()) {
Object assistedQueryValue = encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
addedParams.add(assistedQueryValue);
}
- if (encryptRule.findLikeQueryColumn(tableName, columnName).isPresent()) {
+ if (encryptTable.isPresent() && encryptTable.get().findLikeQueryColumn(columnName).isPresent()) {
Object likeValue = encryptRule.getEncryptLikeQueryValues(databaseName, schemaName, tableName, columnName, Collections.singletonList(originalValue)).iterator().next();
addedParams.add(likeValue);
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
index d63fdc63148..4e53a79b725 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.segment.insert.values.OnDuplicateUpdateContext;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
@@ -38,6 +39,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.Function
import org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.InsertStatementHandler;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
@@ -91,16 +93,20 @@ public final class EncryptInsertOnDuplicateKeyUpdateValueParameterRewriter imple
@SuppressWarnings({"rawtypes", "unchecked"})
private Collection<Object> buildAddedParams(final String tableName, final String logicColumnName, final Object plainValue, final EncryptContext encryptContext) {
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (!encryptTable.isPresent()) {
+ return Collections.emptyList();
+ }
Collection<Object> result = new LinkedList<>();
Optional<AssistedEncryptAlgorithm> assistedQueryEncryptor = encryptRule.findAssistedQueryEncryptor(tableName, logicColumnName);
if (assistedQueryEncryptor.isPresent()) {
- Optional<String> assistedColumnName = encryptRule.findAssistedQueryColumn(tableName, logicColumnName);
+ Optional<String> assistedColumnName = encryptTable.get().findAssistedQueryColumn(logicColumnName);
Preconditions.checkArgument(assistedColumnName.isPresent(), "Can not find assisted query Column Name");
result.add(assistedQueryEncryptor.get().encrypt(plainValue, encryptContext));
}
Optional<LikeEncryptAlgorithm> likeQueryEncryptor = encryptRule.findLikeQueryEncryptor(tableName, logicColumnName);
if (likeQueryEncryptor.isPresent()) {
- Optional<String> likeColumnName = encryptRule.findLikeQueryColumn(tableName, logicColumnName);
+ Optional<String> likeColumnName = encryptTable.get().findLikeQueryColumn(logicColumnName);
Preconditions.checkArgument(likeColumnName.isPresent(), "Can not find assisted query Column Name");
result.add(likeQueryEncryptor.get().encrypt(plainValue, encryptContext));
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
index 4a7c85da499..395060ec471 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptInsertValueParameterRewriter.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.encrypt.exception.metadata.EncryptLikeQueryColu
import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
@@ -67,19 +68,23 @@ public final class EncryptInsertValueParameterRewriter implements ParameterRewri
public void rewrite(final ParameterBuilder paramBuilder, final SQLStatementContext sqlStatementContext, final List<Object> params) {
InsertStatementContext insertStatementContext = (InsertStatementContext) sqlStatementContext;
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (!encryptTable.isPresent()) {
+ return;
+ }
Iterator<String> descendingColumnNames = insertStatementContext.getDescendingColumnNames();
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
while (descendingColumnNames.hasNext()) {
String columnName = descendingColumnNames.next();
EncryptContext encryptContext = EncryptContextBuilder.build(databaseName, schemaName, tableName, columnName);
encryptRule.findStandardEncryptor(tableName, columnName).ifPresent(
- optional -> encryptInsertValues((GroupedParameterBuilder) paramBuilder, insertStatementContext, optional,
+ optional -> encryptInsertValues(encryptTable.get(), (GroupedParameterBuilder) paramBuilder, insertStatementContext, optional,
encryptRule.findAssistedQueryEncryptor(tableName, columnName).orElse(null),
encryptRule.findLikeQueryEncryptor(tableName, columnName).orElse(null), encryptContext));
}
}
- private void encryptInsertValues(final GroupedParameterBuilder paramBuilder, final InsertStatementContext insertStatementContext,
+ private void encryptInsertValues(final EncryptTable encryptTable, final GroupedParameterBuilder paramBuilder, final InsertStatementContext insertStatementContext,
final StandardEncryptAlgorithm<?, ?> standardEncryptor, final AssistedEncryptAlgorithm<?, ?> assistQueryEncryptor,
final LikeEncryptAlgorithm<?, ?> likeQueryEncryptor, final EncryptContext encryptContext) {
int columnIndex = getColumnIndex(paramBuilder, insertStatementContext, encryptContext.getColumnName());
@@ -92,7 +97,7 @@ public final class EncryptInsertValueParameterRewriter implements ParameterRewri
if (expressionSegment instanceof ParameterMarkerExpressionSegment) {
Object literalValue = insertStatementContext.getInsertValueContexts().get(count).getLiteralValue(columnIndex)
.orElse(null);
- encryptInsertValue(standardEncryptor, assistQueryEncryptor, likeQueryEncryptor, paramIndex, literalValue, standardParamBuilder, encryptContext);
+ encryptInsertValue(encryptTable, standardEncryptor, assistQueryEncryptor, likeQueryEncryptor, paramIndex, literalValue, standardParamBuilder, encryptContext);
}
}
count++;
@@ -111,17 +116,18 @@ public final class EncryptInsertValueParameterRewriter implements ParameterRewri
}
@SuppressWarnings({"rawtypes", "unchecked"})
- private void encryptInsertValue(final StandardEncryptAlgorithm standardEncryptor, final AssistedEncryptAlgorithm assistQueryEncryptor, final LikeEncryptAlgorithm likeQueryEncryptor,
+ private void encryptInsertValue(final EncryptTable encryptTable,
+ final StandardEncryptAlgorithm standardEncryptor, final AssistedEncryptAlgorithm assistQueryEncryptor, final LikeEncryptAlgorithm likeQueryEncryptor,
final int paramIndex, final Object originalValue, final StandardParameterBuilder paramBuilder, final EncryptContext encryptContext) {
paramBuilder.addReplacedParameters(paramIndex, standardEncryptor.encrypt(originalValue, encryptContext));
Collection<Object> addedParams = new LinkedList<>();
if (null != assistQueryEncryptor) {
- Optional<String> assistedColumnName = encryptRule.findAssistedQueryColumn(encryptContext.getTableName(), encryptContext.getColumnName());
+ Optional<String> assistedColumnName = encryptTable.findAssistedQueryColumn(encryptContext.getColumnName());
ShardingSpherePreconditions.checkState(assistedColumnName.isPresent(), EncryptAssistedQueryColumnNotFoundException::new);
addedParams.add(assistQueryEncryptor.encrypt(originalValue, encryptContext));
}
if (null != likeQueryEncryptor) {
- Optional<String> likeColumnName = encryptRule.findLikeQueryColumn(encryptContext.getTableName(), encryptContext.getColumnName());
+ Optional<String> likeColumnName = encryptTable.findLikeQueryColumn(encryptContext.getColumnName());
ShardingSpherePreconditions.checkState(likeColumnName.isPresent(), EncryptLikeQueryColumnNotFoundException::new);
addedParams.add(likeQueryEncryptor.encrypt(originalValue, encryptContext));
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
index 60b2d46ef24..b599f6c95c4 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/parameter/rewriter/EncryptPredicateParameterRewriter.java
@@ -17,6 +17,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.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptConditionsAware;
@@ -24,6 +25,7 @@ import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptBinaryCondition;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.WhereAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
@@ -35,6 +37,7 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
/**
* Predicate parameter rewriter for encrypt.
@@ -64,12 +67,13 @@ public final class EncryptPredicateParameterRewriter implements ParameterRewrite
private List<Object> getEncryptedValues(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues) {
String tableName = encryptCondition.getTableName();
String columnName = encryptCondition.getColumnName();
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ Preconditions.checkState(encryptTable.isPresent());
if (encryptCondition instanceof EncryptBinaryCondition && "LIKE".equals(((EncryptBinaryCondition) encryptCondition).getOperator())
- && encryptRule.findLikeQueryColumn(tableName, columnName).isPresent()) {
+ && encryptTable.get().findLikeQueryColumn(columnName).isPresent()) {
return encryptRule.getEncryptLikeQueryValues(databaseName, schemaName, tableName, columnName, originalValues);
}
-
- return encryptRule.findAssistedQueryColumn(tableName, columnName).isPresent()
+ return encryptTable.get().findAssistedQueryColumn(columnName).isPresent()
? encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, tableName, columnName, originalValues)
: encryptRule.encrypt(databaseName, schemaName, tableName, columnName, originalValues);
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
index 24743ae17dd..6b44907ec1a 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptInsertValuesToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.segment.insert.values.InsertValueContext;
import org.apache.shardingsphere.infra.binder.segment.insert.values.expression.DerivedLiteralExpressionSegment;
import org.apache.shardingsphere.infra.binder.segment.insert.values.expression.DerivedParameterMarkerExpressionSegment;
@@ -89,10 +90,14 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
private void processPreviousSQLToken(final InsertStatementContext insertStatementContext, final InsertValuesToken insertValuesToken) {
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (!encryptTable.isPresent()) {
+ return;
+ }
int count = 0;
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
- encryptToken(insertValuesToken.getInsertValues().get(count), schemaName, tableName, insertStatementContext, each);
+ encryptToken(encryptTable.get(), insertValuesToken.getInsertValues().get(count), schemaName, tableName, insertStatementContext, each);
count++;
}
}
@@ -101,10 +106,14 @@ 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));
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (!encryptTable.isPresent()) {
+ return result;
+ }
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
InsertValue insertValueToken = new InsertValue(each.getValueExpressions());
- encryptToken(insertValueToken, schemaName, tableName, insertStatementContext, each);
+ encryptToken(encryptTable.get(), insertValueToken, schemaName, tableName, insertStatementContext, each);
result.getInsertValues().add(insertValueToken);
}
return result;
@@ -126,7 +135,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
return result;
}
- private void encryptToken(final InsertValue insertValueToken, final String schemaName, final String tableName,
+ private void encryptToken(final EncryptTable encryptTable, 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();
@@ -141,21 +150,22 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
setCipherColumn(insertValueToken, standardEncryptor.get(), columnIndex, encryptContext, insertValueContext.getValueExpressions().get(columnIndex), originalValue);
int indexDelta = 1;
if (encryptRule.findAssistedQueryEncryptor(tableName, columnName).isPresent()) {
- addAssistedQueryColumn(insertValueToken, encryptRule.findAssistedQueryEncryptor(tableName, columnName).get(), columnIndex, encryptContext,
- insertValueContext, originalValue, indexDelta);
+ addAssistedQueryColumn(encryptTable,
+ insertValueToken, encryptRule.findAssistedQueryEncryptor(tableName, columnName).get(), columnIndex, encryptContext, insertValueContext, originalValue, indexDelta);
indexDelta++;
}
if (encryptRule.findLikeQueryEncryptor(tableName, columnName).isPresent()) {
- addLikeQueryColumn(insertValueToken, encryptRule.findLikeQueryEncryptor(tableName, columnName).get(), columnIndex, encryptContext, insertValueContext, originalValue, indexDelta);
+ addLikeQueryColumn(encryptTable,
+ insertValueToken, encryptRule.findLikeQueryEncryptor(tableName, columnName).get(), columnIndex, encryptContext, insertValueContext, originalValue, indexDelta);
}
}
}
}
- private void addAssistedQueryColumn(final InsertValue insertValueToken, final AssistedEncryptAlgorithm assistQueryEncryptor, final int columnIndex,
+ private void addAssistedQueryColumn(final EncryptTable encryptTable, final InsertValue insertValueToken, final AssistedEncryptAlgorithm assistQueryEncryptor, final int columnIndex,
final EncryptContext encryptContext, final InsertValueContext insertValueContext,
final Object originalValue, final int indexDelta) {
- if (encryptRule.findAssistedQueryColumn(encryptContext.getTableName(), encryptContext.getColumnName()).isPresent()) {
+ if (encryptTable.findAssistedQueryColumn(encryptContext.getColumnName()).isPresent()) {
DerivedSimpleExpressionSegment derivedExpressionSegment = isAddLiteralExpressionSegment(insertValueContext, columnIndex)
? new DerivedLiteralExpressionSegment(assistQueryEncryptor.encrypt(originalValue, encryptContext))
: new DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken));
@@ -163,10 +173,10 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
}
}
- private void addLikeQueryColumn(final InsertValue insertValueToken, final LikeEncryptAlgorithm likeQueryEncryptor, final int columnIndex,
+ private void addLikeQueryColumn(final EncryptTable encryptTable, final InsertValue insertValueToken, final LikeEncryptAlgorithm likeQueryEncryptor, final int columnIndex,
final EncryptContext encryptContext, final InsertValueContext insertValueContext,
final Object originalValue, final int indexDelta) {
- if (encryptRule.findLikeQueryColumn(encryptContext.getTableName(), encryptContext.getColumnName()).isPresent()) {
+ if (encryptTable.findLikeQueryColumn(encryptContext.getColumnName()).isPresent()) {
DerivedSimpleExpressionSegment derivedExpressionSegment = isAddLiteralExpressionSegment(insertValueContext, columnIndex)
? new DerivedLiteralExpressionSegment(likeQueryEncryptor.encrypt(originalValue, encryptContext))
: new DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken));
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
index 4d6b45050c0..c651b5d6670 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateRightValueTokenGenerator.java
@@ -29,6 +29,7 @@ import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptPredicateEqua
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptPredicateFunctionRightValueToken;
import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptPredicateInRightValueToken;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.WhereAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
@@ -75,20 +76,21 @@ public final class EncryptPredicateRightValueTokenGenerator
Collection<SQLToken> result = new LinkedHashSet<>();
String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), databaseName));
for (EncryptCondition each : encryptConditions) {
- result.add(generateSQLToken(schemaName, each));
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(each.getTableName());
+ encryptTable.ifPresent(table -> result.add(generateSQLToken(schemaName, table, each)));
}
return result;
}
- private SQLToken generateSQLToken(final String schemaName, final EncryptCondition encryptCondition) {
+ private SQLToken generateSQLToken(final String schemaName, final EncryptTable encryptTable, final EncryptCondition encryptCondition) {
List<Object> originalValues = encryptCondition.getValues(parameters);
int startIndex = encryptCondition.getStartIndex();
- return generateSQLToken(schemaName, encryptCondition, originalValues, startIndex);
+ return generateSQLToken(schemaName, encryptTable, encryptCondition, originalValues, startIndex);
}
- private SQLToken generateSQLToken(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
+ private SQLToken generateSQLToken(final String schemaName, final EncryptTable encryptTable, final EncryptCondition encryptCondition, final List<Object> originalValues, final int startIndex) {
int stopIndex = encryptCondition.getStopIndex();
- Map<Integer, Object> indexValues = getPositionValues(encryptCondition.getPositionValueMap().keySet(), getEncryptedValues(schemaName, encryptCondition, originalValues));
+ Map<Integer, Object> indexValues = getPositionValues(encryptCondition.getPositionValueMap().keySet(), getEncryptedValues(schemaName, encryptTable, encryptCondition, originalValues));
Collection<Integer> parameterMarkerIndexes = encryptCondition.getPositionIndexMap().keySet();
if (encryptCondition instanceof EncryptBinaryCondition && ((EncryptBinaryCondition) encryptCondition).getExpressionSegment() instanceof FunctionSegment) {
return new EncryptPredicateFunctionRightValueToken(startIndex, stopIndex,
@@ -99,13 +101,13 @@ public final class EncryptPredicateRightValueTokenGenerator
: new EncryptPredicateEqualRightValueToken(startIndex, stopIndex, indexValues, parameterMarkerIndexes);
}
- private List<Object> getEncryptedValues(final String schemaName, final EncryptCondition encryptCondition, final List<Object> originalValues) {
+ private List<Object> getEncryptedValues(final String schemaName, final EncryptTable encryptTable, final EncryptCondition encryptCondition, final List<Object> originalValues) {
if (encryptCondition instanceof EncryptBinaryCondition && "LIKE".equalsIgnoreCase(((EncryptBinaryCondition) encryptCondition).getOperator())) {
- Optional<String> likeQueryColumn = encryptRule.findLikeQueryColumn(encryptCondition.getTableName(), encryptCondition.getColumnName());
+ Optional<String> likeQueryColumn = encryptTable.findLikeQueryColumn(encryptCondition.getColumnName());
ShardingSpherePreconditions.checkState(likeQueryColumn.isPresent(), () -> new UnsupportedEncryptSQLException("LIKE"));
return encryptRule.getEncryptLikeQueryValues(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues);
}
- Optional<String> assistedQueryColumn = encryptRule.findAssistedQueryColumn(encryptCondition.getTableName(), encryptCondition.getColumnName());
+ Optional<String> assistedQueryColumn = encryptTable.findAssistedQueryColumn(encryptCondition.getColumnName());
return assistedQueryColumn.isPresent()
? encryptRule.getEncryptAssistedQueryValues(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues)
: encryptRule.encrypt(databaseName, schemaName, encryptCondition.getTableName(), encryptCondition.getColumnName(), originalValues);
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 32771ec6318..544d0bfa762 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -78,11 +78,6 @@ class EncryptRuleTest {
assertFalse(new EncryptRule(createEncryptRuleConfiguration()).getLogicAndCipherColumnsMap("t_encrypt").isEmpty());
}
- @Test
- void assertFindAssistedQueryColumn() {
- assertFalse(new EncryptRule(createEncryptRuleConfiguration()).findAssistedQueryColumn("t_encrypt", "pwd_cipher").isPresent());
- }
-
@Test
void assertGetEncryptAssistedQueryValues() {
List<Object> encryptAssistedQueryValues = new EncryptRule(createEncryptRuleConfiguration())
@@ -97,11 +92,6 @@ class EncryptRuleTest {
assertFalse(new EncryptRule(createEncryptRuleConfiguration()).getAssistedQueryColumns("t_encrypt").isEmpty());
}
- @Test
- void assertFindLikeQueryColumn() {
- assertFalse(new EncryptRule(createEncryptRuleConfiguration()).findLikeQueryColumn("t_encrypt", "pwd_cipher").isPresent());
- }
-
@Test
void assertGetEncryptLikeQueryValues() {
List<Object> encryptLikeQueryValues = new EncryptRule(createEncryptRuleConfiguration())