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 18aae23a48a Minor refactor for TablesContext (#37914)
18aae23a48a is described below

commit 18aae23a48a3700c23f7a44900b9467e3b6de295
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Sat Jan 31 17:07:54 2026 +0800

    Minor refactor for TablesContext (#37914)
---
 .../context/segment/table/TablesContext.java       | 48 ++++++++++++----------
 1 file changed, 27 insertions(+), 21 deletions(-)

diff --git 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
index de73db9a2b7..1240a4fcd6b 100644
--- 
a/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
+++ 
b/infra/binder/core/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
@@ -17,7 +17,9 @@
 
 package org.apache.shardingsphere.infra.binder.context.segment.table;
 
+import com.cedarsoftware.util.CaseInsensitiveMap;
 import com.cedarsoftware.util.CaseInsensitiveSet;
+import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.ToString;
@@ -31,7 +33,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Optional;
@@ -43,9 +44,6 @@ import java.util.Optional;
 @ToString
 public final class TablesContext {
     
-    @Getter(AccessLevel.NONE)
-    private final Collection<TableSegment> tables = new LinkedList<>();
-    
     private final Collection<SimpleTableSegment> simpleTables = new 
LinkedList<>();
     
     private final Collection<String> tableNames = new CaseInsensitiveSet<>();
@@ -55,7 +53,10 @@ public final class TablesContext {
     private final Collection<String> databaseNames = new 
CaseInsensitiveSet<>();
     
     @Getter(AccessLevel.NONE)
-    private final Map<String, Collection<SubqueryTableContext>> subqueryTables 
= new HashMap<>();
+    private final Map<String, Collection<SubqueryTableContext>> subqueryTables 
= new CaseInsensitiveMap<>();
+    
+    @Getter(AccessLevel.NONE)
+    private final Collection<? extends TableSegment> tables;
     
     public TablesContext(final SimpleTableSegment table) {
         this(null == table ? Collections.emptyList() : 
Collections.singletonList(table));
@@ -66,35 +67,40 @@ public final class TablesContext {
     }
     
     public TablesContext(final Collection<? extends TableSegment> tables, 
final Map<Integer, SelectStatementContext> subqueryContexts) {
-        if (tables.isEmpty()) {
-            return;
-        }
-        this.tables.addAll(tables);
+        this.tables = tables;
         for (TableSegment each : tables) {
-            if (each instanceof SimpleTableSegment) {
-                SimpleTableSegment simpleTableSegment = (SimpleTableSegment) 
each;
-                TableNameSegment tableName = simpleTableSegment.getTableName();
-                if 
(!"DUAL".equalsIgnoreCase(tableName.getIdentifier().getValue())) {
-                    simpleTables.add(simpleTableSegment);
-                    tableNames.add(tableName.getIdentifier().getValue());
-                    // TODO support bind with all statement contains table 
segment @duanzhengqiang
-                    tableName.getTableBoundInfo().ifPresent(optional -> 
schemaNames.add(optional.getOriginalSchema().getValue()));
-                    tableName.getTableBoundInfo().ifPresent(optional -> 
databaseNames.add(optional.getOriginalDatabase().getValue()));
-                }
-            }
             if (each instanceof SubqueryTableSegment) {
                 subqueryTables.putAll(createSubqueryTables(subqueryContexts, 
(SubqueryTableSegment) each));
             }
+            if (!(each instanceof SimpleTableSegment)) {
+                continue;
+            }
+            SimpleTableSegment simpleTable = (SimpleTableSegment) each;
+            TableNameSegment tableName = simpleTable.getTableName();
+            if ("DUAL".equalsIgnoreCase(tableName.getIdentifier().getValue())) 
{
+                continue;
+            }
+            handleSimpleTable(simpleTable, tableName);
         }
     }
     
+    private void handleSimpleTable(final SimpleTableSegment simpleTable, final 
TableNameSegment tableName) {
+        simpleTables.add(simpleTable);
+        tableNames.add(tableName.getIdentifier().getValue());
+        // TODO support bind with all statement contains table segment 
@duanzhengqiang
+        tableName.getTableBoundInfo().filter(optional -> 
!Strings.isNullOrEmpty(optional.getOriginalSchema().getValue()))
+                .ifPresent(optional -> 
schemaNames.add(optional.getOriginalSchema().getValue()));
+        tableName.getTableBoundInfo().filter(optional -> 
!Strings.isNullOrEmpty(optional.getOriginalDatabase().getValue()))
+                .ifPresent(optional -> 
databaseNames.add(optional.getOriginalDatabase().getValue()));
+    }
+    
     private Map<String, Collection<SubqueryTableContext>> 
createSubqueryTables(final Map<Integer, SelectStatementContext> 
subqueryContexts, final SubqueryTableSegment subqueryTable) {
         if 
(!subqueryContexts.containsKey(subqueryTable.getSubquery().getStartIndex())) {
             return Collections.emptyMap();
         }
         SelectStatementContext subqueryContext = 
subqueryContexts.get(subqueryTable.getSubquery().getStartIndex());
         Map<String, SubqueryTableContext> subqueryTableContexts = new 
SubqueryTableContextEngine().createSubqueryTableContexts(subqueryContext, 
subqueryTable.getAliasName().orElse(null));
-        Map<String, Collection<SubqueryTableContext>> result = new 
HashMap<>(subqueryTableContexts.size(), 1F);
+        Map<String, Collection<SubqueryTableContext>> result = new 
CaseInsensitiveMap<>(subqueryTableContexts.size(), 1F);
         for (SubqueryTableContext each : subqueryTableContexts.values()) {
             if (null != each.getAliasName()) {
                 result.computeIfAbsent(each.getAliasName(), unused -> new 
LinkedList<>()).add(each);

Reply via email to