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 f5b7cc4eb64 Rollback QualifiedSchema and QualifiedTable (#34680) f5b7cc4eb64 is described below commit f5b7cc4eb6434ce35c55cacb05f6a0b82f90c649 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Feb 15 19:18:43 2025 +0800 Rollback QualifiedSchema and QualifiedTable (#34680) * Refactor QualifiedTable * Rollback QualifiedSchema and QualifiedTable * Rollback QualifiedSchema and QualifiedTable --- .../metadata/database/schema/QualifiedSchema.java | 64 ---------------------- .../metadata/database/schema/QualifiedTable.java | 10 ++-- .../database/schema/QualifiedSchemaTest.java | 36 ------------ .../database/schema/QualifiedTableTest.java | 5 -- .../schema/util/IndexMetaDataUtilsTest.java | 2 +- .../checker/PipelineDataSourceCheckEngine.java | 2 +- .../datasource/PipelineJobDataSourcePreparer.java | 6 +- .../segment/PipelineSQLSegmentBuilder.java | 2 +- .../MigrationDataConsistencyChecker.java | 2 +- .../single/decider/SingleSQLFederationDecider.java | 4 +- .../single/route/engine/SingleRouteEngine.java | 4 +- .../shardingsphere/single/rule/SingleRule.java | 6 +- .../shardingsphere/single/rule/SingleRuleTest.java | 4 +- .../database/DatabaseMetaDataNodePathParser.java | 19 ++++++- .../DatabaseMetaDataNodePathParserTest.java | 23 ++++---- .../database/metadata/MetaDataChangedHandler.java | 19 +++---- .../type/DatabaseMetaDataChangedListener.java | 9 ++- .../test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java | 2 +- 18 files changed, 61 insertions(+), 158 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchema.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchema.java deleted file mode 100644 index 2f4c8893e97..00000000000 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchema.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.infra.metadata.database.schema; - -import lombok.EqualsAndHashCode; -import org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentifier; - -/** - * Qualified schema. - */ -@EqualsAndHashCode -public final class QualifiedSchema { - - private final ShardingSphereIdentifier databaseName; - - private final ShardingSphereIdentifier schemaName; - - public QualifiedSchema(final String schemaName) { - this(null, schemaName); - } - - public QualifiedSchema(final String databaseName, final String schemaName) { - this.databaseName = new ShardingSphereIdentifier(databaseName); - this.schemaName = new ShardingSphereIdentifier(schemaName); - } - - /** - * Get database name. - * - * @return database name - */ - public String getDatabaseName() { - return databaseName.getValue(); - } - - /** - * Get schema name. - * - * @return schema name - */ - public String getSchemaName() { - return schemaName.getValue(); - } - - @Override - public String toString() { - return null == getDatabaseName() ? getSchemaName() : String.join(".", getDatabaseName(), getSchemaName()); - } -} diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTable.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTable.java index 266bef509b4..9579c562a60 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTable.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTable.java @@ -26,12 +26,12 @@ import org.apache.shardingsphere.infra.metadata.identifier.ShardingSphereIdentif @EqualsAndHashCode public final class QualifiedTable { - private final QualifiedSchema schema; + private final ShardingSphereIdentifier schemaName; private final ShardingSphereIdentifier tableName; public QualifiedTable(final String schemaName, final String tableName) { - this.schema = new QualifiedSchema(schemaName); + this.schemaName = new ShardingSphereIdentifier(schemaName); this.tableName = new ShardingSphereIdentifier(tableName); } @@ -40,8 +40,8 @@ public final class QualifiedTable { * * @return schema name */ - public String getSchema() { - return schema.getSchemaName(); + public String getSchemaName() { + return schemaName.getValue(); } /** @@ -55,6 +55,6 @@ public final class QualifiedTable { @Override public String toString() { - return null == getSchema() ? tableName.getValue() : String.join(".", getSchema(), tableName.getValue()); + return null == getSchemaName() ? getTableName() : String.join(".", getSchemaName(), getTableName()); } } diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchemaTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchemaTest.java deleted file mode 100644 index 02e63665587..00000000000 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedSchemaTest.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.infra.metadata.database.schema; - -import org.junit.jupiter.api.Test; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -class QualifiedSchemaTest { - - @Test - void assertToStringWithoutDatabase() { - assertThat(new QualifiedSchema("foo_schema").toString(), is("foo_schema")); - } - - @Test - void assertToString() { - assertThat(new QualifiedSchema("foo_db", "foo_schema").toString(), is("foo_db.foo_schema")); - } -} diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTableTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTableTest.java index 242498a03bc..c571969aa81 100644 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTableTest.java +++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/QualifiedTableTest.java @@ -24,11 +24,6 @@ import static org.hamcrest.MatcherAssert.assertThat; class QualifiedTableTest { - @Test - void assertToStringWithoutSchema() { - assertThat(new QualifiedTable(null, "foo_tbl").toString(), is("foo_tbl")); - } - @Test void assertToString() { assertThat(new QualifiedTable("foo_schema", "foo_tbl").toString(), is("foo_schema.foo_tbl")); diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtilsTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtilsTest.java index 116ff865a93..71d5a2c6cdb 100644 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtilsTest.java +++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/IndexMetaDataUtilsTest.java @@ -79,7 +79,7 @@ class IndexMetaDataUtilsTest { IndexSegment indexSegment = new IndexSegment(0, 0, new IndexNameSegment(0, 0, new IdentifierValue("foo_idx"))); Collection<QualifiedTable> actual = IndexMetaDataUtils.getTableNames(buildDatabase(), TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), Collections.singleton(indexSegment)); assertThat(actual.size(), is(1)); - assertThat(actual.iterator().next().getSchema(), is("foo_db")); + assertThat(actual.iterator().next().getSchemaName(), is("foo_db")); assertThat(actual.iterator().next().getTableName(), is("foo_tbl")); } diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/checker/PipelineDataSourceCheckEngine.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/checker/PipelineDataSourceCheckEngine.java index 2506c934ad8..7440198ea08 100644 --- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/checker/PipelineDataSourceCheckEngine.java +++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/checker/PipelineDataSourceCheckEngine.java @@ -108,7 +108,7 @@ public final class PipelineDataSourceCheckEngine { * @throws SQLException if there's database operation failure */ public boolean checkEmptyTable(final DataSource dataSource, final QualifiedTable qualifiedTable) throws SQLException { - String sql = sqlBuilder.buildCheckEmptyTableSQL(qualifiedTable.getSchema(), qualifiedTable.getTableName()); + String sql = sqlBuilder.buildCheckEmptyTableSQL(qualifiedTable.getSchemaName(), qualifiedTable.getTableName()); try ( Connection connection = dataSource.getConnection(); PreparedStatement preparedStatement = connection.prepareStatement(sql); diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java index 27bfb8b14a7..9d127680312 100644 --- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java +++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/preparer/datasource/PipelineJobDataSourcePreparer.java @@ -77,7 +77,7 @@ public final class PipelineJobDataSourcePreparer { PipelinePrepareSQLBuilder pipelineSQLBuilder = new PipelinePrepareSQLBuilder(targetDatabaseType); Collection<String> createdSchemaNames = new HashSet<>(param.getCreateTableConfigurations().size(), 1F); for (CreateTableConfiguration each : param.getCreateTableConfigurations()) { - String targetSchemaName = each.getTargetName().getSchema(); + String targetSchemaName = each.getTargetName().getSchemaName(); if (null == targetSchemaName || targetSchemaName.equalsIgnoreCase(defaultSchema) || createdSchemaNames.contains(targetSchemaName)) { continue; } @@ -132,7 +132,7 @@ public final class PipelineJobDataSourcePreparer { private List<String> getCreateTargetTableSQL(final CreateTableConfiguration createTableConfig, final PipelineDataSourceManager dataSourceManager) throws SQLException { DatabaseType databaseType = createTableConfig.getSourceDataSourceConfig().getDatabaseType(); DataSource sourceDataSource = dataSourceManager.getDataSource(createTableConfig.getSourceDataSourceConfig()); - String schemaName = createTableConfig.getSourceName().getSchema(); + String schemaName = createTableConfig.getSourceName().getSchemaName(); String sourceTableName = createTableConfig.getSourceName().getTableName(); String targetTableName = createTableConfig.getTargetName().getTableName(); return PipelineDDLGenerator.generateLogicDDL(databaseType, sourceDataSource, schemaName, sourceTableName, targetTableName); @@ -140,7 +140,7 @@ public final class PipelineJobDataSourcePreparer { private Optional<String> decorateTargetTableSQL(final CreateTableConfiguration createTableConfig, final SQLParserEngine sqlParserEngine, final ShardingSphereMetaData metaData, final String targetDatabaseName, final String sql) { - String schemaName = createTableConfig.getSourceName().getSchema(); + String schemaName = createTableConfig.getSourceName().getSchemaName(); String targetTableName = createTableConfig.getTargetName().getTableName(); Optional<String> decoratedSQL = new PipelineDDLDecorator(metaData).decorate(databaseType, targetDatabaseName, schemaName, targetTableName, sqlParserEngine, sql); return decoratedSQL.map(String::trim).filter(trimmedSql -> !Strings.isNullOrEmpty(trimmedSql)); diff --git a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java index 095bff3e23e..2327ffb7a34 100644 --- a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java +++ b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/segment/PipelineSQLSegmentBuilder.java @@ -67,6 +67,6 @@ public final class PipelineSQLSegmentBuilder { * @return qualified table name */ public String getQualifiedTableName(final QualifiedTable qualifiedTable) { - return getQualifiedTableName(qualifiedTable.getSchema(), qualifiedTable.getTableName()); + return getQualifiedTableName(qualifiedTable.getSchemaName(), qualifiedTable.getTableName()); } } diff --git a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyChecker.java b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyChecker.java index 4f424b06bdd..06c9a484ef1 100644 --- a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyChecker.java +++ b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/check/consistency/MigrationDataConsistencyChecker.java @@ -133,7 +133,7 @@ public final class MigrationDataConsistencyChecker implements PipelineDataConsis ShardingSpherePreconditions.checkNotNull(tableMetaData, () -> new PipelineTableDataConsistencyCheckLoadingFailedException(new QualifiedTable(dataNode.getSchemaName(), dataNode.getTableName()))); List<String> columnNames = tableMetaData.getColumnNames(); - List<PipelineColumnMetaData> uniqueKeys = PipelineTableMetaDataUtils.getUniqueKeyColumns(sourceTable.getSchema(), sourceTable.getTableName(), metaDataLoader); + List<PipelineColumnMetaData> uniqueKeys = PipelineTableMetaDataUtils.getUniqueKeyColumns(sourceTable.getSchemaName(), sourceTable.getTableName(), metaDataLoader); TableInventoryCheckParameter param = new TableInventoryCheckParameter( jobConfig.getJobId(), sourceDataSource, targetDataSource, sourceTable, targetTable, columnNames, uniqueKeys, readRateLimitAlgorithm, progressContext); TableInventoryChecker tableInventoryChecker = tableChecker.buildTableInventoryChecker(param); diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java index a8c2610cb1d..e5e180db6e0 100644 --- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java +++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/decider/SingleSQLFederationDecider.java @@ -73,7 +73,7 @@ public final class SingleSQLFederationDecider implements SQLFederationDecider<Si private boolean containsView(final ShardingSphereDatabase database, final Collection<QualifiedTable> singleTables) { for (QualifiedTable each : singleTables) { - if (database.getSchema(each.getSchema()).containsView(each.getTableName())) { + if (database.getSchema(each.getSchemaName()).containsView(each.getTableName())) { return true; } } @@ -83,7 +83,7 @@ public final class SingleSQLFederationDecider implements SQLFederationDecider<Si private Collection<DataNode> getTableDataNodes(final SingleRule rule, final Collection<QualifiedTable> singleTables) { Collection<DataNode> result = new HashSet<>(singleTables.size(), 1F); for (QualifiedTable each : singleTables) { - rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(each.getSchema(), each.getTableName()).ifPresent(result::add); + rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(each.getSchemaName(), each.getTableName()).ifPresent(result::add); } return result; } diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngine.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngine.java index a201ea2efc2..4223fbc364a 100644 --- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngine.java +++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/route/engine/SingleRouteEngine.java @@ -95,7 +95,7 @@ public final class SingleRouteEngine { private void routeDDLStatement(final RouteContext routeContext, final SingleRule rule) { if (sqlStatement instanceof CreateTableStatement) { QualifiedTable table = singleTables.iterator().next(); - Optional<DataNode> dataNode = rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(table.getSchema(), table.getTableName()); + Optional<DataNode> dataNode = rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(table.getSchemaName(), table.getTableName()); boolean containsIfNotExists = ((CreateTableStatement) sqlStatement).isIfNotExists(); if (dataNode.isPresent()) { routeDDLStatementWithExistTable(routeContext, containsIfNotExists, dataNode.get(), table); @@ -121,7 +121,7 @@ public final class SingleRouteEngine { private void fillRouteContext(final SingleRule singleRule, final RouteContext routeContext, final Collection<QualifiedTable> logicTables) { for (QualifiedTable each : logicTables) { String tableName = each.getTableName(); - DataNode dataNode = singleRule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(each.getSchema(), tableName) + DataNode dataNode = singleRule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(each.getSchemaName(), tableName) .orElseThrow(() -> new SingleTableNotFoundException(tableName)); String dataSource = dataNode.getDataSourceName(); routeContext.putRouteUnit(new RouteMapper(dataSource, dataSource), Collections.singletonList(new RouteMapper(tableName, tableName))); 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 4ae95eb3bf7..50211a03eb3 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 @@ -106,7 +106,7 @@ public final class SingleRule implements DatabaseRule { return false; } QualifiedTable sampleTable = singleTables.iterator().next(); - Optional<DataNode> sampleDataNode = mutableDataNodeRuleAttribute.findTableDataNode(sampleTable.getSchema(), sampleTable.getTableName()); + Optional<DataNode> sampleDataNode = mutableDataNodeRuleAttribute.findTableDataNode(sampleTable.getSchemaName(), sampleTable.getTableName()); if (sampleDataNode.isPresent()) { for (DataNode each : dataNodes) { if (!isSameComputeNode(sampleDataNode.get().getDataSourceName(), each.getDataSourceName())) { @@ -124,7 +124,7 @@ public final class SingleRule implements DatabaseRule { private boolean isSingleTablesInSameComputeNode(final Collection<QualifiedTable> singleTables) { String sampleDataSourceName = null; for (QualifiedTable each : singleTables) { - Optional<DataNode> dataNode = mutableDataNodeRuleAttribute.findTableDataNode(each.getSchema(), each.getTableName()); + Optional<DataNode> dataNode = mutableDataNodeRuleAttribute.findTableDataNode(each.getSchemaName(), each.getTableName()); if (!dataNode.isPresent()) { continue; } @@ -158,7 +158,7 @@ public final class SingleRule implements DatabaseRule { private boolean containsDataNode(final QualifiedTable qualifiedTable, final Collection<DataNode> dataNodes) { for (DataNode each : dataNodes) { - if (qualifiedTable.getSchema().equalsIgnoreCase(each.getSchemaName())) { + if (qualifiedTable.getSchemaName().equalsIgnoreCase(each.getSchemaName())) { return true; } } diff --git a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/SingleRuleTest.java b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/SingleRuleTest.java index 2323eb5f87d..e27025edeb8 100644 --- a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/SingleRuleTest.java +++ b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/rule/SingleRuleTest.java @@ -176,7 +176,7 @@ class SingleRuleTest { SingleRule singleRule = new SingleRule(ruleConfig, "foo_db", new H2DatabaseType(), dataSourceMap, Collections.singleton(mock(ShardingSphereRule.class, RETURNS_DEEP_STUBS))); Collection<QualifiedTable> tableNames = new LinkedList<>(); tableNames.add(new QualifiedTable("foo_db", "employee")); - assertThat(singleRule.getSingleTables(tableNames).iterator().next().getSchema(), is("foo_db")); + assertThat(singleRule.getSingleTables(tableNames).iterator().next().getSchemaName(), is("foo_db")); assertThat(singleRule.getSingleTables(tableNames).iterator().next().getTableName(), is("employee")); } @@ -188,7 +188,7 @@ class SingleRuleTest { singleRule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).put(dataSourceName, "foo_db", tableName); Collection<QualifiedTable> tableNames = new LinkedList<>(); tableNames.add(new QualifiedTable("foo_db", "teacher")); - assertThat(singleRule.getSingleTables(tableNames).iterator().next().getSchema(), is("foo_db")); + assertThat(singleRule.getSingleTables(tableNames).iterator().next().getSchemaName(), is("foo_db")); assertThat(singleRule.getSingleTables(tableNames).iterator().next().getTableName(), is("teacher")); assertTrue(singleRule.getAttributes().getAttribute(TableMapperRuleAttribute.class).getLogicTableNames().contains("employee")); assertTrue(singleRule.getAttributes().getAttribute(TableMapperRuleAttribute.class).getLogicTableNames().contains("student")); diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParser.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParser.java index 138d8de5225..5436cc9cf24 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParser.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParser.java @@ -19,7 +19,6 @@ package org.apache.shardingsphere.mode.node.path.metadata.database; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedSchema; import org.apache.shardingsphere.mode.node.path.NodePathPattern; import java.util.Optional; @@ -32,6 +31,20 @@ import java.util.regex.Pattern; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class DatabaseMetaDataNodePathParser { + /** + * Find database name. + * + * @param path path + * @param containsChildPath whether contains child path + * @return found database name + */ + public static Optional<String> findDatabaseName(final String path, final boolean containsChildPath) { + String endPattern = containsChildPath ? "?" : "$"; + Pattern pattern = Pattern.compile(DatabaseMetaDataNodePathGenerator.getDatabasePath(NodePathPattern.IDENTIFIER) + endPattern, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(path); + return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); + } + /** * Find qualified schema. * @@ -39,10 +52,10 @@ public final class DatabaseMetaDataNodePathParser { * @param containsChildPath whether contains child path * @return found qualified schema */ - public static Optional<QualifiedSchema> findQualifiedSchema(final String path, final boolean containsChildPath) { + public static Optional<String> findSchemaName(final String path, final boolean containsChildPath) { String endPattern = containsChildPath ? "?" : "$"; Pattern pattern = Pattern.compile(DatabaseMetaDataNodePathGenerator.getSchemaPath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER) + endPattern, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(new QualifiedSchema(matcher.group(1), matcher.group(2))) : Optional.empty(); + return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty(); } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParserTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParserTest.java index 50c8f80ca6d..af72eafc170 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParserTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/database/DatabaseMetaDataNodePathParserTest.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.node.path.metadata.database; -import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedSchema; import org.junit.jupiter.api.Test; import java.util.Optional; @@ -30,30 +29,28 @@ import static org.junit.jupiter.api.Assertions.assertTrue; class DatabaseMetaDataNodePathParserTest { @Test - void assertFindQualifiedSchemaWithNotContainsChildPath() { - Optional<QualifiedSchema> actual = DatabaseMetaDataNodePathParser.findQualifiedSchema("/metadata/foo_db/schemas/foo_schema", false); + void assertFindSchemaNameWithNotContainsChildPath() { + Optional<String> actual = DatabaseMetaDataNodePathParser.findSchemaName("/metadata/foo_db/schemas/foo_schema", false); assertTrue(actual.isPresent()); - assertThat(actual.get().getDatabaseName(), is("foo_db")); - assertThat(actual.get().getSchemaName(), is("foo_schema")); + assertThat(actual.get(), is("foo_schema")); } @Test - void assertNotFindQualifiedSchemaWithNotContainsChildPath() { - Optional<QualifiedSchema> actual = DatabaseMetaDataNodePathParser.findQualifiedSchema("/metadata/foo_db/schemas/foo_schema/tables", false); + void assertNotFindSchemaNameWithNotContainsChildPath() { + Optional<String> actual = DatabaseMetaDataNodePathParser.findSchemaName("/metadata/foo_db/schemas/foo_schema/tables", false); assertFalse(actual.isPresent()); } @Test - void assertFindQualifiedSchemaWithContainsChildPath() { - Optional<QualifiedSchema> actual = DatabaseMetaDataNodePathParser.findQualifiedSchema("/metadata/foo_db/schemas/foo_schema/tables", true); + void assertFindSchemaNameWithContainsChildPath() { + Optional<String> actual = DatabaseMetaDataNodePathParser.findSchemaName("/metadata/foo_db/schemas/foo_schema/tables", true); assertTrue(actual.isPresent()); - assertThat(actual.get().getDatabaseName(), is("foo_db")); - assertThat(actual.get().getSchemaName(), is("foo_schema")); + assertThat(actual.get(), is("foo_schema")); } @Test - void assertNotFindQualifiedSchemaWithContainsChildPath() { - Optional<QualifiedSchema> actual = DatabaseMetaDataNodePathParser.findQualifiedSchema("/xxx/foo_db/schemas/foo_schema/tables", true); + void assertNotFindSchemaNameWithContainsChildPath() { + Optional<String> actual = DatabaseMetaDataNodePathParser.findSchemaName("/xxx/foo_db/schemas/foo_schema/tables", true); assertFalse(actual.isPresent()); } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java index 8b525e7395a..a08ebbc8946 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata; -import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedSchema; import org.apache.shardingsphere.mode.event.DataChangedEvent; import org.apache.shardingsphere.mode.event.DataChangedEvent.Type; import org.apache.shardingsphere.mode.manager.ContextManager; @@ -26,10 +25,10 @@ import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database. import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.StorageUnitChangedHandler; import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.TableChangedHandler; import org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.ViewChangedHandler; -import org.apache.shardingsphere.mode.node.path.metadata.storage.DataSourceMetaDataNodePathParser; import org.apache.shardingsphere.mode.node.path.metadata.database.DatabaseMetaDataNodePathParser; import org.apache.shardingsphere.mode.node.path.metadata.database.TableMetaDataNodePathParser; import org.apache.shardingsphere.mode.node.path.metadata.database.ViewMetaDataNodePathParser; +import org.apache.shardingsphere.mode.node.path.metadata.storage.DataSourceMetaDataNodePathParser; import java.util.Optional; @@ -65,18 +64,18 @@ public final class MetaDataChangedHandler { */ public boolean handle(final String databaseName, final DataChangedEvent event) { String eventKey = event.getKey(); - Optional<QualifiedSchema> qualifiedSchema = DatabaseMetaDataNodePathParser.findQualifiedSchema(eventKey, false); - if (qualifiedSchema.isPresent()) { - handleSchemaChanged(databaseName, qualifiedSchema.get().getSchemaName(), event); + Optional<String> schemaName = DatabaseMetaDataNodePathParser.findSchemaName(eventKey, false); + if (schemaName.isPresent()) { + handleSchemaChanged(databaseName, schemaName.get(), event); return true; } - qualifiedSchema = DatabaseMetaDataNodePathParser.findQualifiedSchema(eventKey, true); - if (qualifiedSchema.isPresent() && isTableMetaDataChanged(eventKey)) { - handleTableChanged(databaseName, qualifiedSchema.get().getSchemaName(), event); + schemaName = DatabaseMetaDataNodePathParser.findSchemaName(eventKey, true); + if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) { + handleTableChanged(databaseName, schemaName.get(), event); return true; } - if (qualifiedSchema.isPresent() && isViewMetaDataChanged(eventKey)) { - handleViewChanged(databaseName, qualifiedSchema.get().getSchemaName(), event); + if (schemaName.isPresent() && isViewMetaDataChanged(eventKey)) { + handleViewChanged(databaseName, schemaName.get(), event); return true; } if (DataSourceMetaDataNodePathParser.isDataSourceRootPath(eventKey)) { diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java index 6033307bfb9..5f8979885ac 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java @@ -19,7 +19,6 @@ package org.apache.shardingsphere.mode.manager.cluster.dispatch.listener.type; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException; -import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedSchema; import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache; import org.apache.shardingsphere.mode.event.DataChangedEvent; import org.apache.shardingsphere.mode.manager.ContextManager; @@ -41,16 +40,16 @@ public final class DatabaseMetaDataChangedListener implements DataChangedEventLi @Override public void onChange(final DataChangedEvent event) { - Optional<QualifiedSchema> qualifiedSchema = DatabaseMetaDataNodePathParser.findQualifiedSchema(event.getKey(), true); - if (!qualifiedSchema.isPresent()) { + Optional<String> databaseName = DatabaseMetaDataNodePathParser.findDatabaseName(event.getKey(), true); + if (!databaseName.isPresent()) { return; } OrderedServicesCache.clearCache(); - if (new MetaDataChangedHandler(contextManager).handle(qualifiedSchema.get().getDatabaseName(), event)) { + if (new MetaDataChangedHandler(contextManager).handle(databaseName.get(), event)) { return; } try { - new RuleConfigurationChangedHandler(contextManager).handle(qualifiedSchema.get().getDatabaseName(), event); + new RuleConfigurationChangedHandler(contextManager).handle(databaseName.get(), event); } catch (final SQLException ex) { throw new SQLWrapperException(ex); } diff --git a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java index 9fff931f7f8..8297becec5e 100644 --- a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java +++ b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/cdc/CDCE2EIT.java @@ -188,7 +188,7 @@ class CDCE2EIT { private void assertDataMatched(final PipelineDataSource sourceDataSource, final PipelineDataSource targetDataSource, final QualifiedTable qualifiedTable) { StandardPipelineTableMetaDataLoader metaDataLoader = new StandardPipelineTableMetaDataLoader(targetDataSource); - PipelineTableMetaData tableMetaData = metaDataLoader.getTableMetaData(qualifiedTable.getSchema(), qualifiedTable.getTableName()); + PipelineTableMetaData tableMetaData = metaDataLoader.getTableMetaData(qualifiedTable.getSchemaName(), qualifiedTable.getTableName()); List<PipelineColumnMetaData> uniqueKeys = Collections.singletonList(tableMetaData.getColumnMetaData(tableMetaData.getPrimaryKeyColumns().get(0))); ConsistencyCheckJobItemProgressContext progressContext = new ConsistencyCheckJobItemProgressContext("", 0, sourceDataSource.getDatabaseType().getType()); TableInventoryCheckParameter param = new TableInventoryCheckParameter("", sourceDataSource, targetDataSource, qualifiedTable, qualifiedTable,