You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ch...@apache.org on 2026/05/14 10:23:22 UTC
(shardingsphere) branch master updated: Minor refactor EncryptPredicateColumnTokenGenerator, EncryptPredicateParameterRewriter and EncryptPredicateValueTokenGenerator (#38692)
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 <du...@apache.org>
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()