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