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

duanzhengqiang 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 adf81599dd7 Add EncryptRule.getEncryptTable() (#26347)
adf81599dd7 is described below

commit adf81599dd73ae60976d148d9dcae5d5059dc8b0
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 14 20:34:59 2023 +0800

    Add EncryptRule.getEncryptTable() (#26347)
    
    * Add EncryptRule.getEncryptTable()
    
    * Fix test cases
---
 .../AssistQueryAndPlainInsertColumnsTokenGenerator.java |  9 +++------
 .../generator/EncryptAlterTableTokenGenerator.java      | 13 +++++--------
 .../generator/EncryptAssignmentTokenGenerator.java      |  7 ++-----
 .../generator/EncryptCreateTableTokenGenerator.java     |  7 ++-----
 ...EncryptForUseDefaultInsertColumnsTokenGenerator.java | 11 +++--------
 .../generator/EncryptIndexColumnTokenGenerator.java     |  7 ++-----
 .../generator/EncryptInsertOnUpdateTokenGenerator.java  |  7 ++-----
 .../generator/EncryptInsertValuesTokenGenerator.java    | 17 +++++------------
 .../generator/EncryptOrderByItemTokenGenerator.java     |  6 +++---
 .../generator/EncryptPredicateColumnTokenGenerator.java |  5 ++---
 .../apache/shardingsphere/encrypt/rule/EncryptRule.java | 13 +++++++++++++
 ...istQueryAndPlainInsertColumnsTokenGeneratorTest.java |  2 +-
 .../token/EncryptInsertOnUpdateTokenGeneratorTest.java  |  2 +-
 .../generator/EncryptAlterTableTokenGeneratorTest.java  |  2 +-
 .../generator/EncryptCreateTableTokenGeneratorTest.java |  2 +-
 .../shardingsphere/encrypt/rule/EncryptRuleTest.java    | 11 +++++++++++
 16 files changed, 57 insertions(+), 64 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
index 24b2d733d57..97448f070d2 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
@@ -17,11 +17,10 @@
 
 package org.apache.shardingsphere.encrypt.rewrite.token.generator;
 
-import com.google.common.base.Preconditions;
 import lombok.Setter;
+import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.EncryptTable;
-import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
@@ -32,7 +31,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.Column
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Assist query and plain insert columns token generator.
@@ -50,10 +48,9 @@ public final class 
AssistQueryAndPlainInsertColumnsTokenGenerator implements Col
     @Override
     public Collection<SQLToken> generateSQLTokens(final InsertStatementContext 
insertStatementContext) {
         Collection<SQLToken> result = new LinkedList<>();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
-        Preconditions.checkState(encryptTable.isPresent());
+        EncryptTable encryptTable = 
encryptRule.getEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
         for (ColumnSegment each : 
insertStatementContext.getSqlStatement().getColumns()) {
-            List<String> columns = getColumns(encryptTable.get(), each);
+            List<String> columns = getColumns(encryptTable, each);
             if (!columns.isEmpty()) {
                 result.add(new InsertColumnsToken(each.getStopIndex() + 1, 
columns));
             }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
index 7d6f7686e77..6e94400adee 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
@@ -63,14 +63,11 @@ public final class EncryptAlterTableTokenGenerator 
implements CollectionSQLToken
     @Override
     public Collection<SQLToken> generateSQLTokens(final 
AlterTableStatementContext alterTableStatementContext) {
         String tableName = 
alterTableStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return Collections.emptyList();
-        }
-        Collection<SQLToken> result = new 
LinkedList<>(getAddColumnTokens(encryptTable.get(), 
alterTableStatementContext.getSqlStatement().getAddColumnDefinitions()));
-        result.addAll(getModifyColumnTokens(encryptTable.get(), 
alterTableStatementContext.getSqlStatement().getModifyColumnDefinitions()));
-        result.addAll(getChangeColumnTokens(encryptTable.get(), 
alterTableStatementContext.getSqlStatement().getChangeColumnDefinitions()));
-        List<SQLToken> dropColumnTokens = 
getDropColumnTokens(encryptTable.get(), 
alterTableStatementContext.getSqlStatement().getDropColumnDefinitions());
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
+        Collection<SQLToken> result = new 
LinkedList<>(getAddColumnTokens(encryptTable, 
alterTableStatementContext.getSqlStatement().getAddColumnDefinitions()));
+        result.addAll(getModifyColumnTokens(encryptTable, 
alterTableStatementContext.getSqlStatement().getModifyColumnDefinitions()));
+        result.addAll(getChangeColumnTokens(encryptTable, 
alterTableStatementContext.getSqlStatement().getChangeColumnDefinitions()));
+        List<SQLToken> dropColumnTokens = getDropColumnTokens(encryptTable, 
alterTableStatementContext.getSqlStatement().getDropColumnDefinitions());
         String databaseName = 
alterTableStatementContext.getDatabaseType().getType();
         if ("SQLServer".equals(databaseName)) {
             result.addAll(mergeDropColumnStatement(dropColumnTokens, "", ""));
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
index 9ea9c6cee09..fbd05c961b2 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
@@ -67,14 +67,11 @@ public final class EncryptAssignmentTokenGenerator 
implements CollectionSQLToken
     public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
         Collection<SQLToken> result = new LinkedList<>();
         String tableName = ((TableAvailable) 
sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return Collections.emptyList();
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
databaseName));
         for (AssignmentSegment each : 
getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments())
 {
             if (encryptRule.findStandardEncryptor(tableName, 
each.getColumns().get(0).getIdentifier().getValue()).isPresent()) {
-                generateSQLToken(schemaName, encryptTable.get(), 
each).ifPresent(result::add);
+                generateSQLToken(schemaName, encryptTable, 
each).ifPresent(result::add);
             }
         }
         return result;
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
index 499f4b94946..c228b6bb21b 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
@@ -58,17 +58,14 @@ public final class EncryptCreateTableTokenGenerator 
implements CollectionSQLToke
     public Collection<SQLToken> generateSQLTokens(final 
CreateTableStatementContext createTableStatementContext) {
         Collection<SQLToken> result = new LinkedList<>();
         String tableName = 
createTableStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return Collections.emptyList();
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         List<ColumnDefinitionSegment> columns = new 
ArrayList<>(createTableStatementContext.getSqlStatement().getColumnDefinitions());
         for (int index = 0; index < columns.size(); index++) {
             ColumnDefinitionSegment each = columns.get(index);
             String columnName = 
each.getColumnName().getIdentifier().getValue();
             Optional<StandardEncryptAlgorithm> encryptor = 
encryptRule.findStandardEncryptor(tableName, columnName);
             if (encryptor.isPresent()) {
-                result.addAll(getColumnTokens(encryptTable.get(), columnName, 
each, columns, index));
+                result.addAll(getColumnTokens(encryptTable, columnName, each, 
columns, index));
             }
         }
         return result;
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
index 7f115e215cc..05c497b8b5b 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.encrypt.rewrite.token.generator;
 
 import com.google.common.base.Preconditions;
 import lombok.Setter;
-import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.EncryptTable;
@@ -29,7 +28,6 @@ import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.OptionalSQLTo
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.PreviousSQLTokensAware;
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.UseDefaultInsertColumnsToken;
-import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment;
 
 import java.util.Iterator;
@@ -73,9 +71,7 @@ public final class 
EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
     }
     
     private void processPreviousSQLToken(final UseDefaultInsertColumnsToken 
previousSQLToken, final InsertStatementContext insertStatementContext, final 
String tableName) {
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> 
new EncryptTableNotFoundException(tableName));
-        List<String> columnNames = getColumnNames(insertStatementContext, 
encryptTable.get(), previousSQLToken.getColumns());
+        List<String> columnNames = getColumnNames(insertStatementContext, 
encryptRule.getEncryptTable(tableName), previousSQLToken.getColumns());
         previousSQLToken.getColumns().clear();
         previousSQLToken.getColumns().addAll(columnNames);
     }
@@ -83,9 +79,8 @@ public final class 
EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
     private UseDefaultInsertColumnsToken generateNewSQLToken(final 
InsertStatementContext insertStatementContext, final String tableName) {
         Optional<InsertColumnsSegment> insertColumnsSegment = 
insertStatementContext.getSqlStatement().getInsertColumns();
         Preconditions.checkState(insertColumnsSegment.isPresent());
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> 
new EncryptTableNotFoundException(tableName));
-        return new 
UseDefaultInsertColumnsToken(insertColumnsSegment.get().getStopIndex(), 
getColumnNames(insertStatementContext, encryptTable.get(), 
insertStatementContext.getColumnNames()));
+        return new UseDefaultInsertColumnsToken(
+                insertColumnsSegment.get().getStopIndex(), 
getColumnNames(insertStatementContext, encryptRule.getEncryptTable(tableName), 
insertStatementContext.getColumnNames()));
     }
     
     private List<String> getColumnNames(final InsertStatementContext 
sqlStatementContext, final EncryptTable encryptTable, final List<String> 
currentColumnNames) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
index 5edab600cf5..63210ac158a 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
@@ -58,13 +58,10 @@ public final class EncryptIndexColumnTokenGenerator 
implements CollectionSQLToke
             return Collections.emptyList();
         }
         String tableName = 
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return Collections.emptyList();
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         Collection<SQLToken> result = new LinkedList<>();
         for (ColumnSegment each : ((IndexAvailable) 
sqlStatementContext).getIndexColumns()) {
-            encryptRule.findStandardEncryptor(tableName, 
each.getIdentifier().getValue()).flatMap(optional -> 
getColumnToken(encryptTable.get(), each)).ifPresent(result::add);
+            encryptRule.findStandardEncryptor(tableName, 
each.getIdentifier().getValue()).flatMap(optional -> 
getColumnToken(encryptTable, each)).ifPresent(result::add);
         }
         return result;
     }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
index 9cd630a7b85..14ca01de1d7 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
@@ -74,10 +74,7 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
         }
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
         String tableName = 
insertStatement.getTable().getTableName().getIdentifier().getValue();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return Collections.emptyList();
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         Collection<SQLToken> result = new LinkedList<>();
         for (AssignmentSegment each : onDuplicateKeyColumnsSegments) {
             boolean leftEncryptorPresent = 
encryptRule.findStandardEncryptor(tableName, 
each.getColumns().get(0).getIdentifier().getValue()).isPresent();
@@ -91,7 +88,7 @@ public final class EncryptInsertOnUpdateTokenGenerator 
implements CollectionSQLT
             if (!leftEncryptorPresent) {
                 continue;
             }
-            generateSQLToken(schemaName, encryptTable.get(), 
each).ifPresent(result::add);
+            generateSQLToken(schemaName, encryptTable, 
each).ifPresent(result::add);
         }
         return result;
     }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
index 6b44907ec1a..1348f456a61 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
@@ -90,14 +90,11 @@ public final class EncryptInsertValuesTokenGenerator 
implements OptionalSQLToken
     
     private void processPreviousSQLToken(final InsertStatementContext 
insertStatementContext, final InsertValuesToken insertValuesToken) {
         String tableName = 
insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return;
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         int count = 0;
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
         for (InsertValueContext each : 
insertStatementContext.getInsertValueContexts()) {
-            encryptToken(encryptTable.get(), 
insertValuesToken.getInsertValues().get(count), schemaName, tableName, 
insertStatementContext, each);
+            encryptToken(encryptTable, 
insertValuesToken.getInsertValues().get(count), schemaName, tableName, 
insertStatementContext, each);
             count++;
         }
     }
@@ -106,14 +103,11 @@ public final class EncryptInsertValuesTokenGenerator 
implements OptionalSQLToken
         String tableName = 
insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         Collection<InsertValuesSegment> insertValuesSegments = 
insertStatementContext.getSqlStatement().getValues();
         InsertValuesToken result = new 
EncryptInsertValuesToken(getStartIndex(insertValuesSegments), 
getStopIndex(insertValuesSegments));
-        Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(tableName);
-        if (!encryptTable.isPresent()) {
-            return result;
-        }
+        EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
         String schemaName = 
insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(),
 databaseName));
         for (InsertValueContext each : 
insertStatementContext.getInsertValueContexts()) {
             InsertValue insertValueToken = new 
InsertValue(each.getValueExpressions());
-            encryptToken(encryptTable.get(), insertValueToken, schemaName, 
tableName, insertStatementContext, each);
+            encryptToken(encryptTable, insertValueToken, schemaName, 
tableName, insertStatementContext, each);
             result.getInsertValues().add(insertValueToken);
         }
         return result;
@@ -185,8 +179,7 @@ public final class EncryptInsertValuesTokenGenerator 
implements OptionalSQLToken
     }
     
     private boolean isAddLiteralExpressionSegment(final InsertValueContext 
insertValueContext, final int columnIndex) {
-        return insertValueContext.getParameters().isEmpty()
-                || insertValueContext.getValueExpressions().get(columnIndex) 
instanceof LiteralExpressionSegment;
+        return insertValueContext.getParameters().isEmpty() || 
insertValueContext.getValueExpressions().get(columnIndex) instanceof 
LiteralExpressionSegment;
     }
     
     private int getParameterIndexCount(final InsertValue insertValueToken) {
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
index 0a3d51b2f2d..d5973e0591e 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
@@ -69,8 +69,8 @@ public final class EncryptOrderByItemTokenGenerator 
implements CollectionSQLToke
         for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
             if (each.getSegment() instanceof ColumnOrderByItemSegment) {
                 ColumnSegment columnSegment = ((ColumnOrderByItemSegment) 
each.getSegment()).getColumn();
-                Map<String, String> columnTableNames = 
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
 schema);
-                
result.addAll(generateSQLTokensWithColumnSegments(Collections.singletonList(columnSegment),
 columnTableNames));
+                Map<String, String> columnTableNames = 
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Collections.singleton(columnSegment),
 schema);
+                
result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment),
 columnTableNames));
             }
         }
         return result;
@@ -126,6 +126,6 @@ public final class EncryptOrderByItemTokenGenerator 
implements CollectionSQLToke
     }
     
     private Collection<Projection> createColumnProjections(final String 
columnName, final QuoteCharacter quoteCharacter) {
-        return Collections.singletonList(new ColumnProjection(null, new 
IdentifierValue(columnName, quoteCharacter), null));
+        return Collections.singleton(new ColumnProjection(null, new 
IdentifierValue(columnName, quoteCharacter), null));
     }
 }
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 b024e90f38f..86a7af3c0c6 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,10 +85,9 @@ 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())
 {
-                continue;
+            if (encryptTable.isPresent() && 
encryptTable.get().findEncryptColumn(each.getIdentifier().getValue()).isPresent())
 {
+                result.add(buildSubstitutableColumnNameToken(each, 
whereSegments, encryptTable.get()));
             }
-            result.add(buildSubstitutableColumnNameToken(each, whereSegments, 
encryptTable.get()));
         }
         return result;
     }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index fa06dbeffef..d16d7847587 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
 import 
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
 import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
 import 
org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
+import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.MissingEncryptorException;
 import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -124,6 +125,18 @@ public final class EncryptRule implements DatabaseRule, 
TableContainedRule {
         return Optional.ofNullable(tables.get(tableName.toLowerCase()));
     }
     
+    /**
+     * Get encrypt table.
+     *
+     * @param tableName table name
+     * @return encrypt table
+     */
+    public EncryptTable getEncryptTable(final String tableName) {
+        Optional<EncryptTable> encryptTable = findEncryptTable(tableName);
+        ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> 
new EncryptTableNotFoundException(tableName));
+        return encryptTable.get();
+    }
+    
     /**
      * Find standard encryptor.
      *
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
index 30fd3511f3a..e4cbdc252c7 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
@@ -90,7 +90,7 @@ class AssistQueryAndPlainInsertColumnsTokenGeneratorTest {
         EncryptRule result = mock(EncryptRule.class);
         EncryptTable encryptTable = mock(EncryptTable.class);
         
when(encryptTable.findAssistedQueryColumn("foo_col")).thenReturn(Optional.of("assisted_query_col"));
-        
when(result.findEncryptTable("foo_tbl")).thenReturn(Optional.of(encryptTable));
+        when(result.getEncryptTable("foo_tbl")).thenReturn(encryptTable);
         return result;
     }
     
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
index f58011c2599..443d244adb0 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
@@ -65,7 +65,7 @@ class EncryptInsertOnUpdateTokenGeneratorTest {
     private EncryptRule mockEncryptRule() {
         EncryptRule result = mock(EncryptRule.class);
         EncryptTable encryptTable = mockEncryptTable();
-        
when(result.findEncryptTable("t_user")).thenReturn(Optional.of(encryptTable));
+        when(result.getEncryptTable("t_user")).thenReturn(encryptTable);
         when(result.findStandardEncryptor("t_user", 
"mobile")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
         when(result.findStandardEncryptor("t_user", 
"cipher_mobile")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
         when(result.encrypt(null, "db_test", "t_user", "mobile", 
Collections.singletonList(0))).thenReturn(Collections.singletonList("encryptValue"));
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
index 29069322d22..dc8834b228d 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
@@ -60,7 +60,7 @@ class EncryptAlterTableTokenGeneratorTest {
     private EncryptRule mockEncryptRule() {
         EncryptRule result = mock(EncryptRule.class);
         EncryptTable encryptTable = mockEncryptTable();
-        
when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+        when(result.getEncryptTable("t_encrypt")).thenReturn(encryptTable);
         StandardEncryptAlgorithm<?, ?> encryptAlgorithm = 
mock(StandardEncryptAlgorithm.class);
         when(result.findStandardEncryptor("t_encrypt", 
"certificate_number")).thenReturn(Optional.of(encryptAlgorithm));
         when(result.findStandardEncryptor("t_encrypt", 
"certificate_number_new")).thenReturn(Optional.of(encryptAlgorithm));
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 c11bf9ae83d..8f431536737 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
@@ -59,7 +59,7 @@ class EncryptCreateTableTokenGeneratorTest {
         EncryptRule result = mock(EncryptRule.class);
         when(result.findStandardEncryptor("t_encrypt", 
"certificate_number")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
         EncryptTable encryptTable = mockEncryptTable();
-        
when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+        when(result.getEncryptTable("t_encrypt")).thenReturn(encryptTable);
         return result;
     }
     
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 544d0bfa762..e1077799d6c 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleCo
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
+import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
 import org.junit.jupiter.api.Test;
@@ -54,6 +55,16 @@ class EncryptRuleTest {
         assertTrue(new 
EncryptRule(createEncryptRuleConfiguration()).findEncryptTable("t_encrypt").isPresent());
     }
     
+    @Test
+    void assertGetEncryptTable() {
+        assertThat(new 
EncryptRule(createEncryptRuleConfiguration()).getEncryptTable("t_encrypt").getTable(),
 is("t_encrypt"));
+    }
+    
+    @Test
+    void assertGetNotExistedEncryptTable() {
+        assertThrows(EncryptTableNotFoundException.class, () -> new 
EncryptRule(createEncryptRuleConfiguration()).getEncryptTable("not_existed_tbl"));
+    }
+    
     @Test
     void assertFindStandardEncryptor() {
         assertTrue(new 
EncryptRule(createEncryptRuleConfiguration()).findStandardEncryptor("t_encrypt",
 "pwd").isPresent());

Reply via email to