This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 1be1a8538e6 Refactor TablesContext (#31619)
1be1a8538e6 is described below
commit 1be1a8538e607b9dfade98292ee3bbfd209d33d7
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 7 14:51:11 2024 +0800
Refactor TablesContext (#31619)
* Refactor DriverJDBCExecutor
* Refactor TablesContext
---
.../rewrite/condition/EncryptConditionEngine.java | 2 +-
.../EncryptGroupByItemTokenGenerator.java | 2 +-
.../EncryptOrderByItemTokenGenerator.java | 2 +-
.../EncryptPredicateColumnTokenGenerator.java | 2 +-
.../ShardingSQLRewriteContextDecorator.java | 2 +-
.../engine/WhereClauseShardingConditionEngine.java | 2 +-
.../impl/ShardingDropTableStatementValidator.java | 4 +-
.../shardingsphere/sharding/rule/ShardingRule.java | 2 +-
.../WhereClauseShardingConditionEngineTest.java | 2 +-
.../sharding/rule/ShardingRuleTest.java | 6 +--
.../engine/SubqueryTableContextEngine.java | 2 +-
.../context/segment/table/TablesContext.java | 56 ++++++++++++----------
.../statement/ddl/AlterViewStatementContext.java | 2 +-
.../statement/ddl/CommentStatementContext.java | 2 +-
.../statement/ddl/CreateViewStatementContext.java | 2 +-
.../statement/ddl/CursorStatementContext.java | 2 +-
.../statement/ddl/DropViewStatementContext.java | 2 +-
.../statement/dml/CopyStatementContext.java | 2 +-
.../statement/dml/DeleteStatementContext.java | 2 +-
.../statement/dml/InsertStatementContext.java | 2 +-
.../statement/dml/LoadDataStatementContext.java | 2 +-
.../statement/dml/LoadXMLStatementContext.java | 2 +-
.../statement/dml/SelectStatementContext.java | 4 +-
.../statement/dml/UpdateStatementContext.java | 2 +-
.../context/segment/table/TablesContextTest.java | 11 ++---
.../metadata/generator/PipelineDDLGenerator.java | 8 ++--
.../shardingsphere/single/rule/SingleRule.java | 2 +-
27 files changed, 67 insertions(+), 64 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 4f4e5067710..499d2dcd081 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
@@ -94,7 +94,7 @@ public final class EncryptConditionEngine {
Collection<EncryptCondition> result = new LinkedList<>();
String defaultSchema = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
ShardingSphereSchema schema =
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
-> schemas.get(defaultSchema));
- Map<String, String> expressionTableNames =
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
schema);
+ Map<String, String> expressionTableNames =
sqlStatementContext.getTablesContext().findTableNames(columnSegments, schema);
for (WhereSegment each : whereSegments) {
Collection<AndPredicate> andPredicates =
ExpressionExtractUtils.getAndPredicates(each.getExpr());
for (AndPredicate predicate : andPredicates) {
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptGroupByItemTokenGenerator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptGroupByItemTokenGenerator.java
index 5838b9b1d60..6b50264a5d7 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptGroupByItemTokenGenerator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptGroupByItemTokenGenerator.java
@@ -74,7 +74,7 @@ public final class EncryptGroupByItemTokenGenerator
implements CollectionSQLToke
for (OrderByItem each : getGroupByItems(sqlStatementContext)) {
if (each.getSegment() instanceof ColumnOrderByItemSegment) {
ColumnSegment columnSegment = ((ColumnOrderByItemSegment)
each.getSegment()).getColumn();
- Map<String, String> columnTableNames =
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Collections.singleton(columnSegment),
schema);
+ Map<String, String> columnTableNames =
sqlStatementContext.getTablesContext().findTableNames(Collections.singleton(columnSegment),
schema);
result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment),
columnTableNames));
}
}
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 4e1acb3a29f..d1d69589d52 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
@@ -67,7 +67,7 @@ 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.singleton(columnSegment),
schema);
+ Map<String, String> columnTableNames =
sqlStatementContext.getTablesContext().findTableNames(Collections.singleton(columnSegment),
schema);
result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment),
columnTableNames));
}
}
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 c8cd717cd3e..184678ea785 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
@@ -86,7 +86,7 @@ public final class EncryptPredicateColumnTokenGenerator
implements CollectionSQL
() -> new UnsupportedSQLOperationException("Can not use
different encryptor in join condition"));
String defaultSchema = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
ShardingSphereSchema schema =
sqlStatementContext.getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
-> schemas.get(defaultSchema));
- Map<String, String> columnExpressionTableNames =
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
schema);
+ Map<String, String> columnExpressionTableNames =
sqlStatementContext.getTablesContext().findTableNames(columnSegments, schema);
return generateSQLTokens(columnSegments, columnExpressionTableNames,
whereSegments);
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
index aab576a563d..6cd2601294d 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/context/ShardingSQLRewriteContextDecorator.java
@@ -68,7 +68,7 @@ public final class ShardingSQLRewriteContextDecorator
implements SQLRewriteConte
private boolean containsShardingTable(final ShardingRule shardingRule,
final SQLStatementContext sqlStatementContext) {
Collection<SimpleTableSegment> tableSegments =
- sqlStatementContext instanceof TableAvailable ?
((TableAvailable) sqlStatementContext).getAllTables() :
sqlStatementContext.getTablesContext().getSimpleTableSegments();
+ sqlStatementContext instanceof TableAvailable ?
((TableAvailable) sqlStatementContext).getAllTables() :
sqlStatementContext.getTablesContext().getSimpleTables();
for (SimpleTableSegment each : tableSegments) {
if
(shardingRule.isShardingTable(each.getTableName().getIdentifier().getValue())) {
return true;
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
index 96e0b56915b..7acfb38c889 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
@@ -82,7 +82,7 @@ public final class WhereClauseShardingConditionEngine {
String defaultSchemaName = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
ShardingSphereSchema schema =
sqlStatementContext.getTablesContext().getSchemaName()
.map(database::getSchema).orElseGet(() ->
database.getSchema(defaultSchemaName));
- Map<String, String> columnExpressionTableNames =
sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(columnSegments,
schema);
+ Map<String, String> columnExpressionTableNames =
sqlStatementContext.getTablesContext().findTableNames(columnSegments, schema);
List<ShardingCondition> result = new ArrayList<>();
for (WhereSegment each : ((WhereAvailable)
sqlStatementContext).getWhereSegments()) {
result.addAll(createShardingConditions(each.getExpr(), params,
columnExpressionTableNames));
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
index 07e2e59c635..266659c397d 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/validator/ddl/impl/ShardingDropTableStatementValidator.java
@@ -55,11 +55,11 @@ public final class ShardingDropTableStatementValidator
extends ShardingDDLStatem
String defaultSchemaName = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
ShardingSphereSchema schema =
sqlStatementContext.getTablesContext().getSchemaName()
.map(database::getSchema).orElseGet(() ->
database.getSchema(defaultSchemaName));
- validateTableExist(schema,
sqlStatementContext.getTablesContext().getSimpleTableSegments());
+ validateTableExist(schema,
sqlStatementContext.getTablesContext().getSimpleTables());
}
if (DropTableStatementHandler.containsCascade(dropTableStatement)) {
throw new UnsupportedShardingOperationException("DROP TABLE ...
CASCADE",
-
sqlStatementContext.getTablesContext().getSimpleTableSegments().iterator().next().getTableName().getIdentifier().getValue());
+
sqlStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue());
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 63b08731ac7..ad992a7f9d6 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -610,7 +610,7 @@ public final class ShardingRule implements DatabaseRule {
}
ColumnSegment leftColumn = (ColumnSegment)
((BinaryOperationExpression) each).getLeft();
ColumnSegment rightColumn = (ColumnSegment)
((BinaryOperationExpression) each).getRight();
- Map<String, String> columnExpressionTableNames =
select.getTablesContext().findTableNamesByColumnSegment(Arrays.asList(leftColumn,
rightColumn), schema);
+ Map<String, String> columnExpressionTableNames =
select.getTablesContext().findTableNames(Arrays.asList(leftColumn,
rightColumn), schema);
Optional<ShardingTable> leftShardingTable =
findShardingTable(columnExpressionTableNames.get(leftColumn.getExpression()));
Optional<ShardingTable> rightShardingTable =
findShardingTable(columnExpressionTableNames.get(rightColumn.getExpression()));
if (!leftShardingTable.isPresent() ||
!rightShardingTable.isPresent()) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
index 2c93d8e22f1..00eafa6b15b 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
@@ -80,7 +80,7 @@ class WhereClauseShardingConditionEngineTest {
when(sqlStatementContext.getWhereSegments()).thenReturn(Collections.singleton(whereSegment));
when(sqlStatementContext.getTablesContext()).thenReturn(tablesContext);
when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
- when(tablesContext.findTableNamesByColumnSegment(anyCollection(),
any())).thenReturn(Maps.of("foo_sharding_col", "table_1"));
+ when(tablesContext.findTableNames(anyCollection(),
any())).thenReturn(Maps.of("foo_sharding_col", "table_1"));
}
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index aaa8fde75a3..b13898316a9 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -646,7 +646,7 @@ class ShardingRuleTest {
when(sqlStatementContext.getDatabaseType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
when(sqlStatementContext.getTablesContext().getSchemaName()).thenReturn(Optional.empty());
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-
when(sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Arrays.asList(leftDatabaseJoin,
rightDatabaseJoin), schema)).thenReturn(createColumnTableNameMap());
+
when(sqlStatementContext.getTablesContext().findTableNames(Arrays.asList(leftDatabaseJoin,
rightDatabaseJoin), schema)).thenReturn(createColumnTableNameMap());
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
@@ -698,8 +698,8 @@ class ShardingRuleTest {
when(sqlStatementContext.getTablesContext().getSchemaName()).thenReturn(Optional.empty());
when(sqlStatementContext.getWhereSegments()).thenReturn(Collections.singleton(new
WhereSegment(0, 0, condition)));
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-
when(sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Arrays.asList(leftDatabaseJoin,
rightDatabaseJoin), schema)).thenReturn(createColumnTableNameMap());
-
when(sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Arrays.asList(leftTableJoin,
rightTableJoin), schema)).thenReturn(createColumnTableNameMap());
+
when(sqlStatementContext.getTablesContext().findTableNames(Arrays.asList(leftDatabaseJoin,
rightDatabaseJoin), schema)).thenReturn(createColumnTableNameMap());
+
when(sqlStatementContext.getTablesContext().findTableNames(Arrays.asList(leftTableJoin,
rightTableJoin), schema)).thenReturn(createColumnTableNameMap());
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn(DefaultDatabase.LOGIC_NAME);
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/subquery/engine/SubqueryTableContextEngine.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/subquery/engine/SubqueryTableContextEngine.java
index 5e4eead5da6..ee761968b33 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/subquery/engine/SubqueryTableContextEngine.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/select/subquery/engine/SubqueryTableContextEngine.java
@@ -55,7 +55,7 @@ public final class SubqueryTableContextEngine {
result.computeIfAbsent(tableName.toLowerCase(), unused -> new
SubqueryTableContext(tableName, aliasName)).getColumnNames().add(columnName);
}
if (tableSegment instanceof JoinTableSegment &&
((ColumnProjection) each).getOwner().isPresent()) {
- Optional<String> tableName =
getTableNameByOwner(subqueryContext.getTablesContext().getSimpleTableSegments(),
((ColumnProjection) each).getOwner().get().getValue());
+ Optional<String> tableName =
getTableNameByOwner(subqueryContext.getTablesContext().getSimpleTables(),
((ColumnProjection) each).getOwner().get().getValue());
tableName.ifPresent(optional ->
result.computeIfAbsent(optional.toLowerCase(), unused -> new
SubqueryTableContext(optional, aliasName)).getColumnNames().add(columnName));
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
index e9e0157c8b0..5fa7e27ba51 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContext.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.infra.binder.context.segment.table;
import com.cedarsoftware.util.CaseInsensitiveMap;
import com.cedarsoftware.util.CaseInsensitiveSet;
import com.google.common.base.Preconditions;
+import lombok.AccessLevel;
import lombok.Getter;
import lombok.ToString;
import
org.apache.shardingsphere.infra.binder.context.segment.select.subquery.SubqueryTableContext;
@@ -52,16 +53,19 @@ import java.util.TreeSet;
@ToString
public final class TablesContext {
- private final Collection<TableSegment> tableSegments = new LinkedList<>();
+ @Getter(AccessLevel.NONE)
+ private final Collection<TableSegment> tables = new LinkedList<>();
- private final Collection<SimpleTableSegment> simpleTableSegments = new
LinkedList<>();
+ private final Collection<SimpleTableSegment> simpleTables = new
LinkedList<>();
private final Collection<String> tableNames = new CaseInsensitiveSet<>();
private final Collection<String> schemaNames = new CaseInsensitiveSet<>();
+ @Getter(AccessLevel.NONE)
private final Collection<String> databaseNames = new
CaseInsensitiveSet<>();
+ @Getter(AccessLevel.NONE)
private final Map<String, Collection<SubqueryTableContext>> subqueryTables
= new HashMap<>();
private final Map<String, IdentifierValue> tableNameAliasMap = new
HashMap<>();
@@ -70,19 +74,19 @@ public final class TablesContext {
this(Collections.singletonList(tableSegment), databaseType);
}
- public TablesContext(final Collection<SimpleTableSegment> tableSegments,
final DatabaseType databaseType) {
- this(tableSegments, Collections.emptyMap(), databaseType);
+ public TablesContext(final Collection<SimpleTableSegment> tables, final
DatabaseType databaseType) {
+ this(tables, Collections.emptyMap(), databaseType);
}
- public TablesContext(final Collection<? extends TableSegment>
tableSegments, final Map<Integer, SelectStatementContext> subqueryContexts,
final DatabaseType databaseType) {
- if (tableSegments.isEmpty()) {
+ public TablesContext(final Collection<? extends TableSegment> tables,
final Map<Integer, SelectStatementContext> subqueryContexts, final DatabaseType
databaseType) {
+ if (tables.isEmpty()) {
return;
}
- this.tableSegments.addAll(tableSegments);
- for (TableSegment each : tableSegments) {
+ this.tables.addAll(tables);
+ for (TableSegment each : tables) {
if (each instanceof SimpleTableSegment) {
SimpleTableSegment simpleTableSegment = (SimpleTableSegment)
each;
- simpleTableSegments.add(simpleTableSegment);
+ simpleTables.add(simpleTableSegment);
tableNames.add(simpleTableSegment.getTableName().getIdentifier().getValue());
simpleTableSegment.getOwner().ifPresent(optional ->
schemaNames.add(optional.getIdentifier().getValue()));
findDatabaseName(simpleTableSegment,
databaseType).ifPresent(databaseNames::add);
@@ -113,26 +117,26 @@ public final class TablesContext {
}
/**
- * Find expression table name map by column segment.
+ * Find expression table name map.
*
- * @param columns column segment collection
- * @param schema schema meta data
+ * @param columns column segments
+ * @param schema schema
* @return expression table name map
*/
- public Map<String, String> findTableNamesByColumnSegment(final
Collection<ColumnSegment> columns, final ShardingSphereSchema schema) {
- if (1 == simpleTableSegments.size()) {
- return findTableNameFromSingleTableByColumnSegment(columns);
+ public Map<String, String> findTableNames(final Collection<ColumnSegment>
columns, final ShardingSphereSchema schema) {
+ if (1 == simpleTables.size()) {
+ return findTableNameFromSingleTable(columns);
}
Map<String, String> result = new CaseInsensitiveMap<>();
- Map<String, Collection<String>> ownerColumnNames =
getOwnerColumnNamesByColumnSegment(columns);
+ Map<String, Collection<String>> ownerColumnNames =
getOwnerColumnNames(columns);
result.putAll(findTableNameFromSQL(ownerColumnNames));
- Collection<String> noOwnerColumnNames =
getNoOwnerColumnNamesByColumnSegment(columns);
+ Collection<String> noOwnerColumnNames = getNoOwnerColumnNames(columns);
result.putAll(findTableNameFromMetaData(noOwnerColumnNames, schema));
- result.putAll(findTableNameFromSubqueryByColumnSegment(columns,
result));
+ result.putAll(findTableNameFromSubquery(columns, result));
return result;
}
- private Map<String, String> findTableNameFromSubqueryByColumnSegment(final
Collection<ColumnSegment> columns, final Map<String, String> ownerTableNames) {
+ private Map<String, String> findTableNameFromSubquery(final
Collection<ColumnSegment> columns, final Map<String, String> ownerTableNames) {
if (ownerTableNames.size() == columns.size() ||
subqueryTables.isEmpty()) {
return Collections.emptyMap();
}
@@ -152,8 +156,8 @@ public final class TablesContext {
return result;
}
- private Map<String, String>
findTableNameFromSingleTableByColumnSegment(final Collection<ColumnSegment>
columns) {
- String tableName =
simpleTableSegments.iterator().next().getTableName().getIdentifier().getValue();
+ private Map<String, String> findTableNameFromSingleTable(final
Collection<ColumnSegment> columns) {
+ String tableName =
simpleTables.iterator().next().getTableName().getIdentifier().getValue();
Map<String, String> result = new CaseInsensitiveMap<>();
for (ColumnSegment each : columns) {
result.putIfAbsent(each.getExpression(), tableName);
@@ -161,7 +165,7 @@ public final class TablesContext {
return result;
}
- private Map<String, Collection<String>>
getOwnerColumnNamesByColumnSegment(final Collection<ColumnSegment> columns) {
+ private Map<String, Collection<String>> getOwnerColumnNames(final
Collection<ColumnSegment> columns) {
Map<String, Collection<String>> result = new CaseInsensitiveMap<>();
for (ColumnSegment each : columns) {
if (!each.getOwner().isPresent()) {
@@ -176,8 +180,8 @@ public final class TablesContext {
if (ownerColumnNames.isEmpty()) {
return Collections.emptyMap();
}
- Map<String, String> result = new
LinkedHashMap<>(simpleTableSegments.size(), 1F);
- for (SimpleTableSegment each : simpleTableSegments) {
+ Map<String, String> result = new LinkedHashMap<>(simpleTables.size(),
1F);
+ for (SimpleTableSegment each : simpleTables) {
String tableName = each.getTableName().getIdentifier().getValue();
if (ownerColumnNames.containsKey(tableName)) {
ownerColumnNames.get(tableName).forEach(column ->
result.put(column, tableName));
@@ -195,7 +199,7 @@ public final class TablesContext {
return Collections.emptyMap();
}
Map<String, String> result = new
LinkedHashMap<>(noOwnerColumnNames.size(), 1F);
- for (SimpleTableSegment each : simpleTableSegments) {
+ for (SimpleTableSegment each : simpleTables) {
String tableName = each.getTableName().getIdentifier().getValue();
for (String columnName : schema.getAllColumnNames(tableName)) {
if (noOwnerColumnNames.contains(columnName)) {
@@ -206,7 +210,7 @@ public final class TablesContext {
return result;
}
- private Collection<String> getNoOwnerColumnNamesByColumnSegment(final
Collection<ColumnSegment> columns) {
+ private Collection<String> getNoOwnerColumnNames(final
Collection<ColumnSegment> columns) {
Collection<String> result = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
for (ColumnSegment each : columns) {
if (!each.getOwner().isPresent()) {
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/AlterViewStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/AlterViewStatementContext.java
index 3326cf5297c..c01608ce44d 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/AlterViewStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/AlterViewStatementContext.java
@@ -60,6 +60,6 @@ public final class AlterViewStatementContext extends
CommonSQLStatementContext i
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CommentStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CommentStatementContext.java
index cf7fba1caa7..b53abb7e518 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CommentStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CommentStatementContext.java
@@ -47,6 +47,6 @@ public final class CommentStatementContext extends
CommonSQLStatementContext imp
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CreateViewStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CreateViewStatementContext.java
index 1335febc248..c5098bdeda0 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CreateViewStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CreateViewStatementContext.java
@@ -49,6 +49,6 @@ public final class CreateViewStatementContext extends
CommonSQLStatementContext
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
index f27ddd2f6aa..e6fa0406f4f 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/CursorStatementContext.java
@@ -78,7 +78,7 @@ public final class CursorStatementContext extends
CommonSQLStatementContext impl
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
@Override
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/DropViewStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/DropViewStatementContext.java
index beadc699222..d33b54e431f 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/DropViewStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/ddl/DropViewStatementContext.java
@@ -46,6 +46,6 @@ public final class DropViewStatementContext extends
CommonSQLStatementContext im
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/CopyStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/CopyStatementContext.java
index b38791cae73..00445376265 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/CopyStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/CopyStatementContext.java
@@ -46,6 +46,6 @@ public final class CopyStatementContext extends
CommonSQLStatementContext implem
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/DeleteStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/DeleteStatementContext.java
index 3fb5868ec3e..9d3a830b405 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/DeleteStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/DeleteStatementContext.java
@@ -91,7 +91,7 @@ public final class DeleteStatementContext extends
CommonSQLStatementContext impl
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
@Override
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
index 6e0227be195..9406cb3fac5 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/InsertStatementContext.java
@@ -266,7 +266,7 @@ public final class InsertStatementContext extends
CommonSQLStatementContext impl
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
@Override
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadDataStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadDataStatementContext.java
index efe9ef8b561..5e174a9cb72 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadDataStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadDataStatementContext.java
@@ -46,6 +46,6 @@ public final class LoadDataStatementContext extends
CommonSQLStatementContext im
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadXMLStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadXMLStatementContext.java
index 856786db040..96a2de8fc06 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadXMLStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/LoadXMLStatementContext.java
@@ -46,6 +46,6 @@ public final class LoadXMLStatementContext extends
CommonSQLStatementContext imp
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
}
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
index b8749baea25..d9cc9bd3c2b 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/SelectStatementContext.java
@@ -140,7 +140,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
private Collection<TableMapperRuleAttribute>
getTableMapperRuleAttributes(final ShardingSphereMetaData metaData, final
String databaseName) {
if (null == databaseName) {
-
ShardingSpherePreconditions.checkMustEmpty(tablesContext.getSimpleTableSegments(),
NoDatabaseSelectedException::new);
+
ShardingSpherePreconditions.checkMustEmpty(tablesContext.getSimpleTables(),
NoDatabaseSelectedException::new);
return Collections.emptyList();
}
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
@@ -346,7 +346,7 @@ public final class SelectStatementContext extends
CommonSQLStatementContext impl
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
@Override
diff --git
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
index da44a84703c..ee35aba9313 100644
---
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
+++
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
@@ -69,7 +69,7 @@ public final class UpdateStatementContext extends
CommonSQLStatementContext impl
@Override
public Collection<SimpleTableSegment> getAllTables() {
- return tablesContext.getSimpleTableSegments();
+ return tablesContext.getSimpleTables();
}
@Override
diff --git
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContextTest.java
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContextTest.java
index 7669110ca53..71f0c9d323c 100644
---
a/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContextTest.java
+++
b/infra/binder/src/test/java/org/apache/shardingsphere/infra/binder/context/segment/table/TablesContextTest.java
@@ -63,7 +63,6 @@ class TablesContextTest {
assertThat(tablesContext.getDatabaseName(), is(Optional.of("schema")));
assertThat(tablesContext.getSchemaName(), is(Optional.of("schema")));
assertThat(tablesContext.getTableNames(),
is(Collections.singleton("tbl")));
- assertTrue(tablesContext.getSubqueryTables().isEmpty());
}
@Test
@@ -71,7 +70,7 @@ class TablesContextTest {
SimpleTableSegment tableSegment = createTableSegment("table_1",
"tbl_1");
ColumnSegment columnSegment = createColumnSegment(null, "col");
Map<String, String> actual = new
TablesContext(Collections.singletonList(tableSegment),
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"))
-
.findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
+ .findTableNames(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
assertFalse(actual.isEmpty());
assertThat(actual.get("col"), is("table_1"));
}
@@ -82,7 +81,7 @@ class TablesContextTest {
SimpleTableSegment tableSegment2 = createTableSegment("table_2",
"tbl_2");
ColumnSegment columnSegment = createColumnSegment("table_1", "col");
Map<String, String> actual = new
TablesContext(Arrays.asList(tableSegment1, tableSegment2),
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"))
-
.findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
+ .findTableNames(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
assertFalse(actual.isEmpty());
assertThat(actual.get("table_1.col"), is("table_1"));
}
@@ -93,7 +92,7 @@ class TablesContextTest {
SimpleTableSegment tableSegment2 = createTableSegment("table_2",
"tbl_2");
ColumnSegment columnSegment = createColumnSegment(null, "col");
Map<String, String> actual = new
TablesContext(Arrays.asList(tableSegment1, tableSegment2),
TypedSPILoader.getService(DatabaseType.class, "FIXTURE"))
-
.findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
+ .findTableNames(Collections.singletonList(columnSegment),
mock(ShardingSphereSchema.class));
assertTrue(actual.isEmpty());
}
@@ -105,7 +104,7 @@ class TablesContextTest {
when(schema.getAllColumnNames("table_1")).thenReturn(Collections.singletonList("col"));
ColumnSegment columnSegment = createColumnSegment(null, "col");
Map<String, String> actual = new
TablesContext(Arrays.asList(tableSegment1, tableSegment2),
- TypedSPILoader.getService(DatabaseType.class,
"FIXTURE")).findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
schema);
+ TypedSPILoader.getService(DatabaseType.class,
"FIXTURE")).findTableNames(Collections.singletonList(columnSegment), schema);
assertFalse(actual.isEmpty());
assertThat(actual.get("col"), is("table_1"));
}
@@ -119,7 +118,7 @@ class TablesContextTest {
ShardingSphereSchema schema = new
ShardingSphereSchema(Stream.of(table).collect(Collectors.toMap(ShardingSphereTable::getName,
value -> value)), Collections.emptyMap());
ColumnSegment columnSegment = createColumnSegment(null, "COL");
Map<String, String> actual = new
TablesContext(Arrays.asList(tableSegment1, tableSegment2),
- TypedSPILoader.getService(DatabaseType.class,
"FIXTURE")).findTableNamesByColumnSegment(Collections.singletonList(columnSegment),
schema);
+ TypedSPILoader.getService(DatabaseType.class,
"FIXTURE")).findTableNames(Collections.singletonList(columnSegment), schema);
assertFalse(actual.isEmpty());
assertThat(actual.get("col"), is("TABLE_1"));
}
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
index 83c318d8fde..586dc208e0c 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
@@ -131,10 +131,10 @@ public final class PipelineDDLGenerator {
}
private void appendFromIndexAndConstraint(final Map<SQLSegment, String>
replaceMap, final String targetTableName, final SQLStatementContext
sqlStatementContext) {
- if (!(sqlStatementContext instanceof TableAvailable) ||
((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTableSegments().isEmpty()) {
+ if (!(sqlStatementContext instanceof TableAvailable) ||
((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTables().isEmpty()) {
return;
}
- TableNameSegment tableNameSegment = ((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTableSegments().iterator().next().getTableName();
+ TableNameSegment tableNameSegment = ((TableAvailable)
sqlStatementContext).getTablesContext().getSimpleTables().iterator().next().getTableName();
if
(!tableNameSegment.getIdentifier().getValue().equals(targetTableName)) {
if (sqlStatementContext instanceof IndexAvailable) {
for (IndexSegment each : ((IndexAvailable)
sqlStatementContext).getIndexes()) {
@@ -187,14 +187,14 @@ public final class PipelineDDLGenerator {
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
if (sqlStatementContext instanceof CreateTableStatementContext ||
sqlStatementContext instanceof CommentStatementContext
|| sqlStatementContext instanceof CreateIndexStatementContext
|| sqlStatementContext instanceof AlterTableStatementContext) {
- if
(sqlStatementContext.getTablesContext().getSimpleTableSegments().isEmpty()) {
+ if
(sqlStatementContext.getTablesContext().getSimpleTables().isEmpty()) {
return sql;
}
if
(sqlStatementContext.getTablesContext().getSchemaName().isPresent()) {
return sql;
}
Map<SQLSegment, String> replaceMap = new
TreeMap<>(Comparator.comparing(SQLSegment::getStartIndex));
- TableNameSegment tableNameSegment =
sqlStatementContext.getTablesContext().getSimpleTableSegments().iterator().next().getTableName();
+ TableNameSegment tableNameSegment =
sqlStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName();
replaceMap.put(tableNameSegment, prefix +
tableNameSegment.getIdentifier().getValue());
return doDecorateActualTable(replaceMap, sql);
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
index 9866f43b904..92eba705e0a 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
@@ -166,7 +166,7 @@ public final class SingleRule implements DatabaseRule {
* @return qualified tables
*/
public Collection<QualifiedTable> getQualifiedTables(final
SQLStatementContext sqlStatementContext, final ShardingSphereDatabase database)
{
- Collection<QualifiedTable> result = getQualifiedTables(database,
protocolType, sqlStatementContext.getTablesContext().getSimpleTableSegments());
+ Collection<QualifiedTable> result = getQualifiedTables(database,
protocolType, sqlStatementContext.getTablesContext().getSimpleTables());
if (result.isEmpty() && sqlStatementContext instanceof IndexAvailable)
{
result = IndexMetaDataUtils.getTableNames(database, protocolType,
((IndexAvailable) sqlStatementContext).getIndexes());
}