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 c396f2f8f6a Refactor encrypt condition creation logic in
EncryptConditionEngine (#36879)
c396f2f8f6a is described below
commit c396f2f8f6a88199b742d220d063f5f7836f5580
Author: Cong Hu <[email protected]>
AuthorDate: Tue Oct 14 19:22:52 2025 +0800
Refactor encrypt condition creation logic in EncryptConditionEngine (#36879)
---
.../rewrite/condition/EncryptConditionEngine.java | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
index a8305b3feca..60be32ce493 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
@@ -153,23 +153,27 @@ public final class EncryptConditionEngine {
}
private Optional<EncryptCondition> createCompareEncryptCondition(final
String tableName, final BinaryOperationExpression expression) {
- if (isLeftRightAllNotColumnSegment(expression) ||
isLeftRightContainsSubquerySegment(expression)) {
+ if (isLeftRightContainsSubquerySegment(expression)) {
return Optional.empty();
}
- ColumnSegment columnSegment = expression.getLeft() instanceof
ColumnSegment ? (ColumnSegment) expression.getLeft() : (ColumnSegment)
expression.getRight();
- ExpressionSegment compareValueSegment = expression.getLeft()
instanceof ColumnSegment ? expression.getRight() : expression.getLeft();
+ Optional<ColumnSegment> columnSegment =
Optional.ofNullable(isCompareValueSegment(expression.getLeft()) ?
expression.getRight() :
expression.getLeft()).filter(ColumnSegment.class::isInstance)
+ .map(ColumnSegment.class::cast);
+ if (!columnSegment.isPresent()) {
+ return Optional.empty();
+ }
+ ExpressionSegment compareValueSegment =
isCompareValueSegment(expression.getLeft()) ? expression.getLeft() :
expression.getRight();
if (compareValueSegment instanceof SimpleExpressionSegment) {
- return
Optional.of(createEncryptBinaryOperationCondition(tableName, expression,
columnSegment, compareValueSegment));
+ return
Optional.of(createEncryptBinaryOperationCondition(tableName, expression,
columnSegment.get(), compareValueSegment));
}
if (compareValueSegment instanceof ListExpression) {
// TODO check this logic when items contain multiple values
@duanzhengqiang
- return
Optional.of(createEncryptBinaryOperationCondition(tableName, expression,
columnSegment, ((ListExpression) compareValueSegment).getItems().get(0)));
+ return
Optional.of(createEncryptBinaryOperationCondition(tableName, expression,
columnSegment.get(), ((ListExpression) compareValueSegment).getItems().get(0)));
}
return Optional.empty();
}
- private boolean isLeftRightAllNotColumnSegment(final
BinaryOperationExpression expression) {
- return !(expression.getLeft() instanceof ColumnSegment) &&
!(expression.getRight() instanceof ColumnSegment);
+ private boolean isCompareValueSegment(final ExpressionSegment
expressionSegment) {
+ return expressionSegment instanceof SimpleExpressionSegment ||
expressionSegment instanceof ListExpression;
}
private boolean isLeftRightContainsSubquerySegment(final
BinaryOperationExpression expression) {