This is an automated email from the ASF dual-hosted git repository.

chengzhang 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 1848cc6b515 Refactor CaseWhenExpression and related classes to improve 
text handling and streamline encryption condition creation (#37068)
1848cc6b515 is described below

commit 1848cc6b515bf6455f53aba732dda78d1d147671
Author: Cong Hu <[email protected]>
AuthorDate: Tue Nov 11 14:11:15 2025 +0800

    Refactor CaseWhenExpression and related classes to improve text handling 
and streamline encryption condition creation (#37068)
---
 .../mysql/metadata/data/loader/MySQLMetaDataLoader.java    |  9 +++++++--
 .../encrypt/rewrite/condition/EncryptConditionEngine.java  |  4 +++-
 .../predicate/EncryptPredicateValueTokenGenerator.java     |  2 +-
 .../dml/expression/type/CaseWhenExpressionBinder.java      |  2 +-
 .../mysql/visitor/statement/MySQLStatementVisitor.java     |  2 +-
 .../core/segment/dml/expr/CaseWhenExpression.java          | 14 +++++++++++---
 6 files changed, 24 insertions(+), 9 deletions(-)

diff --git 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
index de24107b74c..e37cc21623a 100644
--- 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
+++ 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/data/loader/MySQLMetaDataLoader.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.database.connector.mysql.metadata.data.loader;
 
+import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.database.connector.core.GlobalDataSourceRegistry;
 import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.DialectMetaDataLoader;
 import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoaderMaterial;
@@ -180,10 +181,14 @@ public final class MySQLMetaDataLoader implements 
DialectMetaDataLoader {
                         tableToIndex.put(tableName, new HashMap<>());
                     }
                     Map<String, IndexMetaData> indexMap = 
tableToIndex.get(tableName);
+                    String columnName = resultSet.getString("COLUMN_NAME");
+                    if (Strings.isNullOrEmpty(columnName)) {
+                        continue;
+                    }
                     if (indexMap.containsKey(indexName)) {
-                        
indexMap.get(indexName).getColumns().add(resultSet.getString("COLUMN_NAME"));
+                        indexMap.get(indexName).getColumns().add(columnName);
                     } else {
-                        IndexMetaData indexMetaData = new 
IndexMetaData(indexName, new 
LinkedList<>(Collections.singleton(resultSet.getString("COLUMN_NAME"))));
+                        IndexMetaData indexMetaData = new 
IndexMetaData(indexName, new LinkedList<>(Collections.singleton(columnName)));
                         
indexMetaData.setUnique("0".equals(resultSet.getString("NON_UNIQUE")));
                         indexMap.put(indexName, indexMetaData);
                     }
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 8ae857e3fca..82a93ef1a46 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
@@ -196,8 +196,11 @@ public final class EncryptConditionEngine {
     }
     
     private static Collection<EncryptCondition> createInEncryptCondition(final 
String tableName, final InExpression inExpression, final ExpressionSegment 
inRightValue) {
+        ColumnSegment columnSegment;
         if (!(inExpression.getLeft() instanceof ColumnSegment)) {
             return Collections.emptyList();
+        } else {
+            columnSegment = (ColumnSegment) inExpression.getLeft();
         }
         List<ExpressionSegment> expressionSegments = new LinkedList<>();
         for (ExpressionSegment each : inExpression.getExpressionList()) {
@@ -208,7 +211,6 @@ public final class EncryptConditionEngine {
         if (expressionSegments.isEmpty()) {
             return Collections.emptyList();
         }
-        ColumnSegment columnSegment = (ColumnSegment) inExpression.getLeft();
         return Collections.singleton(new EncryptInCondition(columnSegment, 
tableName, inRightValue.getStartIndex(), inRightValue.getStopIndex(), 
expressionSegments));
     }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
index b351dfeb6c7..c7c783996e7 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGenerator.java
@@ -100,7 +100,7 @@ public final class EncryptPredicateValueTokenGenerator 
implements CollectionSQLT
     }
     
     private List<Object> getEncryptedValues(final String schemaName, final 
EncryptTable encryptTable, final EncryptCondition encryptCondition, final 
List<Object> originalValues) {
-        String columnName = 
encryptCondition.getColumnSegment().getIdentifier().getValue();
+        String columnName = 
encryptCondition.getColumnSegment().getColumnBoundInfo().getOriginalColumn().getValue();
         EncryptColumn encryptColumn = 
encryptTable.getEncryptColumn(columnName);
         if (encryptCondition instanceof EncryptBinaryCondition && 
("LIKE".equalsIgnoreCase(((EncryptBinaryCondition) 
encryptCondition).getOperator())
                 || "NOT LIKE".equalsIgnoreCase(((EncryptBinaryCondition) 
encryptCondition).getOperator()))) {
diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/CaseWhenExpressionBinder.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/CaseWhenExpressionBinder.java
index 4eb5ad5d8f9..0fe2be46f70 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/CaseWhenExpressionBinder.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/type/CaseWhenExpressionBinder.java
@@ -56,6 +56,6 @@ public final class CaseWhenExpressionBinder {
         segment.getWhenExprs().forEach(each -> 
boundWhenExprs.add(ExpressionSegmentBinder.bind(each, parentSegmentType, 
binderContext, tableBinderContexts, outerTableBinderContexts)));
         segment.getThenExprs().forEach(each -> 
boundThenExprs.add(ExpressionSegmentBinder.bind(each, parentSegmentType, 
binderContext, tableBinderContexts, outerTableBinderContexts)));
         ExpressionSegment boundElseExpr = 
ExpressionSegmentBinder.bind(segment.getElseExpr(), parentSegmentType, 
binderContext, tableBinderContexts, outerTableBinderContexts);
-        return new CaseWhenExpression(segment.getStartIndex(), 
segment.getStopIndex(), boundCaseExpr, boundWhenExprs, boundThenExprs, 
boundElseExpr);
+        return new CaseWhenExpression(segment.getStartIndex(), 
segment.getStopIndex(), boundCaseExpr, boundWhenExprs, boundThenExprs, 
boundElseExpr, segment.getText());
     }
 }
diff --git 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
index 4e0116a5025..eb96493cf99 100644
--- 
a/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/engine/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/engine/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1351,7 +1351,7 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
         }
         ExpressionSegment caseExpr = null == ctx.expr() ? null : 
(ExpressionSegment) visit(ctx.expr());
         ExpressionSegment elseExpr = null == ctx.caseElse() ? null : 
(ExpressionSegment) visit(ctx.caseElse().expr());
-        return new CaseWhenExpression(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), caseExpr, whenExprs, thenExprs, elseExpr);
+        return new CaseWhenExpression(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), caseExpr, whenExprs, thenExprs, elseExpr, 
getOriginalText(ctx));
     }
     
     @Override
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/expr/CaseWhenExpression.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/expr/CaseWhenExpression.java
index 1da2b1e7c30..7dddcb019a8 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/expr/CaseWhenExpression.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/dml/expr/CaseWhenExpression.java
@@ -41,8 +41,16 @@ public final class CaseWhenExpression implements 
ExpressionSegment {
     
     private final ExpressionSegment elseExpr;
     
-    @Override
-    public String getText() {
-        return null == caseExpr ? "" : caseExpr.getText();
+    private final String text;
+    
+    public CaseWhenExpression(final int startIndex, final int stopIndex, final 
ExpressionSegment caseExpr, final Collection<ExpressionSegment> whenExprs,
+                              final Collection<ExpressionSegment> thenExprs, 
final ExpressionSegment elseExpr) {
+        this.startIndex = startIndex;
+        this.stopIndex = stopIndex;
+        this.caseExpr = caseExpr;
+        this.whenExprs = whenExprs;
+        this.thenExprs = thenExprs;
+        this.elseExpr = elseExpr;
+        text = null == caseExpr ? "" : caseExpr.getText();
     }
 }

Reply via email to