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();
}
}