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 bab16d58c98 Refactor SchemaMetaDataManager.dropTable and dropView 
(#34503)
bab16d58c98 is described below

commit bab16d58c98fc3a523a5a0e9a3ad28d06a5648fe
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Jan 26 12:23:01 2025 +0800

    Refactor SchemaMetaDataManager.dropTable and dropView (#34503)
    
    * Refactor SchemaMetaDataManager
    
    * Refactor SchemaMetaDataManager.dropTable and dropView
    
    * Refactor SchemaMetaDataManager.dropTable and dropView
---
 .../infra/rule/scope/GlobalRule.java               |  2 +-
 .../metadata/manager/SchemaMetaDataManager.java    | 62 ++++++++++++----------
 .../manager/SchemaMetaDataManagerTest.java         | 26 ++-------
 .../database/metadata/TableChangedHandler.java     |  2 +-
 .../database/metadata/ViewChangedHandler.java      |  2 +-
 .../metadata/MetaDataChangedHandlerTest.java       |  4 +-
 6 files changed, 42 insertions(+), 56 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
index 4ccc001ac38..3f361db212f 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java
@@ -37,7 +37,7 @@ public interface GlobalRule extends ShardingSphereRule {
     }
     
     /**
-     * Global rule changed type enum.
+     * Global rule changed type.
      */
     enum GlobalRuleChangedType {
         
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
index 5e2f86d6a8a..3d4982d54da 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mode.metadata.manager;
 
-import com.google.common.base.Strings;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -124,26 +123,6 @@ public final class SchemaMetaDataManager {
         }
     }
     
-    /**
-     * Alter schema.
-     *
-     * @param databaseName database name
-     * @param schemaName schema name
-     * @param toBeDeletedTableName to be deleted table name
-     * @param toBeDeletedViewName to be deleted view name
-     */
-    public synchronized void alterSchema(final String databaseName, final 
String schemaName, final String toBeDeletedTableName, final String 
toBeDeletedViewName) {
-        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
-        if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
-            return;
-        }
-        Optional.ofNullable(toBeDeletedTableName).ifPresent(optional -> 
dropTable(databaseName, schemaName, optional));
-        Optional.ofNullable(toBeDeletedViewName).ifPresent(optional -> 
dropView(databaseName, schemaName, optional));
-        if (!Strings.isNullOrEmpty(toBeDeletedTableName) || 
!Strings.isNullOrEmpty(toBeDeletedViewName)) {
-            metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
-        }
-    }
-    
     private void alterTable(final String databaseName, final String 
schemaName, final ShardingSphereTable beBoChangedTable) {
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
         if (TableRefreshUtils.isSingleTable(beBoChangedTable.getName(), 
database)) {
@@ -160,15 +139,40 @@ public final class SchemaMetaDataManager {
         database.getSchema(schemaName).putView(beBoChangedView);
     }
     
-    private void dropTable(final String databaseName, final String schemaName, 
final String toBeDeletedTableName) {
-        
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
-        metaDataContexts.getMetaData().getDatabase(databaseName)
-                
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
 -> each.remove(schemaName, toBeDeletedTableName));
+    /**
+     * Drop table.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param toBeDroppedTableName to be dropped table name
+     */
+    public synchronized void dropTable(final String databaseName, final String 
schemaName, final String toBeDroppedTableName) {
+        dropTableOrView(databaseName, schemaName, toBeDroppedTableName, true);
     }
     
-    private void dropView(final String databaseName, final String schemaName, 
final String toBeDeletedViewName) {
-        
metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
-        metaDataContexts.getMetaData().getDatabase(databaseName)
-                
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
 -> each.remove(schemaName, toBeDeletedViewName));
+    /**
+     * Drop view.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     * @param toBeDroppedViewName to be dropped view name
+     */
+    public void dropView(final String databaseName, final String schemaName, 
final String toBeDroppedViewName) {
+        dropTableOrView(databaseName, schemaName, toBeDroppedViewName, false);
+    }
+    
+    private void dropTableOrView(final String databaseName, final String 
schemaName, final String toBeDroppedTableOrViewName, final boolean isTable) {
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
+        if (!database.containsSchema(schemaName)) {
+            return;
+        }
+        if (isTable) {
+            
database.getSchema(schemaName).removeTable(toBeDroppedTableOrViewName);
+        } else {
+            
database.getSchema(schemaName).removeView(toBeDroppedTableOrViewName);
+        }
+        
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
 -> each.remove(schemaName, toBeDroppedTableOrViewName));
+        metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules()
+                .forEach(each -> ((GlobalRule) 
each).refresh(metaDataContexts.getMetaData().getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
index 5041dbb506f..354080e7340 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
@@ -174,34 +174,16 @@ class SchemaMetaDataManagerTest {
     }
     
     @Test
-    void assertAlterNotExistedSchemaForTableDropped() {
-        ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
-        schemaMetaDataManager.alterSchema("foo_db", "bar_schema", "", "");
-        verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
-    }
-    
-    @Test
-    void assertAlterSchemaForNothingTableDropped() {
-        ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema();
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema));
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema);
-        schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "", "");
-        verify(metaDataContexts.getMetaData().getGlobalRuleMetaData(), 
times(0)).getRules();
-    }
-    
-    @Test
-    void assertAlterSchemaForTableDropped() {
+    void assertDropTable() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
-        schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_tbl", 
null);
+        schemaMetaDataManager.dropTable("foo_db", "foo_schema", "foo_tbl");
         
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsTable("foo_tbl"));
     }
     
     @Test
-    void assertAlterSchemaForViewDropped() {
+    void assertDropView() {
         
when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema()));
-        schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_view", 
null);
+        schemaMetaDataManager.dropView("foo_db", "foo_schema", "foo_view");
         
assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsView("foo_view"));
     }
     
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
index 90337250be2..3b0bab15755 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
@@ -62,7 +62,7 @@ public final class TableChangedHandler {
      */
     public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
         String tableName = 
TableMetaDataNodePath.findTableName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("Table name not found."));
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, tableName, null);
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropTable(databaseName,
 schemaName, tableName);
         statisticsRefreshEngine.asyncRefresh();
     }
 }
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index 294d9f03a73..4a849a82bee 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -62,7 +62,7 @@ public final class ViewChangedHandler {
      */
     public void handleDropped(final String databaseName, final String 
schemaName, final DataChangedEvent event) {
         String viewName = 
ViewMetaDataNodePath.findViewName(event.getKey()).orElseThrow(() -> new 
IllegalStateException("View name not found."));
-        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
 schemaName, null, viewName);
+        
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropView(databaseName,
 schemaName, viewName);
         statisticsRefreshEngine.asyncRefresh();
     }
 }
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
index 3cb924b158a..b565844f4f9 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
@@ -94,7 +94,7 @@ class MetaDataChangedHandlerTest {
     @Test
     void assertHandleTableDropped() {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "", 
Type.DELETED));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", "foo_tbl", null);
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropTable("foo_db",
 "foo_schema", "foo_tbl");
     }
     
     @Test
@@ -120,7 +120,7 @@ class MetaDataChangedHandlerTest {
     @Test
     void assertHandleViewDropped() {
         handler.handle("foo_db", new 
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "", 
Type.DELETED));
-        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
 "foo_schema", null, "foo_view");
+        
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropView("foo_db",
 "foo_schema", "foo_view");
     }
     
     @Test

Reply via email to