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 0f827333aa6 Refactor EncryptOrderByItemTokenGenerator (#32385)
0f827333aa6 is described below

commit 0f827333aa6d03a6752ca0c8ffd0b5ff6e6f0e53
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Aug 3 21:23:18 2024 +0800

    Refactor EncryptOrderByItemTokenGenerator (#32385)
---
 .../EncryptOrderByItemTokenGenerator.java          | 55 +++++++++-------------
 1 file changed, 23 insertions(+), 32 deletions(-)

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 be13ab16961..196c025527f 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
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.orderby.OrderByItem;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
@@ -48,7 +47,7 @@ import java.util.Optional;
  */
 @HighFrequencyInvocation
 @Setter
-public final class EncryptOrderByItemTokenGenerator implements 
CollectionSQLTokenGenerator<SQLStatementContext>, EncryptRuleAware, 
SchemaMetaDataAware {
+public final class EncryptOrderByItemTokenGenerator implements 
CollectionSQLTokenGenerator<SelectStatementContext>, EncryptRuleAware, 
SchemaMetaDataAware {
     
     private EncryptRule encryptRule;
     
@@ -58,24 +57,36 @@ public final class EncryptOrderByItemTokenGenerator 
implements CollectionSQLToke
     
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
-        return sqlStatementContext instanceof SelectStatementContext && 
containsOrderByItem(sqlStatementContext);
+        return sqlStatementContext instanceof SelectStatementContext && 
containsOrderByItem((SelectStatementContext) sqlStatementContext);
+    }
+    
+    private boolean containsOrderByItem(final SelectStatementContext 
sqlStatementContext) {
+        if (!sqlStatementContext.getOrderByContext().getItems().isEmpty() && 
!sqlStatementContext.getOrderByContext().isGenerated()) {
+            return true;
+        }
+        for (SelectStatementContext each : 
sqlStatementContext.getSubqueryContexts().values()) {
+            if (containsOrderByItem(each)) {
+                return true;
+            }
+        }
+        return false;
     }
     
     @Override
-    public Collection<SQLToken> generateSQLTokens(final SQLStatementContext 
sqlStatementContext) {
+    public Collection<SQLToken> generateSQLTokens(final SelectStatementContext 
sqlStatementContext) {
         Collection<SQLToken> result = new LinkedHashSet<>();
-        ShardingSphereSchema schema = ((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> defaultSchema);
+        ShardingSphereSchema schema = 
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> defaultSchema);
         for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
             if (each.getSegment() instanceof ColumnOrderByItemSegment) {
                 ColumnSegment columnSegment = ((ColumnOrderByItemSegment) 
each.getSegment()).getColumn();
-                Map<String, String> columnTableNames = ((TableAvailable) 
sqlStatementContext).getTablesContext().findTableNames(Collections.singleton(columnSegment),
 schema);
-                
result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment),
 columnTableNames));
+                Map<String, String> columnTableNames = 
sqlStatementContext.getTablesContext().findTableNames(Collections.singleton(columnSegment),
 schema);
+                
result.addAll(generateSQLTokens(Collections.singleton(columnSegment), 
columnTableNames));
             }
         }
         return result;
     }
     
-    private Collection<SubstitutableColumnNameToken> 
generateSQLTokensWithColumnSegments(final Collection<ColumnSegment> 
columnSegments, final Map<String, String> columnTableNames) {
+    private Collection<SubstitutableColumnNameToken> generateSQLTokens(final 
Collection<ColumnSegment> columnSegments, final Map<String, String> 
columnTableNames) {
         Collection<SubstitutableColumnNameToken> result = new LinkedList<>();
         for (ColumnSegment each : columnSegments) {
             String tableName = 
columnTableNames.getOrDefault(each.getExpression(), "");
@@ -86,34 +97,14 @@ public final class EncryptOrderByItemTokenGenerator 
implements CollectionSQLToke
         return result;
     }
     
-    private Collection<OrderByItem> getOrderByItems(final SQLStatementContext 
sqlStatementContext) {
-        if (!(sqlStatementContext instanceof SelectStatementContext)) {
-            return Collections.emptyList();
-        }
+    private Collection<OrderByItem> getOrderByItems(final 
SelectStatementContext sqlStatementContext) {
         Collection<OrderByItem> result = new LinkedList<>();
-        SelectStatementContext statementContext = (SelectStatementContext) 
sqlStatementContext;
-        if (!statementContext.getOrderByContext().isGenerated()) {
-            result.addAll(statementContext.getOrderByContext().getItems());
+        if (!sqlStatementContext.getOrderByContext().isGenerated()) {
+            result.addAll(sqlStatementContext.getOrderByContext().getItems());
         }
-        for (SelectStatementContext each : 
statementContext.getSubqueryContexts().values()) {
+        for (SelectStatementContext each : 
sqlStatementContext.getSubqueryContexts().values()) {
             result.addAll(getOrderByItems(each));
         }
         return result;
     }
-    
-    private boolean containsOrderByItem(final SQLStatementContext 
sqlStatementContext) {
-        if (!(sqlStatementContext instanceof SelectStatementContext)) {
-            return false;
-        }
-        SelectStatementContext statementContext = (SelectStatementContext) 
sqlStatementContext;
-        if (!statementContext.getOrderByContext().getItems().isEmpty() && 
!statementContext.getOrderByContext().isGenerated()) {
-            return true;
-        }
-        for (SelectStatementContext each : 
statementContext.getSubqueryContexts().values()) {
-            if (containsOrderByItem(each)) {
-                return true;
-            }
-        }
-        return false;
-    }
 }

Reply via email to