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 7c2eac38282 Minor refactor for encrypt token generator and parameter 
rewriter (#37886)
7c2eac38282 is described below

commit 7c2eac382824ad276a447f412d1f31d0271a57e6
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jan 29 18:08:57 2026 +0800

    Minor refactor for encrypt token generator and parameter rewriter (#37886)
---
 .../rewriter/EncryptPredicateParameterRewriter.java  | 20 ++++++++++++++++----
 .../EncryptInsertPredicateValueTokenGenerator.java   |  2 +-
 .../EncryptPredicateValueTokenGenerator.java         |  2 +-
 .../EncryptInsertSelectProjectionTokenGenerator.java |  3 ++-
 .../token/EncryptTokenGenerateBuilderTest.java       |  4 +++-
 .../EncryptPredicateValueTokenGeneratorTest.java     |  6 ++++--
 6 files changed, 27 insertions(+), 10 deletions(-)

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 0992e93f82d..1038c5f7614 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
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.encrypt.rewrite.parameter.rewriter;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.encrypt.exception.metadata.MissingMatchedEncryptQueryAlgorithmException;
 import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
 import 
org.apache.shardingsphere.encrypt.rewrite.condition.EncryptConditionValues;
 import 
org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptBinaryCondition;
@@ -27,6 +28,7 @@ import 
org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.ParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.builder.impl.StandardParameterBuilder;
 import 
org.apache.shardingsphere.infra.rewrite.parameter.rewriter.ParameterRewriter;
@@ -67,16 +69,26 @@ public final class EncryptPredicateParameterRewriter 
implements ParameterRewrite
         String columnName = 
encryptCondition.getColumnSegment().getColumnBoundInfo().getOriginalColumn().getValue();
         EncryptTable encryptTable = rule.getEncryptTable(tableName);
         EncryptColumn encryptColumn = 
encryptTable.getEncryptColumn(columnName);
-        if (encryptCondition instanceof EncryptBinaryCondition
-                && ("LIKE".equals(((EncryptBinaryCondition) 
encryptCondition).getOperator()) || "NOT LIKE".equals(((EncryptBinaryCondition) 
encryptCondition).getOperator()))
-                && encryptColumn.getLikeQuery().isPresent()) {
-            return encryptColumn.getLikeQuery().get().encrypt(databaseName, 
schemaName, tableName, columnName, originalValues);
+        if (encryptCondition instanceof EncryptBinaryCondition && 
containsLikeOperator((EncryptBinaryCondition) encryptCondition)) {
+            return getEncryptedLikeValues(schemaName, originalValues, 
encryptColumn, tableName, columnName);
         }
         return encryptColumn.getAssistedQuery().isPresent()
                 ? encryptColumn.getAssistedQuery().get().encrypt(databaseName, 
schemaName, tableName, columnName, originalValues)
                 : encryptColumn.getCipher().encrypt(databaseName, schemaName, 
tableName, columnName, originalValues);
     }
     
+    private List<Object> getEncryptedLikeValues(final String schemaName, final 
List<Object> originalValues, final EncryptColumn encryptColumn, final String 
tableName, final String columnName) {
+        
ShardingSpherePreconditions.checkState(encryptColumn.getLikeQuery().isPresent() 
|| encryptColumn.getCipher().getEncryptor().getMetaData().isSupportLike(),
+                () -> new 
MissingMatchedEncryptQueryAlgorithmException(tableName, columnName, "LIKE"));
+        return encryptColumn.getLikeQuery()
+                .map(likeQueryColumnItem -> 
likeQueryColumnItem.encrypt(databaseName, schemaName, tableName, columnName, 
originalValues))
+                .orElseGet(() -> 
encryptColumn.getCipher().encrypt(databaseName, schemaName, tableName, 
columnName, originalValues));
+    }
+    
+    private boolean containsLikeOperator(final EncryptBinaryCondition 
encryptCondition) {
+        return "LIKE".equalsIgnoreCase(encryptCondition.getOperator()) || "NOT 
LIKE".equalsIgnoreCase(encryptCondition.getOperator());
+    }
+    
     private void encryptParameters(final ParameterBuilder paramBuilder, final 
Map<Integer, Integer> positionIndexes, final List<Object> encryptValues) {
         if (!positionIndexes.isEmpty()) {
             for (Entry<Integer, Integer> entry : positionIndexes.entrySet()) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
index 783fa168649..67cf77cccac 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptInsertPredicateValueTokenGenerator.java
@@ -51,7 +51,7 @@ public final class EncryptInsertPredicateValueTokenGenerator 
implements Collecti
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof InsertStatementContext && null 
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext()
-                && !((InsertStatementContext) 
sqlStatementContext).getInsertSelectContext().getSelectStatementContext().getWhereSegments().isEmpty();
+                && !((InsertStatementContext) 
sqlStatementContext).getInsertSelectContext().getSelectStatementContext().getWhereSegments().isEmpty()
 && !encryptConditions.isEmpty();
     }
     
     @Override
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 1c5c64e8f02..629e7c6d61e 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
@@ -66,7 +66,7 @@ public final class EncryptPredicateValueTokenGenerator 
implements CollectionSQLT
     
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
-        return sqlStatementContext instanceof WhereContextAvailable;
+        return sqlStatementContext instanceof WhereContextAvailable && 
!encryptConditions.isEmpty();
     }
     
     @Override
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
index 7d10173a6e4..85bde119763 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptInsertSelectProjectionTokenGenerator.java
@@ -44,7 +44,8 @@ public final class 
EncryptInsertSelectProjectionTokenGenerator implements Collec
     
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
-        return sqlStatementContext instanceof InsertStatementContext && null 
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext();
+        return sqlStatementContext instanceof InsertStatementContext && null 
!= ((InsertStatementContext) sqlStatementContext).getInsertSelectContext()
+                && !((InsertStatementContext) 
sqlStatementContext).getInsertSelectContext().getSelectStatementContext().getTablesContext().getSimpleTables().isEmpty();
     }
     
     @Override
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
index 6f5ea0038a7..38d6c986a7d 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptTokenGenerateBuilderTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token;
 
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import org.apache.shardingsphere.encrypt.rewrite.condition.EncryptCondition;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.predicate.EncryptPredicateColumnTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.predicate.EncryptPredicateValueTokenGenerator;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.generator.projection.EncryptSelectProjectionTokenGenerator;
@@ -63,7 +64,8 @@ class EncryptTokenGenerateBuilderTest {
         
when(selectStatementContext.getWhereSegments()).thenReturn(Collections.emptyList());
         when(selectStatementContext.getSqlStatement()).thenReturn(new 
SelectStatement(databaseType));
         SQLRewriteContext sqlRewriteContext = mock(SQLRewriteContext.class, 
RETURNS_DEEP_STUBS);
-        EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new 
EncryptTokenGenerateBuilder(selectStatementContext, Collections.emptyList(), 
rule, sqlRewriteContext);
+        EncryptCondition encryptCondition = mock(EncryptCondition.class);
+        EncryptTokenGenerateBuilder encryptTokenGenerateBuilder = new 
EncryptTokenGenerateBuilder(selectStatementContext, 
Collections.singleton(encryptCondition), rule, sqlRewriteContext);
         Collection<SQLTokenGenerator> sqlTokenGenerators = 
encryptTokenGenerateBuilder.getSQLTokenGenerators();
         assertThat(sqlTokenGenerators.size(), is(3));
         Iterator<SQLTokenGenerator> iterator = sqlTokenGenerators.iterator();
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
index 9c5752141a4..4adb5277bfd 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/predicate/EncryptPredicateValueTokenGeneratorTest.java
@@ -37,9 +37,11 @@ class EncryptPredicateValueTokenGeneratorTest {
     
     @Test
     void assertIsGenerateSQLToken() {
+        UpdateStatementContext updateStatementContext = 
EncryptGeneratorFixtureBuilder.createUpdateStatementContext();
+        Collection<EncryptCondition> encryptConditions = 
getEncryptConditions(updateStatementContext);
         EncryptPredicateValueTokenGenerator generator = new 
EncryptPredicateValueTokenGenerator(EncryptGeneratorFixtureBuilder.createEncryptRule(),
-                new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), Collections.emptyList());
-        
assertTrue(generator.isGenerateSQLToken(EncryptGeneratorFixtureBuilder.createUpdateStatementContext()));
+                new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), encryptConditions);
+        assertTrue(generator.isGenerateSQLToken(updateStatementContext));
     }
     
     @Test

Reply via email to