This is an automated email from the ASF dual-hosted git repository. menghaoran 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 e08c69e185d split alter schema into tables and views for MetaDataManagerPersistService (#35202) e08c69e185d is described below commit e08c69e185d4dec20274efbcb13872b0a464d946 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Wed Apr 16 13:48:30 2025 +0800 split alter schema into tables and views for MetaDataManagerPersistService (#35202) --- .../type/AlterViewFederationMetaDataRefresher.java | 4 +- .../CreateViewFederationMetaDataRefresher.java | 3 +- .../type/DropViewFederationMetaDataRefresher.java | 3 +- .../index/AlterIndexPushDownMetaDataRefresher.java | 2 +- .../CreateIndexPushDownMetaDataRefresher.java | 2 +- .../index/DropIndexPushDownMetaDataRefresher.java | 2 +- .../table/AlterTablePushDownMetaDataRefresher.java | 3 +- .../RenameTablePushDownMetaDataRefresher.java | 4 +- .../view/AlterViewPushDownMetaDataRefresher.java | 5 +- .../view/CreateViewPushDownMetaDataRefresher.java | 5 +- .../view/DropViewPushDownMetaDataRefresher.java | 4 +- .../service/MetaDataManagerPersistService.java | 40 ++++++++++------ .../ClusterMetaDataManagerPersistService.java | 22 ++++++--- .../ClusterMetaDataManagerPersistServiceTest.java | 7 --- .../StandaloneMetaDataManagerPersistService.java | 53 ++++++++++++---------- ...tandaloneMetaDataManagerPersistServiceTest.java | 10 ---- 16 files changed, 91 insertions(+), 78 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/AlterViewFederationMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/AlterViewFederationMetaDataRefresher.java index 87d35027835..46a8f39f5d4 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/AlterViewFederationMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/AlterViewFederationMetaDataRefresher.java @@ -26,7 +26,6 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterViewStatement; import java.util.Collection; -import java.util.Collections; import java.util.LinkedList; import java.util.Optional; @@ -48,7 +47,8 @@ public final class AlterViewFederationMetaDataRefresher implements FederationMet droppedViews.add(viewName); } sqlStatement.getViewDefinition().ifPresent(optional -> alteredViews.add(new ShardingSphereView(viewName, optional))); - metaDataManagerPersistService.alterSchema(database, schemaName, Collections.emptyList(), alteredViews, Collections.emptyList(), droppedViews); + metaDataManagerPersistService.alterViews(database, schemaName, alteredViews); + metaDataManagerPersistService.dropViews(database, schemaName, droppedViews); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/CreateViewFederationMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/CreateViewFederationMetaDataRefresher.java index 0965df908ac..e9065ab52ab 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/CreateViewFederationMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/CreateViewFederationMetaDataRefresher.java @@ -34,8 +34,7 @@ public final class CreateViewFederationMetaDataRefresher implements FederationMe @Override public void refresh(final MetaDataManagerPersistService metaDataManagerPersistService, final ShardingSphereDatabase database, final String schemaName, final CreateViewStatement sqlStatement) { String viewName = TableRefreshUtils.getTableName(sqlStatement.getView().getTableName().getIdentifier(), sqlStatement.getDatabaseType()); - metaDataManagerPersistService.alterSchema(database, schemaName, - Collections.emptyList(), Collections.singleton(new ShardingSphereView(viewName, sqlStatement.getViewDefinition())), Collections.emptyList(), Collections.emptyList()); + metaDataManagerPersistService.alterViews(database, schemaName, Collections.singleton(new ShardingSphereView(viewName, sqlStatement.getViewDefinition()))); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/DropViewFederationMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/DropViewFederationMetaDataRefresher.java index bfae801a9d6..050b8c1a2f1 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/DropViewFederationMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/federation/type/DropViewFederationMetaDataRefresher.java @@ -23,7 +23,6 @@ import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistServ import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropViewStatement; import java.util.Collection; -import java.util.Collections; import java.util.stream.Collectors; /** @@ -34,7 +33,7 @@ public final class DropViewFederationMetaDataRefresher implements FederationMeta @Override public void refresh(final MetaDataManagerPersistService metaDataManagerPersistService, final ShardingSphereDatabase database, final String schemaName, final DropViewStatement sqlStatement) { Collection<String> droppedViews = sqlStatement.getViews().stream().map(each -> each.getTableName().getIdentifier().getValue()).collect(Collectors.toList()); - metaDataManagerPersistService.alterSchema(database, schemaName, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), droppedViews); + metaDataManagerPersistService.dropViews(database, schemaName, droppedViews); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/AlterIndexPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/AlterIndexPushDownMetaDataRefresher.java index 6acebb67d55..b78b5424d3a 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/AlterIndexPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/AlterIndexPushDownMetaDataRefresher.java @@ -61,7 +61,7 @@ public final class AlterIndexPushDownMetaDataRefresher implements PushDownMetaDa newTable.removeIndex(indexName); String renameIndexName = renameIndex.get().getIndexName().getIdentifier().getValue(); newTable.putIndex(new ShardingSphereIndex(renameIndexName, new LinkedList<>(), false)); - metaDataManagerPersistService.alterSchema(database, actualSchemaName, Collections.singleton(newTable), Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, actualSchemaName, Collections.singleton(newTable)); } private Optional<String> findLogicTableName(final ShardingSphereSchema schema, final String indexName) { diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresher.java index f54233271fc..395ccaeb791 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/CreateIndexPushDownMetaDataRefresher.java @@ -53,7 +53,7 @@ public final class CreateIndexPushDownMetaDataRefresher implements PushDownMetaD ShardingSphereTable table = schema.getTable(tableName); ShardingSphereTable newTable = new ShardingSphereTable(table.getName(), table.getAllColumns(), table.getAllIndexes(), table.getAllConstraints(), table.getType()); newTable.putIndex(new ShardingSphereIndex(indexName, new LinkedList<>(), false)); - metaDataManagerPersistService.alterSchema(database, schemaName, Collections.singleton(newTable), Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, schemaName, Collections.singleton(newTable)); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/DropIndexPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/DropIndexPushDownMetaDataRefresher.java index af80c725fb8..f1498015374 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/DropIndexPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/index/DropIndexPushDownMetaDataRefresher.java @@ -57,7 +57,7 @@ public final class DropIndexPushDownMetaDataRefresher implements PushDownMetaDat ShardingSphereTable table = schema.getTable(logicTableName.get()); ShardingSphereTable newTable = new ShardingSphereTable(table.getName(), table.getAllColumns(), table.getAllIndexes(), table.getAllConstraints(), table.getType()); newTable.removeIndex(each.getIndexName().getIdentifier().getValue()); - metaDataManagerPersistService.alterSchema(database, actualSchemaName, Collections.singleton(newTable), Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, actualSchemaName, Collections.singleton(newTable)); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/AlterTablePushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/AlterTablePushDownMetaDataRefresher.java index 478df486c00..08a54f66f19 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/AlterTablePushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/AlterTablePushDownMetaDataRefresher.java @@ -56,7 +56,8 @@ public final class AlterTablePushDownMetaDataRefresher implements PushDownMetaDa } else { alteredTables.add(getTable(database, logicDataSourceNames, schemaName, tableName, props)); } - metaDataManagerPersistService.alterSchema(database, schemaName, alteredTables, Collections.emptyList(), droppedTables, Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, schemaName, alteredTables); + metaDataManagerPersistService.dropTables(database, schemaName, droppedTables); } private ShardingSphereTable getTable(final ShardingSphereDatabase database, final Collection<String> logicDataSourceNames, final String schemaName, diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/RenameTablePushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/RenameTablePushDownMetaDataRefresher.java index c6140665f42..b62d171fdce 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/RenameTablePushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/table/RenameTablePushDownMetaDataRefresher.java @@ -28,7 +28,6 @@ import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.RenameT import java.sql.SQLException; import java.util.Collection; -import java.util.Collections; import java.util.LinkedList; /** @@ -48,7 +47,8 @@ public final class RenameTablePushDownMetaDataRefresher implements PushDownMetaD each.getRenameTable().getTableName().getIdentifier().getValue(), toBeRenamedTable.getAllColumns(), toBeRenamedTable.getAllIndexes(), toBeRenamedTable.getAllConstraints())); droppedTables.add(toBeRenamedTableName); } - metaDataManagerPersistService.alterSchema(database, schemaName, alteredTables, Collections.emptyList(), droppedTables, Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, schemaName, alteredTables); + metaDataManagerPersistService.dropTables(database, schemaName, droppedTables); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/AlterViewPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/AlterViewPushDownMetaDataRefresher.java index 4247c189be9..55212ae472d 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/AlterViewPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/AlterViewPushDownMetaDataRefresher.java @@ -69,7 +69,10 @@ public final class AlterViewPushDownMetaDataRefresher implements PushDownMetaDat alteredTables.add(schema.getTable(viewName)); alteredViews.add(schema.getView(viewName)); } - metaDataManagerPersistService.alterSchema(database, schemaName, alteredTables, alteredViews, droppedTables, droppedViews); + metaDataManagerPersistService.alterTables(database, schemaName, alteredTables); + metaDataManagerPersistService.alterViews(database, schemaName, alteredViews); + metaDataManagerPersistService.dropTables(database, schemaName, droppedTables); + metaDataManagerPersistService.dropViews(database, schemaName, droppedViews); } private ShardingSphereSchema getSchema(final ShardingSphereDatabase database, final Collection<String> logicDataSourceNames, diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/CreateViewPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/CreateViewPushDownMetaDataRefresher.java index 2fad140cccb..5ad7aac7944 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/CreateViewPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/CreateViewPushDownMetaDataRefresher.java @@ -57,9 +57,8 @@ public final class CreateViewPushDownMetaDataRefresher implements PushDownMetaDa Map<String, ShardingSphereSchema> schemas = GenericSchemaBuilder.build(Collections.singletonList(viewName), database.getProtocolType(), material); Optional<ShardingSphereTable> actualTableMetaData = Optional.ofNullable(schemas.get(schemaName)).map(optional -> optional.getTable(viewName)); Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual view metadata '%s' failed.", viewName); - metaDataManagerPersistService.alterSchema(database, schemaName, - Collections.singleton(actualTableMetaData.get()), Collections.singleton(new ShardingSphereView(viewName, sqlStatement.getViewDefinition())), - Collections.emptyList(), Collections.emptyList()); + metaDataManagerPersistService.alterTables(database, schemaName, Collections.singleton(actualTableMetaData.get())); + metaDataManagerPersistService.alterViews(database, schemaName, Collections.singleton(new ShardingSphereView(viewName, sqlStatement.getViewDefinition()))); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/DropViewPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/DropViewPushDownMetaDataRefresher.java index 241174b6196..e5a85b6b7dd 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/DropViewPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/pushdown/type/view/DropViewPushDownMetaDataRefresher.java @@ -26,7 +26,6 @@ import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropViewStatement; import java.util.Collection; -import java.util.Collections; import java.util.LinkedList; /** @@ -44,7 +43,8 @@ public final class DropViewPushDownMetaDataRefresher implements PushDownMetaData droppedTables.add(viewName); droppedViews.add(viewName); } - metaDataManagerPersistService.alterSchema(database, schemaName, Collections.emptyList(), Collections.emptyList(), droppedTables, droppedViews); + metaDataManagerPersistService.dropTables(database, schemaName, droppedTables); + metaDataManagerPersistService.dropViews(database, schemaName, droppedViews); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java index 356a8a0a15b..d4e0475f23b 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java @@ -55,19 +55,6 @@ public interface MetaDataManagerPersistService { */ void createSchema(ShardingSphereDatabase database, String schemaName); - /** - * Alter schema. - * - * @param database database - * @param schemaName schema name - * @param alteredTables altered tables - * @param alteredViews altered views - * @param droppedTables dropped tables - * @param droppedViews dropped views - */ - void alterSchema(ShardingSphereDatabase database, String schemaName, - Collection<ShardingSphereTable> alteredTables, Collection<ShardingSphereView> alteredViews, Collection<String> droppedTables, Collection<String> droppedViews); - /** * Rename schema. * @@ -103,6 +90,33 @@ public interface MetaDataManagerPersistService { */ void dropTables(ShardingSphereDatabase database, String schemaName, Collection<String> tableNames); + /** + * Alter tables. + * + * @param database database + * @param schemaName schema name + * @param alteredTables altered tables + */ + void alterTables(ShardingSphereDatabase database, String schemaName, Collection<ShardingSphereTable> alteredTables); + + /** + * Alter views. + * + * @param database database + * @param schemaName schema name + * @param alteredViews altered views + */ + void alterViews(ShardingSphereDatabase database, String schemaName, Collection<ShardingSphereView> alteredViews); + + /** + * Drop views. + * + * @param database database + * @param schemaName schema name + * @param droppedViews dropped views + */ + void dropViews(ShardingSphereDatabase database, String schemaName, Collection<String> droppedViews); + /** * Register storage units. * diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java index b3c544f36f7..2146577f5c5 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java @@ -85,13 +85,6 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().add(database.getName(), schemaName); } - @Override - public void alterSchema(final ShardingSphereDatabase database, final String schemaName, - final Collection<ShardingSphereTable> alteredTables, final Collection<ShardingSphereView> alteredViews, - final Collection<String> droppedTables, final Collection<String> droppedViews) { - metaDataPersistFacade.getDatabaseMetaDataFacade().alterSchema(database, schemaName, alteredTables, alteredViews, droppedTables, droppedViews); - } - @Override public void renameSchema(final ShardingSphereDatabase database, final String schemaName, final String renameSchemaName) { metaDataPersistFacade.getDatabaseMetaDataFacade().renameSchema(metaDataContextManager.getMetaDataContexts().getMetaData(), database, schemaName, renameSchemaName); @@ -123,6 +116,21 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } } + @Override + public void alterTables(final ShardingSphereDatabase database, final String schemaName, final Collection<ShardingSphereTable> alteredTables) { + metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), schemaName, alteredTables); + } + + @Override + public void alterViews(final ShardingSphereDatabase database, final String schemaName, final Collection<ShardingSphereView> alteredViews) { + metaDataPersistFacade.getDatabaseMetaDataFacade().getView().persist(database.getName(), schemaName, alteredViews); + } + + @Override + public void dropViews(final ShardingSphereDatabase database, final String schemaName, final Collection<String> droppedViews) { + droppedViews.forEach(each -> metaDataPersistFacade.getDatabaseMetaDataFacade().getView().drop(database.getName(), schemaName, each)); + } + @Override public void registerStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeRegisteredProps) { MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java index 5077242140e..6eb754e232c 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java @@ -94,13 +94,6 @@ class ClusterMetaDataManagerPersistServiceTest { verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema()).add("foo_db", "foo_schema"); } - @Test - void assertAlterSchema() { - metaDataManagerPersistService.alterSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), - "foo_schema", Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).alterSchema(any(), eq("foo_schema"), anyCollection(), anyCollection(), anyCollection(), anyCollection()); - } - @Test void assertRenameSchema() { ShardingSphereSchema schema = mock(ShardingSphereSchema.class); diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java index d55e5033665..4d6fe03db64 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java @@ -87,25 +87,6 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa metaDataContextManager.getDatabaseMetaDataManager().addSchema(database.getName(), schemaName); } - @Override - public void alterSchema(final ShardingSphereDatabase database, final String schemaName, - final Collection<ShardingSphereTable> alteredTables, final Collection<ShardingSphereView> alteredViews, - final Collection<String> droppedTables, final Collection<String> droppedViews) { - metaDataPersistFacade.getDatabaseMetaDataFacade().alterSchema(database, schemaName, alteredTables, alteredViews, droppedTables, droppedViews); - afterAlterSchema(database, schemaName, alteredTables, alteredViews, droppedTables, droppedViews); - } - - private void afterAlterSchema(final ShardingSphereDatabase database, final String schemaName, - final Collection<ShardingSphereTable> alteredTables, final Collection<ShardingSphereView> alteredViews, - final Collection<String> droppedTables, final Collection<String> droppedViews) { - alteredTables.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), schemaName, each)); - alteredViews.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().alterView(database.getName(), schemaName, each)); - droppedTables.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().dropTable(database.getName(), schemaName, each)); - droppedViews.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().dropView(database.getName(), schemaName, each)); - ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); - metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); - } - @Override public void renameSchema(final ShardingSphereDatabase database, final String schemaName, final String renameSchemaName) { metaDataPersistFacade.getDatabaseMetaDataFacade().renameSchema(metaDataContextManager.getMetaDataContexts().getMetaData(), database, schemaName, renameSchemaName); @@ -143,6 +124,32 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } } + @Override + public void alterTables(final ShardingSphereDatabase database, final String schemaName, final Collection<ShardingSphereTable> alteredTables) { + metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), schemaName, alteredTables); + alteredTables.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), schemaName, each)); + ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); + metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + } + + @Override + public void alterViews(final ShardingSphereDatabase database, final String schemaName, final Collection<ShardingSphereView> alteredViews) { + metaDataPersistFacade.getDatabaseMetaDataFacade().getView().persist(database.getName(), schemaName, alteredViews); + alteredViews.forEach(each -> metaDataContextManager.getDatabaseMetaDataManager().alterView(database.getName(), schemaName, each)); + ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); + metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + } + + @Override + public void dropViews(final ShardingSphereDatabase database, final String schemaName, final Collection<String> droppedViews) { + droppedViews.forEach(each -> { + metaDataPersistFacade.getDatabaseMetaDataFacade().getView().drop(database.getName(), schemaName, each); + metaDataContextManager.getDatabaseMetaDataManager().dropView(database.getName(), schemaName, each); + }); + ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); + metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + } + @Override public void registerStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeRegisteredProps) { MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); @@ -214,7 +221,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa alterRuleItem(database.getName(), metaDataVersions); Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); - alterTables(database, schemaAndTablesMap); + alterSchemaTables(database, schemaAndTablesMap); OrderedServicesCache.clearCache(); } @@ -239,7 +246,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa removeRuleItem(database.getName(), metaDataVersions); Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); - alterTables(database, schemaAndTablesMap); + alterSchemaTables(database, schemaAndTablesMap); OrderedServicesCache.clearCache(); } @@ -259,7 +266,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa return toBeAlteredRuleConfig.getLogicTableNames(); } - private void alterTables(final ShardingSphereDatabase database, final Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap) { + private void alterSchemaTables(final ShardingSphereDatabase database, final Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap) { for (Entry<String, Collection<ShardingSphereTable>> entry : schemaAndTablesMap.entrySet()) { for (ShardingSphereTable each : entry.getValue()) { metaDataContextManager.getDatabaseMetaDataManager().alterTable(database.getName(), entry.getKey(), each); @@ -274,7 +281,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa metaDataContextManager.getDatabaseRuleItemManager().drop(new DatabaseRuleNodePath(database.getName(), ruleType, null)); Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); - alterTables(database, schemaAndTablesMap); + alterSchemaTables(database, schemaAndTablesMap); OrderedServicesCache.clearCache(); } diff --git a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java index f552fc05b4b..501aaedcef6 100644 --- a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java +++ b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java @@ -51,7 +51,6 @@ import java.util.Properties; import static org.apache.shardingsphere.test.matcher.ShardingSphereArgumentVerifyMatchers.deepEq; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyCollection; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; @@ -98,15 +97,6 @@ class StandaloneMetaDataManagerPersistServiceTest { verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema()).add("foo_db", "foo_schema"); } - @Test - void assertAlterSchema() { - DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS); - when(metaDataPersistFacade.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); - metaDataManagerPersistService.alterSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), - "foo_schema", Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), Collections.emptyList()); - verify(databaseMetaDataFacade).alterSchema(any(), eq("foo_schema"), anyCollection(), anyCollection(), anyCollection(), anyCollection()); - } - @Test void assertRenameSchemaNameWithEmptyAlteredSchema() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);