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);