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

zhaojinchao 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 38ad82ed863 Remove EncryptTable.findEncryptColumn() (#26418)
38ad82ed863 is described below

commit 38ad82ed8638f98a1c7b78a94c2c0baff05991d1
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jun 18 23:03:00 2023 +0800

    Remove EncryptTable.findEncryptColumn() (#26418)
    
    * Refactor EncryptConditionEngine
    
    * Refactor EncryptPredicateColumnTokenGenerator
    
    * Remove EncryptTable.findEncryptColumn()
---
 .../rewrite/condition/EncryptConditionEngine.java  |  9 ++++---
 .../EncryptPredicateColumnTokenGenerator.java      |  2 +-
 .../generator/EncryptProjectionTokenGenerator.java |  5 ++--
 .../shardingsphere/encrypt/rule/EncryptTable.java  | 30 ++++++++--------------
 .../EncryptCreateTableTokenGeneratorTest.java      |  3 ---
 5 files changed, 19 insertions(+), 30 deletions(-)

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 08396319c02..37437b52f29 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
@@ -21,8 +21,8 @@ import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException;
 import 
org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptBinaryCondition;
 import 
org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptInCondition;
-import org.apache.shardingsphere.encrypt.rule.EncryptColumn;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -118,9 +118,10 @@ public final class EncryptConditionEngine {
         }
         for (ColumnSegment each : ColumnExtractor.extract(expression)) {
             String tableName = 
expressionTableNames.getOrDefault(each.getExpression(), "");
-            Optional<EncryptColumn> encryptColumn = 
encryptRule.findEncryptTable(tableName).flatMap(optional -> 
optional.findEncryptColumn(each.getIdentifier().getValue()));
-            Optional<EncryptCondition> encryptCondition = 
encryptColumn.isPresent() ? createEncryptCondition(expression, tableName) : 
Optional.empty();
-            encryptCondition.ifPresent(encryptConditions::add);
+            Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
+            if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
+                createEncryptCondition(expression, 
tableName).ifPresent(encryptConditions::add);
+            }
         }
     }
     
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
index 86a7af3c0c6..ae769607a4b 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
@@ -85,7 +85,7 @@ public final class EncryptPredicateColumnTokenGenerator 
implements CollectionSQL
         for (ColumnSegment each : columnSegments) {
             String tableName = 
Optional.ofNullable(columnExpressionTableNames.get(each.getExpression())).orElse("");
             Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-            if (encryptTable.isPresent() && 
encryptTable.get().findEncryptColumn(each.getIdentifier().getValue()).isPresent())
 {
+            if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
                 result.add(buildSubstitutableColumnNameToken(each, 
whereSegments, encryptTable.get()));
             }
         }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index 606f402d429..8a0948571fe 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -120,10 +120,11 @@ public final class EncryptProjectionTokenGenerator 
implements CollectionSQLToken
         List<Projection> projections = new LinkedList<>();
         for (Projection each : actualColumns) {
             String tableName = columnTableNames.get(each.getExpression());
-            if (null == tableName || 
!encryptRule.findEncryptTable(tableName).flatMap(optional -> 
optional.findEncryptColumn(each.getColumnLabel())).isPresent()) {
+            Optional<EncryptTable> encryptTable = null == tableName ? 
Optional.empty() : encryptRule.findEncryptTable(tableName);
+            if (!encryptTable.isPresent() || 
!encryptTable.get().isEncryptColumn(each.getColumnLabel())) {
                 projections.add(each.getAlias().map(optional -> (Projection) 
new ColumnProjection(null, optional, null)).orElse(each));
             } else if (each instanceof ColumnProjection) {
-                encryptRule.findEncryptTable(tableName).ifPresent(optional -> 
projections.addAll(generateProjections(optional, (ColumnProjection) each, 
subqueryType, true, segment)));
+                projections.addAll(generateProjections(encryptTable.get(), 
(ColumnProjection) each, subqueryType, true, segment));
             }
         }
         int startIndex = segment.getOwner().isPresent() ? 
segment.getOwner().get().getStartIndex() : segment.getStartIndex();
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
index 78fb07cd8f2..256a62815c7 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfig
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptColumnNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptLogicColumnNotFoundException;
+import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 
 import java.util.Collection;
 import java.util.LinkedList;
@@ -57,12 +58,10 @@ public final class EncryptTable {
         EncryptColumnItem cipherColumnItem = new 
EncryptColumnItem(config.getCipher().getName(), 
config.getCipher().getEncryptorName());
         EncryptColumn result = new EncryptColumn(config.getName(), 
cipherColumnItem);
         if (config.getAssistedQuery().isPresent()) {
-            EncryptColumnItem assistedQueryColumn = new 
EncryptColumnItem(config.getAssistedQuery().get().getName(), 
config.getAssistedQuery().get().getEncryptorName());
-            result.setAssistedQuery(assistedQueryColumn);
+            result.setAssistedQuery(new 
EncryptColumnItem(config.getAssistedQuery().get().getName(), 
config.getAssistedQuery().get().getEncryptorName()));
         }
         if (config.getLikeQuery().isPresent()) {
-            EncryptColumnItem likeQueryColumn = new 
EncryptColumnItem(config.getLikeQuery().get().getName(), 
config.getLikeQuery().get().getEncryptorName());
-            result.setLikeQuery(likeQueryColumn);
+            result.setLikeQuery(new 
EncryptColumnItem(config.getLikeQuery().get().getName(), 
config.getLikeQuery().get().getEncryptorName()));
         }
         return result;
     }
@@ -122,16 +121,6 @@ public final class EncryptTable {
         throw new EncryptLogicColumnNotFoundException(cipherColumnName);
     }
     
-    /**
-     * Is encrypt column or not.
-     *
-     * @param logicColumnName logic column name
-     * @return encrypt column or not
-     */
-    public boolean isEncryptColumn(final String logicColumnName) {
-        return columns.containsKey(logicColumnName);
-    }
-    
     /**
      * Is cipher column or not.
      *
@@ -216,13 +205,13 @@ public final class EncryptTable {
     }
     
     /**
-     * Find encrypt column.
-     * 
+     * Is encrypt column or not.
+     *
      * @param logicColumnName logic column name
-     * @return encrypt column
+     * @return encrypt column or not
      */
-    public Optional<EncryptColumn> findEncryptColumn(final String 
logicColumnName) {
-        return Optional.ofNullable(columns.get(logicColumnName));
+    public boolean isEncryptColumn(final String logicColumnName) {
+        return columns.containsKey(logicColumnName);
     }
     
     /**
@@ -232,6 +221,7 @@ public final class EncryptTable {
      * @return encrypt column
      */
     public EncryptColumn getEncryptColumn(final String logicColumnName) {
-        return findEncryptColumn(logicColumnName).orElseThrow(() -> new 
EncryptColumnNotFoundException(table, logicColumnName));
+        
ShardingSpherePreconditions.checkState(isEncryptColumn(logicColumnName), () -> 
new EncryptColumnNotFoundException(table, logicColumnName));
+        return columns.get(logicColumnName);
     }
 }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
index e1bb6facf72..3f300318a63 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
@@ -36,7 +36,6 @@ import org.junit.jupiter.api.Test;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
@@ -64,12 +63,10 @@ class EncryptCreateTableTokenGeneratorTest {
     private EncryptTable mockEncryptTable() {
         EncryptTable result = mock(EncryptTable.class);
         EncryptColumn column = mockEncryptColumn();
-        
when(result.getLogicColumns()).thenReturn(Collections.singletonList("t_encrypt"));
         when(result.isEncryptColumn("certificate_number")).thenReturn(true);
         
when(result.getCipherColumn("certificate_number")).thenReturn(column.getCipher().getName());
         
when(result.findAssistedQueryColumn("certificate_number")).thenReturn(column.getAssistedQuery().map(EncryptColumnItem::getName));
         
when(result.findLikeQueryColumn("certificate_number")).thenReturn(column.getLikeQuery().map(EncryptColumnItem::getName));
-        
when(result.findEncryptColumn("certificate_number")).thenReturn(Optional.of(column));
         return result;
     }
     

Reply via email to