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 adcdc9e6960 Merge ShardingSphereSchema.getAllTableNames and
getAllTables (#33849)
adcdc9e6960 is described below
commit adcdc9e6960c9de7c20d21405263ed0130cd1da4
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Nov 30 18:26:02 2024 +0800
Merge ShardingSphereSchema.getAllTableNames and getAllTables (#33849)
---
.../sql/util/ShardingSupportedCheckUtils.java | 2 +-
.../sharding/rewrite/token/pojo/IndexToken.java | 7 +++---
.../ddl/ShardingDropIndexRouteContextChecker.java | 7 +++---
.../ShardingAlterIndexSupportedCheckerTest.java | 9 +++-----
.../ddl/ShardingDropIndexSupportedCheckerTest.java | 7 +++---
.../rewrite/token/pojo/IndexTokenTest.java | 8 ++++++-
.../ShardingDropIndexRouteContextCheckerTest.java | 6 +++--
.../ShardingTableBroadcastRouteEngineTest.java | 9 +++++---
.../database/schema/util/IndexMetaDataUtils.java | 7 +++---
.../schema/model/ShardingSphereSchemaTest.java | 8 -------
.../pipeline/cdc/util/CDCSchemaTableUtils.java | 26 +++++++++++++---------
.../schema/SingleDropSchemaSupportedChecker.java | 2 +-
.../executor/utils/StatisticsAssembleUtils.java | 4 ++--
.../index/AlterIndexStatementSchemaRefresher.java | 2 +-
.../StandaloneMetaDataManagerPersistService.java | 18 ++++++++-------
.../ral/queryable/ShowTableMetaDataExecutor.java | 4 ++--
16 files changed, 66 insertions(+), 60 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/util/ShardingSupportedCheckUtils.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/util/ShardingSupportedCheckUtils.java
index 90ce84fd319..d3a6123c356 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/util/ShardingSupportedCheckUtils.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/checker/sql/util/ShardingSupportedCheckUtils.java
@@ -42,7 +42,7 @@ public final class ShardingSupportedCheckUtils {
* @return whether schema contains index or not
*/
public static boolean isSchemaContainsIndex(final ShardingSphereSchema
schema, final IndexSegment index) {
- return schema.getAllTableNames().stream().anyMatch(each ->
schema.getTable(each).containsIndex(index.getIndexName().getIdentifier().getValue()));
+ return schema.getAllTables().stream().anyMatch(each ->
each.containsIndex(index.getIndexName().getIdentifier().getValue()));
}
/**
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
index ea5c4aa6d25..6bf399f7a9b 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexToken.java
@@ -21,6 +21,7 @@ import lombok.Getter;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateIndexStatementContext;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtils;
import
org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.RouteUnitAware;
import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
@@ -79,9 +80,9 @@ public final class IndexToken extends SQLToken implements
Substitutable, RouteUn
}
private Optional<String> findLogicTableNameFromMetaData(final String
logicIndexName) {
- for (String each : schema.getAllTableNames()) {
- if (schema.getTable(each).containsIndex(logicIndexName)) {
- return Optional.of(each);
+ for (ShardingSphereTable each : schema.getAllTables()) {
+ if (each.containsIndex(logicIndexName)) {
+ return Optional.of(each.getName());
}
}
return Optional.empty();
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
index cadc11463fa..23d3ab11805 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextChecker.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.session.query.QueryContext;
import
org.apache.shardingsphere.sharding.checker.sql.util.ShardingSupportedCheckUtils;
@@ -49,10 +50,8 @@ public final class ShardingDropIndexRouteContextChecker
implements ShardingRoute
} else {
String defaultSchemaName = new
DatabaseTypeRegistry(queryContext.getSqlStatementContext().getDatabaseType()).getDefaultSchemaName(database.getName());
for (IndexSegment each : indexSegments) {
- ShardingSphereSchema schema = each.getOwner().map(optional ->
optional.getIdentifier().getValue())
- .map(database::getSchema).orElseGet(() ->
database.getSchema(defaultSchemaName));
- logicTableName =
- schema.getAllTableNames().stream().filter(tableName ->
schema.getTable(tableName).containsIndex(each.getIndexName().getIdentifier().getValue())).findFirst();
+ ShardingSphereSchema schema = each.getOwner().map(optional ->
optional.getIdentifier().getValue()).map(database::getSchema).orElseGet(() ->
database.getSchema(defaultSchemaName));
+ logicTableName = schema.getAllTables().stream().filter(table
->
table.containsIndex(each.getIndexName().getIdentifier().getValue())).findFirst().map(ShardingSphereTable::getName);
logicTableName.ifPresent(optional ->
validateDropIndexRouteUnit(shardingRule, routeContext, indexSegments,
optional));
}
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingAlterIndexSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingAlterIndexSupportedCheckerTest.java
index 6bfba6b808d..52b9691129a 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingAlterIndexSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingAlterIndexSupportedCheckerTest.java
@@ -58,8 +58,7 @@ class ShardingAlterIndexSupportedCheckerTest {
sqlStatement.setRenameIndex(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
ShardingSphereTable table = mock(ShardingSphereTable.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-
when(schema.getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
- when(schema.getTable("t_order")).thenReturn(table);
+ when(schema.getAllTables()).thenReturn(Collections.singleton(table));
when(table.containsIndex("t_order_index")).thenReturn(true);
when(table.containsIndex("t_order_index_new")).thenReturn(false);
assertDoesNotThrow(() -> new
ShardingAlterIndexSupportedChecker().check(shardingRule, database, schema, new
AlterIndexStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME)));
@@ -71,7 +70,6 @@ class ShardingAlterIndexSupportedCheckerTest {
sqlStatement.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0,
0, new IdentifierValue("t_order_index"))));
sqlStatement.setRenameIndex(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(database.getSchema("public").getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
when(database.getSchema("public").getTable("t_order")).thenReturn(table);
assertThrows(IndexNotExistedException.class, () -> new
ShardingAlterIndexSupportedChecker().check(shardingRule, database,
mock(ShardingSphereSchema.class),
new AlterIndexStatementContext(sqlStatement,
DefaultDatabase.LOGIC_NAME)));
@@ -82,10 +80,9 @@ class ShardingAlterIndexSupportedCheckerTest {
PostgreSQLAlterIndexStatement sqlStatement = new
PostgreSQLAlterIndexStatement();
sqlStatement.setIndex(new IndexSegment(0, 0, new IndexNameSegment(0,
0, new IdentifierValue("t_order_index"))));
sqlStatement.setRenameIndex(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
- ShardingSphereTable table = mock(ShardingSphereTable.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-
when(schema.getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
- when(schema.getTable("t_order")).thenReturn(table);
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(schema.getAllTables()).thenReturn(Collections.singleton(table));
when(table.containsIndex("t_order_index")).thenReturn(true);
when(table.containsIndex("t_order_index_new")).thenReturn(true);
assertThrows(DuplicateIndexException.class,
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropIndexSupportedCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropIndexSupportedCheckerTest.java
index 43bcadd40d9..f298c0de897 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropIndexSupportedCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/checker/sql/ddl/ShardingDropIndexSupportedCheckerTest.java
@@ -55,10 +55,9 @@ class ShardingDropIndexSupportedCheckerTest {
PostgreSQLDropIndexStatement sqlStatement = new
PostgreSQLDropIndexStatement(false);
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
- ShardingSphereTable table = mock(ShardingSphereTable.class);
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-
when(schema.getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
- when(schema.getTable("t_order")).thenReturn(table);
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(schema.getAllTables()).thenReturn(Collections.singleton(table));
when(table.containsIndex("t_order_index")).thenReturn(true);
when(table.containsIndex("t_order_index_new")).thenReturn(true);
assertDoesNotThrow(() -> new
ShardingDropIndexSupportedChecker().check(shardingRule, database, schema, new
DropIndexStatementContext(sqlStatement, DefaultDatabase.LOGIC_NAME)));
@@ -70,7 +69,7 @@ class ShardingDropIndexSupportedCheckerTest {
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(database.getSchema("public").getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
+
when(database.getSchema("public").getAllTables()).thenReturn(Collections.singleton(table));
when(database.getSchema("public").getTable("t_order")).thenReturn(table);
assertThrows(IndexNotExistedException.class,
() -> new
ShardingDropIndexSupportedChecker().check(shardingRule, database,
mock(ShardingSphereSchema.class), new DropIndexStatementContext(sqlStatement,
DefaultDatabase.LOGIC_NAME)));
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
index 2d778e5a2d9..b1e20f6d9e9 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/IndexTokenTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CreateIndexS
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
@@ -71,7 +72,12 @@ class IndexTokenTest {
private ShardingSphereSchema mockSchema() {
ShardingSphereSchema result = mock(ShardingSphereSchema.class,
RETURNS_DEEP_STUBS);
- when(result.getAllTableNames()).thenReturn(Arrays.asList("no_tbl",
"foo_tbl"));
+ ShardingSphereTable table1 = mock(ShardingSphereTable.class);
+ when(table1.getName()).thenReturn("no_tbl");
+ ShardingSphereTable table2 = mock(ShardingSphereTable.class);
+ when(table2.getName()).thenReturn("foo_tbl");
+ when(table2.containsIndex("foo_idx")).thenReturn(true);
+ when(result.getAllTables()).thenReturn(Arrays.asList(table1, table2));
when(result.getTable("foo_tbl").containsIndex("foo_idx")).thenReturn(true);
return result;
}
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
index 21fa1aaa3d5..c35d7007b4a 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/ddl/ShardingDropIndexRouteContextCheckerTest.java
@@ -70,7 +70,8 @@ class ShardingDropIndexRouteContextCheckerTest {
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(database.getSchema("public").getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
+ when(table.getName()).thenReturn("t_order");
+
when(database.getSchema("public").getAllTables()).thenReturn(Collections.singleton(table));
when(database.getSchema("public").getTable("t_order")).thenReturn(table);
when(table.containsIndex("t_order_index")).thenReturn(true);
when(shardingRule.isShardingTable("t_order")).thenReturn(true);
@@ -89,7 +90,8 @@ class ShardingDropIndexRouteContextCheckerTest {
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index"))));
sqlStatement.getIndexes().add(new IndexSegment(0, 0, new
IndexNameSegment(0, 0, new IdentifierValue("t_order_index_new"))));
ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(database.getSchema("public").getAllTableNames()).thenReturn(Collections.singletonList("t_order"));
+ when(table.getName()).thenReturn("t_order");
+
when(database.getSchema("public").getAllTables()).thenReturn(Collections.singleton(table));
when(database.getSchema("public").getTable("t_order")).thenReturn(table);
when(table.containsIndex("t_order_index")).thenReturn(true);
when(shardingRule.isShardingTable("t_order")).thenReturn(true);
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRouteEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRouteEngineTest.java
index 3357d2e1568..8ba6026c290 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRouteEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRouteEngineTest.java
@@ -29,6 +29,7 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteMapper;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
@@ -85,7 +86,10 @@ class ShardingTableBroadcastRouteEngineTest {
@Test
void assertRouteForDropIndexStatement() {
ShardingSphereSchema schema = mock(ShardingSphereSchema.class,
RETURNS_DEEP_STUBS);
-
when(schema.getAllTableNames()).thenReturn(Collections.singleton("t_order"));
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(table.getName()).thenReturn("t_order");
+ when(table.containsIndex("t_order")).thenReturn(true);
+ when(schema.getAllTables()).thenReturn(Collections.singleton(table));
when(schema.getTable(anyString()).containsIndex(anyString())).thenReturn(true);
IndexSegment segment = mock(IndexSegment.class, RETURNS_DEEP_STUBS);
when(segment.getIndexName().getIdentifier().getValue()).thenReturn("t_order");
@@ -96,8 +100,7 @@ class ShardingTableBroadcastRouteEngineTest {
when(sqlStatementContext.getDatabaseType()).thenReturn(databaseType);
when(((IndexAvailable)
sqlStatementContext).getIndexes()).thenReturn(Collections.singletonList(segment));
Map<String, ShardingSphereSchema> schemas =
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, schema);
- ShardingSphereDatabase database = new
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME,
- databaseType, mock(ResourceMetaData.class),
mock(RuleMetaData.class), schemas);
+ ShardingSphereDatabase database = new
ShardingSphereDatabase(DefaultDatabase.LOGIC_NAME, databaseType,
mock(ResourceMetaData.class), mock(RuleMetaData.class), schemas);
ShardingTableBroadcastRouteEngine shardingTableBroadcastRouteEngine =
new ShardingTableBroadcastRouteEngine(database, sqlStatementContext,
tableNames);
RouteContext routeContext =
shardingTableBroadcastRouteEngine.route(createShardingRule());
assertThat(routeContext.getActualDataSourceNames().size(), is(2));
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
index d6de79b216e..0a9eee33eca 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtils.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.ddl.index.IndexSegment;
import
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
@@ -99,9 +100,9 @@ public final class IndexMetaDataUtils {
}
private static Optional<String> findLogicTableNameFromMetaData(final
ShardingSphereSchema schema, final String logicIndexName) {
- for (String each : schema.getAllTableNames()) {
- if (schema.getTable(each).containsIndex(logicIndexName)) {
- return Optional.of(each);
+ for (ShardingSphereTable each : schema.getAllTables()) {
+ if (each.containsIndex(logicIndexName)) {
+ return Optional.of(each.getName());
}
}
return Optional.empty();
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchemaTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchemaTest.java
index 84ce48d1f8e..5ba04348813 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchemaTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/model/ShardingSphereSchemaTest.java
@@ -21,7 +21,6 @@ import
org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.junit.jupiter.api.Test;
import java.util.Collections;
-import java.util.HashSet;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -32,13 +31,6 @@ import static org.mockito.Mockito.when;
class ShardingSphereSchemaTest {
- @Test
- void assertGetAllTableNames() {
- ShardingSphereTable table = mock(ShardingSphereTable.class);
- when(table.getName()).thenReturn("tbl");
- assertThat(new ShardingSphereSchema(DefaultDatabase.LOGIC_NAME,
Collections.singleton(table), Collections.emptyList()).getAllTableNames(),
is(new HashSet<>(Collections.singleton("tbl"))));
- }
-
@Test
void assertGetTable() {
ShardingSphereTable table = mock(ShardingSphereTable.class);
diff --git
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
index 95bc0727ec5..654955097e8 100644
---
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
+++
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/util/CDCSchemaTableUtils.java
@@ -24,11 +24,12 @@ import
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDa
import
org.apache.shardingsphere.infra.database.core.metadata.database.system.DialectSystemDatabase;
import
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import java.util.Collection;
import java.util.Collections;
@@ -38,6 +39,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
+import java.util.stream.Collectors;
/**
* CDC schema table utility class.
@@ -80,9 +82,8 @@ public final class CDCSchemaTableUtils {
Map<String, Set<String>> result = new
HashMap<>(database.getSchemas().size(), 1F);
for (Entry<String, ShardingSphereSchema> entry :
database.getSchemas().entrySet()) {
if (!systemSchemas.contains(entry.getKey())) {
- entry.getValue().getAllTableNames().forEach(each ->
result.computeIfAbsent(entry.getKey(), ignored -> new HashSet<>()).add(each));
+ entry.getValue().getAllTables().forEach(each ->
result.computeIfAbsent(entry.getKey(), ignored -> new
HashSet<>()).add(each.getName()));
}
-
}
return result;
}
@@ -91,20 +92,23 @@ public final class CDCSchemaTableUtils {
Map<String, Set<String>> result = new
HashMap<>(database.getSchemas().size(), 1F);
for (Entry<String, ShardingSphereSchema> entry :
database.getSchemas().entrySet()) {
if (!systemSchemas.contains(entry.getKey())) {
- entry.getValue().getAllTableNames().stream().filter(each ->
each.equals(table.getTable())).findFirst()
- .ifPresent(optional ->
result.computeIfAbsent(entry.getKey(), ignored -> new
HashSet<>()).add(optional));
+ entry.getValue().getAllTables().stream().filter(each ->
each.getName().equals(table.getTable())).findFirst()
+ .ifPresent(optional ->
result.computeIfAbsent(entry.getKey(), ignored -> new
HashSet<>()).add(optional.getName()));
}
}
return result;
}
- private static Map<String, Set<String>>
parseTableExpressionWithAllTable(final ShardingSphereDatabase database, final
SchemaTable each) {
+ private static Map<String, Set<String>>
parseTableExpressionWithAllTable(final ShardingSphereDatabase database, final
SchemaTable schemaTable) {
DialectDatabaseMetaData dialectDatabaseMetaData = new
DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData();
- String schemaName = each.getSchema().isEmpty() ?
dialectDatabaseMetaData.getDefaultSchema().orElseThrow(() -> new
IllegalStateException("Default schema should exist.")) : each.getSchema();
+ String schemaName = schemaTable.getSchema().isEmpty()
+ ? dialectDatabaseMetaData.getDefaultSchema().orElseThrow(() ->
new IllegalStateException("Default schema should exist."))
+ : schemaTable.getSchema();
ShardingSphereSchema schema = database.getSchema(schemaName);
- ShardingSpherePreconditions.checkNotNull(schema, () -> new
SchemaNotFoundException(each.getSchema()));
- Map<String, Set<String>> result = new
HashMap<>(schema.getAllTableNames().size(), 1F);
- schema.getAllTableNames().forEach(tableName ->
result.computeIfAbsent(schemaName, ignored -> new HashSet<>()).add(tableName));
+ ShardingSpherePreconditions.checkNotNull(schema, () -> new
SchemaNotFoundException(schemaTable.getSchema()));
+ Collection<ShardingSphereTable> tables = schema.getAllTables();
+ Map<String, Set<String>> result = new HashMap<>(tables.size(), 1F);
+ tables.forEach(each -> result.computeIfAbsent(schemaName, ignored ->
new HashSet<>()).add(each.getName()));
return result;
}
@@ -117,7 +121,7 @@ public final class CDCSchemaTableUtils {
*/
public static Collection<String> parseTableExpressionWithoutSchema(final
ShardingSphereDatabase database, final List<String> tableNames) {
ShardingSphereSchema schema = database.getSchema(database.getName());
- Set<String> allTableNames = null == schema ? Collections.emptySet() :
new HashSet<>(schema.getAllTableNames());
+ Set<String> allTableNames = null == schema ? Collections.emptySet() :
new
HashSet<>(schema.getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet()));
return tableNames.stream().anyMatch("*"::equals) ? allTableNames : new
HashSet<>(tableNames);
}
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
index c8ab2bf4800..50262062a94 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/checker/sql/schema/SingleDropSchemaSupportedChecker.java
@@ -46,7 +46,7 @@ public final class SingleDropSchemaSupportedChecker
implements SupportedSQLCheck
String schemaName = each.getValue();
ShardingSphereSchema schema = database.getSchema(schemaName);
ShardingSpherePreconditions.checkNotNull(schema, () -> new
SchemaNotFoundException(schemaName));
- ShardingSpherePreconditions.checkState(containsCascade ||
schema.getAllTableNames().isEmpty(), () -> new
DropNotEmptySchemaException(schemaName));
+ ShardingSpherePreconditions.checkState(containsCascade ||
schema.getAllTables().isEmpty(), () -> new
DropNotEmptySchemaException(schemaName));
}
}
}
diff --git
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
index 5c4b0f43074..a8f3db81cbe 100644
---
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
+++
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
@@ -73,10 +73,10 @@ public final class StatisticsAssembleUtils {
private static void assembleOpenGaussTableData(final
ShardingSphereTableData tableData, final Map<String, ShardingSphereSchema>
schemas) {
for (Entry<String, ShardingSphereSchema> entry : schemas.entrySet()) {
- for (String each : entry.getValue().getAllTableNames()) {
+ for (ShardingSphereTable each : entry.getValue().getAllTables()) {
Object[] rows = new Object[10];
rows[0] = entry.getKey();
- rows[1] = each;
+ rows[1] = each.getName();
tableData.getRows().add(new
ShardingSphereRowData(Arrays.asList(rows)));
}
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/index/AlterIndexStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/index/AlterIndexStatementSchemaRefresher.java
index 9f6cc68119c..f0501f1aff0 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/index/AlterIndexStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/index/AlterIndexStatementSchemaRefresher.java
@@ -62,7 +62,7 @@ public final class AlterIndexStatementSchemaRefresher
implements MetaDataRefresh
}
private Optional<String> findLogicTableName(final ShardingSphereSchema
schema, final String indexName) {
- return schema.getAllTableNames().stream().filter(each ->
schema.getTable(each).containsIndex(indexName)).findFirst();
+ return schema.getAllTables().stream().filter(each ->
each.containsIndex(indexName)).findFirst().map(ShardingSphereTable::getName);
}
private ShardingSphereTable newShardingSphereTable(final
ShardingSphereTable table) {
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
index 09abed96a5a..6de859597db 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/StandaloneMetaDataManagerPersistService.java
@@ -57,6 +57,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
+import java.util.stream.Collectors;
/**
* Standalone meta data manager persist service.
@@ -119,15 +120,15 @@ public final class
StandaloneMetaDataManagerPersistService implements MetaDataMa
private void putSchemaMetaData(final ShardingSphereDatabase database,
final String schemaName, final String renameSchemaName, final String
logicDataSourceName) {
ShardingSphereSchema schema = database.getSchema(schemaName);
database.addSchema(renameSchemaName, schema);
- addDataNode(database, logicDataSourceName, schemaName,
schema.getAllTableNames());
+ addDataNode(database, logicDataSourceName, schemaName,
schema.getAllTables());
}
- private void addDataNode(final ShardingSphereDatabase database, final
String logicDataSourceName, final String schemaName, final Collection<String>
tobeAddedTableNames) {
- tobeAddedTableNames.forEach(each -> {
- if (!Strings.isNullOrEmpty(logicDataSourceName) &&
TableRefreshUtils.isSingleTable(each, database)) {
-
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule
-> rule.put(logicDataSourceName, schemaName, each));
+ private void addDataNode(final ShardingSphereDatabase database, final
String logicDataSourceName, final String schemaName, final
Collection<ShardingSphereTable> tobeAddedTables) {
+ for (ShardingSphereTable each : tobeAddedTables) {
+ if (!Strings.isNullOrEmpty(logicDataSourceName) &&
TableRefreshUtils.isSingleTable(each.getName(), database)) {
+
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule
-> rule.put(logicDataSourceName, schemaName, each.getName()));
}
- });
+ }
}
private void addDataNode(final ShardingSphereDatabase database, final
String logicDataSourceName, final String schemaName, final
Collection<ShardingSphereTable> toBeAddedTables,
@@ -159,7 +160,8 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
private void removeSchemaMetaData(final ShardingSphereDatabase database,
final String schemaName) {
ShardingSphereSchema schema = new ShardingSphereSchema(schemaName,
database.getSchema(schemaName).getAllTables(),
database.getSchema(schemaName).getAllViews());
database.dropSchema(schemaName);
-
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
Collections.singletonList(schemaName), schema.getAllTableNames());
+
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
Collections.singleton(schemaName),
+
schema.getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet()));
}
private void removeDataNode(final Collection<MutableDataNodeRuleAttribute>
ruleAttributes, final Collection<String> schemaNames, final Collection<String>
tobeRemovedTables) {
@@ -196,7 +198,7 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
for (String each : schemaNames) {
ShardingSphereSchema schema = new ShardingSphereSchema(each,
database.getSchema(each).getAllTables(),
database.getSchema(each).getAllViews());
database.dropSchema(each);
- Optional.of(schema).ifPresent(optional ->
tobeRemovedTables.addAll(optional.getAllTableNames()));
+ Optional.of(schema).ifPresent(optional ->
tobeRemovedTables.addAll(optional.getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet())));
tobeRemovedSchemas.add(each.toLowerCase());
}
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
new HashSet<>(tobeRemovedSchemas), new HashSet<>(tobeRemovedTables));
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
index 69f6cf61c7b..d727832d01f 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
@@ -52,8 +52,8 @@ public final class ShowTableMetaDataExecutor implements
DistSQLQueryExecutor<Sho
public Collection<LocalDataQueryResultRow> getRows(final
ShowTableMetaDataStatement sqlStatement, final ContextManager contextManager) {
String defaultSchema = new
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
ShardingSphereSchema schema = database.getSchema(defaultSchema);
- return sqlStatement.getTableNames().stream().filter(each ->
schema.getAllTableNames().contains(each.toLowerCase()))
- .map(each -> buildTableRows(database.getName(), schema,
each.toLowerCase())).flatMap(Collection::stream).collect(Collectors.toList());
+ return sqlStatement.getTableNames().stream()
+ .filter(schema::containsTable).map(each ->
buildTableRows(database.getName(), schema,
each.toLowerCase())).flatMap(Collection::stream).collect(Collectors.toList());
}
private Collection<LocalDataQueryResultRow> buildTableRows(final String
databaseName, final ShardingSphereSchema schema, final String tableName) {