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) {

Reply via email to