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 7719c4fef85 Add DatabaseMetaDataPersistFacade.renameSchema() (#35008) 7719c4fef85 is described below commit 7719c4fef8540e08d7cc570251297e69060840bd Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Mar 15 23:31:10 2025 +0800 Add DatabaseMetaDataPersistFacade.renameSchema() (#35008) * Add DatabaseMetaDataPersistFacade.renameSchema() * Add DatabaseMetaDataPersistFacade.renameSchema() --- .../metadata/DatabaseMetaDataPersistFacade.java | 21 +++++++++++++++++++++ .../ClusterMetaDataManagerPersistService.java | 9 +-------- .../ClusterMetaDataManagerPersistServiceTest.java | 12 +++--------- .../StandaloneMetaDataManagerPersistService.java | 9 +-------- ...StandaloneMetaDataManagerPersistServiceTest.java | 10 +++------- 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java index 697d1da4d3d..41414694067 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/metadata/DatabaseMetaDataPersistFacade.java @@ -18,7 +18,9 @@ package org.apache.shardingsphere.mode.metadata.persist.metadata; import lombok.Getter; +import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; 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.metadata.database.schema.model.ShardingSphereView; import org.apache.shardingsphere.mode.metadata.persist.metadata.service.DatabaseMetaDataPersistService; @@ -69,4 +71,23 @@ public final class DatabaseMetaDataPersistFacade { droppedTables.forEach(each -> table.drop(database.getName(), schemaName, each)); droppedViews.forEach(each -> view.drop(database.getName(), schemaName, each)); } + + /** + * Rename schema. + * + * @param metaData meta data + * @param database database + * @param schemaName schema name + * @param renameSchemaName rename schema name + */ + public void renameSchema(final ShardingSphereMetaData metaData, final ShardingSphereDatabase database, final String schemaName, final String renameSchemaName) { + ShardingSphereSchema schema = metaData.getDatabase(database.getName()).getSchema(schemaName); + if (schema.isEmpty()) { + this.schema.add(database.getName(), renameSchemaName); + } else { + table.persist(database.getName(), renameSchemaName, schema.getAllTables()); + view.persist(database.getName(), renameSchemaName, schema.getAllViews()); + } + this.schema.drop(database.getName(), schemaName); + } } 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 0a111579274..d8e6e15ca9e 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 @@ -99,14 +99,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag @Override public void renameSchema(final ShardingSphereDatabase database, final String schemaName, final String renameSchemaName) { - ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(database.getName()).getSchema(schemaName); - if (schema.isEmpty()) { - metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().add(database.getName(), renameSchemaName); - } else { - metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), renameSchemaName, schema.getAllTables()); - metaDataPersistFacade.getDatabaseMetaDataFacade().getView().persist(database.getName(), renameSchemaName, schema.getAllViews()); - } - metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().drop(database.getName(), schemaName); + metaDataPersistFacade.getDatabaseMetaDataFacade().renameSchema(metaDataContextManager.getMetaDataContexts().getMetaData(), database, schemaName, renameSchemaName); } @Override 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 d7cec11eb1b..e98c8b175ae 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 @@ -98,8 +98,7 @@ class ClusterMetaDataManagerPersistServiceTest { 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().getTable()).persist("foo_db", "foo_schema", Collections.emptyList()); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getView()).persist("foo_db", "foo_schema", Collections.emptyList()); + verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).alterSchema(any(), eq("foo_schema"), anyCollection(), anyCollection(), anyCollection(), anyCollection()); } @Test @@ -107,20 +106,15 @@ class ClusterMetaDataManagerPersistServiceTest { ShardingSphereSchema schema = mock(ShardingSphereSchema.class); when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema); metaDataManagerPersistService.renameSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "bar_schema"); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getView()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema()).drop("foo_db", "foo_schema"); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema(), times(0)).add("foo_db", "bar_schema"); + verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).renameSchema(any(), any(), eq("foo_schema"), eq("bar_schema")); } @Test void assertRenameEmptySchemaName() { ShardingSphereSchema schema = mock(ShardingSphereSchema.class); - when(schema.isEmpty()).thenReturn(true); when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema); metaDataManagerPersistService.renameSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "bar_schema"); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema()).drop("foo_db", "foo_schema"); - verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema()).add("foo_db", "bar_schema"); + verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).renameSchema(any(), any(), eq("foo_schema"), eq("bar_schema")); } @Test 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 f36a724f9d5..408b4e32f77 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 @@ -116,14 +116,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa @Override public void renameSchema(final ShardingSphereDatabase database, final String schemaName, final String renameSchemaName) { - ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(database.getName()).getSchema(schemaName); - if (schema.isEmpty()) { - metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().add(database.getName(), renameSchemaName); - } else { - metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().persist(database.getName(), renameSchemaName, schema.getAllTables()); - metaDataPersistFacade.getDatabaseMetaDataFacade().getView().persist(database.getName(), renameSchemaName, schema.getAllViews()); - } - metaDataPersistFacade.getDatabaseMetaDataFacade().getSchema().drop(database.getName(), schemaName); + metaDataPersistFacade.getDatabaseMetaDataFacade().renameSchema(metaDataContextManager.getMetaDataContexts().getMetaData(), database, schemaName, renameSchemaName); metaDataContextManager.getDatabaseMetaDataManager().renameSchema(database.getName(), schemaName, renameSchemaName); } 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 de4bc0a6680..978a0ca72f7 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 @@ -50,7 +50,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.sql.SQLException; import java.util.Collections; -import java.util.LinkedList; import java.util.Optional; import java.util.Properties; @@ -108,7 +107,7 @@ class StandaloneMetaDataManagerPersistServiceTest { 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.getTable()).persist("foo_db", "foo_schema", new LinkedList<>()); + verify(databaseMetaDataFacade).alterSchema(any(), eq("foo_schema"), anyCollection(), anyCollection(), anyCollection(), anyCollection()); } @Test @@ -121,9 +120,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); metaDataManagerPersistService.renameSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "bar_schema"); verify(databaseMetaDataFacade.getSchema(), times(0)).add("foo_db", "bar_schema"); - verify(databaseMetaDataFacade.getTable()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); - verify(databaseMetaDataFacade.getView()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); - verify(databaseMetaDataFacade.getSchema()).drop("foo_db", "foo_schema"); + verify(databaseMetaDataFacade).renameSchema(any(), any(), eq("foo_schema"), eq("bar_schema")); } @Test @@ -137,8 +134,7 @@ class StandaloneMetaDataManagerPersistServiceTest { DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS); when(metaDataPersistFacade.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); metaDataManagerPersistService.renameSchema(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "bar_schema"); - verify(databaseMetaDataFacade.getSchema()).add("foo_db", "bar_schema"); - verify(databaseMetaDataFacade.getSchema()).drop("foo_db", "foo_schema"); + verify(databaseMetaDataFacade).renameSchema(any(), any(), eq("foo_schema"), eq("bar_schema")); } @Test