This is an automated email from the ASF dual-hosted git repository.
FlyingZC 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 7df45dfc15e Minor refactor EncryptPredicateColumnTokenGenerator,
EncryptPredicateParameterRewriter and EncryptPredicateValueTokenGenerator
(#38692)
7df45dfc15e is described below
commit 7df45dfc15efc0dab584d8881df543eb211284d0
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu May 14 18:23:15 2026 +0800
Minor refactor EncryptPredicateColumnTokenGenerator,
EncryptPredicateParameterRewriter and EncryptPredicateValueTokenGenerator
(#38692)
---
.../metadata/database/option/OracleFunctionOption.java | 4 ++--
.../metadata/database/option/OracleFunctionOptionTest.java | 2 ++
.../predicate/EncryptPredicateColumnSupportedChecker.java | 4 ++--
.../shardingsphere/encrypt/constant/EncryptConstants.java | 2 ++
.../rewriter/EncryptPredicateParameterRewriter.java | 3 ++-
.../predicate/EncryptPredicateColumnTokenGenerator.java | 12 +++++++-----
.../predicate/EncryptPredicateValueTokenGenerator.java | 4 ++--
7 files changed, 19 insertions(+), 12 deletions(-)
diff --git
a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOption.java
b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOption.java
index 58791a9e31e..491480070f8 100644
---
a/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOption.java
+++
b/database/connector/dialect/oracle/src/main/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOption.java
@@ -30,8 +30,8 @@ public final class OracleFunctionOption implements
DialectFunctionOption {
// TODO remove ROWNUM_ and ROW_NUMBER, move DAY to anthor method
@duanzhengqiang
private static final Collection<String> UNPARENTHESIZED_FUNCTION_NAMES =
new CaseInsensitiveSet<>(Arrays.asList(
- "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
"CURRENT_USER", "CURRVAL", "DAY", "DBTIMEZONE", "LEVEL", "LOCALTIME",
"LOCALTIMESTAMP",
- "NEXTVAL", "ORA_ROWSCN", "ROWID", "ROWNUM", "ROWNUM_",
"ROW_NUMBER", "SESSIONTIMEZONE", "SESSION_USER", "SYSDATE", "SYSTIMESTAMP",
"UID", "USER"));
+ "CONNECT_BY_ISCYCLE", "CONNECT_BY_ISLEAF", "CURRENT_DATE",
"CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "CURRVAL", "DAY",
"DBTIMEZONE", "LEVEL", "LOCALTIME",
+ "LOCALTIMESTAMP", "NEXTVAL", "ORA_ROWSCN", "ROWID", "ROWNUM",
"ROWNUM_", "ROW_NUMBER", "SESSIONTIMEZONE", "SESSION_USER", "SYSDATE",
"SYSTIMESTAMP", "UID", "USER"));
@Override
public String getIfNullFunctionName() {
diff --git
a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOptionTest.java
b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOptionTest.java
index f02c542322f..c7daa98fd2f 100644
---
a/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOptionTest.java
+++
b/database/connector/dialect/oracle/src/test/java/org/apache/shardingsphere/database/connector/oracle/metadata/database/option/OracleFunctionOptionTest.java
@@ -34,6 +34,8 @@ class OracleFunctionOptionTest {
@Test
void assertGetUnparenthesizedFunctionNames() {
+
assertTrue(functionOption.getUnparenthesizedFunctionNames().contains("CONNECT_BY_ISCYCLE"));
+
assertTrue(functionOption.getUnparenthesizedFunctionNames().contains("CONNECT_BY_ISLEAF"));
assertTrue(functionOption.getUnparenthesizedFunctionNames().contains("CURRENT_DATE"));
assertTrue(functionOption.getUnparenthesizedFunctionNames().contains("CURRENT_TIME"));
assertTrue(functionOption.getUnparenthesizedFunctionNames().contains("CURRENT_TIMESTAMP"));
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
index 8aaf7934293..39f9a4b8d15 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/checker/sql/predicate/EncryptPredicateColumnSupportedChecker.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.encrypt.checker.sql.predicate;
import
org.apache.shardingsphere.encrypt.checker.cryptographic.JoinConditionsEncryptorChecker;
+import org.apache.shardingsphere.encrypt.constant.EncryptConstants;
import
org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
@@ -82,8 +83,7 @@ public final class EncryptPredicateColumnSupportedChecker
implements SupportedSQ
private boolean isLikeColumnSegment(final Collection<ExpressionSegment>
expressions, final ColumnSegment targetColumnSegment) {
for (ExpressionSegment each : expressions) {
- if (each instanceof BinaryOperationExpression
- && ("LIKE".equalsIgnoreCase(((BinaryOperationExpression)
each).getOperator()) || "NOT
LIKE".equalsIgnoreCase(((BinaryOperationExpression) each).getOperator()))
+ if (each instanceof BinaryOperationExpression &&
EncryptConstants.LIKE_OPERATORS.contains(((BinaryOperationExpression)
each).getOperator())
&& isSameColumnSegment(((BinaryOperationExpression)
each).getLeft(), targetColumnSegment)) {
return true;
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptConstants.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptConstants.java
index 08b15921758..bc9ed6f5e54 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptConstants.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/constant/EncryptConstants.java
@@ -30,5 +30,7 @@ import java.util.Collection;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class EncryptConstants {
+ public static final Collection<String> LIKE_OPERATORS = new
CaseInsensitiveSet<>(Arrays.asList("LIKE", "NOT LIKE"));
+
public static final Collection<String> SUPPORTED_BINARY_OPERATORS = new
CaseInsensitiveSet<>(Arrays.asList("=", "<>", "!=", ">", "<", ">=", "<=", "IS",
"LIKE", "NOT LIKE"));
}
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 2f328a4c375..152968b264c 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
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.encrypt.constant.EncryptConstants;
import
org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import
org.apache.shardingsphere.encrypt.rewrite.condition.EncryptConditionValues;
@@ -86,7 +87,7 @@ public final class EncryptPredicateParameterRewriter
implements ParameterRewrite
}
private boolean containsLikeOperator(final EncryptBinaryCondition
encryptCondition) {
- return "LIKE".equalsIgnoreCase(encryptCondition.getOperator()) || "NOT
LIKE".equalsIgnoreCase(encryptCondition.getOperator());
+ return
EncryptConstants.LIKE_OPERATORS.contains(encryptCondition.getOperator());
}
private void encryptParameters(final ParameterBuilder paramBuilder, final
Map<Integer, Integer> positionIndexes, final List<Object> encryptValues) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
index 5c25fa589dd..7444402b36a 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateColumnTokenGenerator.java
@@ -22,6 +22,7 @@ import lombok.Setter;
import
org.apache.shardingsphere.database.connector.core.metadata.database.enums.QuoteCharacter;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.encrypt.constant.EncryptConstants;
import org.apache.shardingsphere.encrypt.enums.EncryptDerivedColumnSuffix;
import
org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
@@ -46,6 +47,7 @@ import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.Co
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.predicate.WhereSegment;
+import
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
@@ -88,9 +90,10 @@ public final class EncryptPredicateColumnTokenGenerator
implements CollectionSQL
private Collection<SQLToken> generateSQLTokens(final SQLStatement
sqlStatement, final ExpressionSegment expression) {
Collection<SQLToken> result = new LinkedList<>();
for (ColumnSegment each : ColumnExtractor.extract(expression)) {
- Optional<EncryptTable> encryptTable =
rule.findEncryptTable(each.getColumnBoundInfo().getOriginalTable().getValue());
- if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(each.getColumnBoundInfo().getOriginalColumn().getValue()))
{
- EncryptColumn encryptColumn =
encryptTable.get().getEncryptColumn(each.getColumnBoundInfo().getOriginalColumn().getValue());
+ ColumnSegmentBoundInfo columnBoundInfo = each.getColumnBoundInfo();
+ Optional<EncryptTable> encryptTable =
rule.findEncryptTable(columnBoundInfo.getOriginalTable().getValue());
+ if (encryptTable.isPresent() &&
encryptTable.get().isEncryptColumn(columnBoundInfo.getOriginalColumn().getValue()))
{
+ EncryptColumn encryptColumn =
encryptTable.get().getEncryptColumn(columnBoundInfo.getOriginalColumn().getValue());
result.addAll(buildSubstitutableColumnNameTokens(encryptColumn, each,
expression, sqlStatement.getDatabaseType(), encryptTable.get().getTable()));
}
}
@@ -128,8 +131,7 @@ public final class EncryptPredicateColumnTokenGenerator
implements CollectionSQL
}
private boolean isIncludeLike(final ExpressionSegment expression) {
- return expression instanceof BinaryOperationExpression &&
("LIKE".equalsIgnoreCase(((BinaryOperationExpression) expression).getOperator())
- || "NOT LIKE".equalsIgnoreCase(((BinaryOperationExpression)
expression).getOperator()));
+ return expression instanceof BinaryOperationExpression &&
EncryptConstants.LIKE_OPERATORS.contains(((BinaryOperationExpression)
expression).getOperator());
}
private Collection<Projection> createColumnProjections(final String
actualColumnName, final ColumnSegment columnSegment, final
EncryptDerivedColumnSuffix derivedColumnSuffix,
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 756d8138c7f..92cb5135946 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
@@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import org.apache.shardingsphere.encrypt.constant.EncryptConstants;
import
org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException;
import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
import
org.apache.shardingsphere.encrypt.rewrite.condition.EncryptConditionValues;
@@ -111,8 +112,7 @@ public final class EncryptPredicateValueTokenGenerator
implements CollectionSQLT
String columnName =
encryptCondition.getColumnSegment().getColumnBoundInfo().getOriginalColumn().getValue();
EncryptColumn encryptColumn =
encryptTable.getEncryptColumn(columnName);
String tableName =
encryptCondition.getColumnSegment().getColumnBoundInfo().getOriginalTable().getValue();
- if (encryptCondition instanceof EncryptBinaryCondition &&
("LIKE".equalsIgnoreCase(((EncryptBinaryCondition)
encryptCondition).getOperator())
- || "NOT LIKE".equalsIgnoreCase(((EncryptBinaryCondition)
encryptCondition).getOperator()))) {
+ if (encryptCondition instanceof EncryptBinaryCondition &&
EncryptConstants.LIKE_OPERATORS.contains(((EncryptBinaryCondition)
encryptCondition).getOperator())) {
return getLikeQueryEncryptedValues(schemaName, encryptCondition,
originalValues, encryptColumn, tableName, columnName);
}
return encryptColumn.getAssistedQuery()