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 09f57f4d6d0 Refactor DatabaseMetaDataManager.alterTable and alterView 
(#34510)
09f57f4d6d0 is described below

commit 09f57f4d6d002fa0aff71407136ca8a925a77113
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 26 14:35:06 2025 +0800

    Refactor DatabaseMetaDataManager.alterTable and alterView (#34510)
    
    * Refactor DatabaseMetaDataManager.alterTable and alterView
    
    * Refactor DatabaseMetaDataManager.alterTable and alterView
---
 .../metadata/manager/DatabaseMetaDataManager.java  | 28 ++++++++++------------
 .../manager/DatabaseMetaDataManagerTest.java       |  2 +-
 2 files changed, 13 insertions(+), 17 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
index bcfd29e0dd9..69cafe4cd07 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils;
 
 import java.util.Collections;
+import java.util.function.Consumer;
 
 /**
  * Database meta data manager.
@@ -107,19 +108,10 @@ public final class DatabaseMetaDataManager {
      *
      * @param databaseName database name
      * @param schemaName schema name
-     * @param toBeChangedTable to be changed table
+     * @param toBeAlteredTable to be altered table
      */
-    public synchronized void alterTable(final String databaseName, final 
String schemaName, final ShardingSphereTable toBeChangedTable) {
-        ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
-        if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
-            return;
-        }
-        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-        if (TableRefreshUtils.isSingleTable(toBeChangedTable.getName(), 
database)) {
-            database.reloadRules();
-        }
-        database.getSchema(schemaName).putTable(toBeChangedTable);
-        metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
+    public synchronized void alterTable(final String databaseName, final 
String schemaName, final ShardingSphereTable toBeAlteredTable) {
+        alterTableOrView(databaseName, schemaName, toBeAlteredTable.getName(), 
schema -> schema.putTable(toBeAlteredTable));
     }
     
     /**
@@ -127,18 +119,22 @@ public final class DatabaseMetaDataManager {
      *
      * @param databaseName database name
      * @param schemaName schema name
-     * @param toBeChangedView to be changed view
+     * @param toBeAlteredView to be altered view
      */
-    public synchronized void alterView(final String databaseName, final String 
schemaName, final ShardingSphereView toBeChangedView) {
+    public synchronized void alterView(final String databaseName, final String 
schemaName, final ShardingSphereView toBeAlteredView) {
+        alterTableOrView(databaseName, schemaName, toBeAlteredView.getName(), 
schema -> schema.putView(toBeAlteredView));
+    }
+    
+    private void alterTableOrView(final String databaseName, final String 
schemaName, final String tableOrViewName, final Consumer<ShardingSphereSchema> 
alterAction) {
         ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
         if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
             return;
         }
         ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(databaseName);
-        if (TableRefreshUtils.isSingleTable(toBeChangedView.getName(), 
database)) {
+        if (TableRefreshUtils.isSingleTable(tableOrViewName, database)) {
             database.reloadRules();
         }
-        database.getSchema(schemaName).putView(toBeChangedView);
+        alterAction.accept(database.getSchema(schemaName));
         metaData.getGlobalRuleMetaData().getRules().forEach(each -> 
((GlobalRule) each).refresh(metaData.getAllDatabases(), 
GlobalRuleChangedType.SCHEMA_CHANGED));
     }
     
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
index d497aee6ed1..fa1b2d11086 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManagerTest.java
@@ -135,7 +135,7 @@ class DatabaseMetaDataManagerTest {
         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);
-        databaseMetaDataManager.alterTable("foo_db", "bar_schema", null);
+        databaseMetaDataManager.alterTable("foo_db", "bar_schema", mock());
         verify(metaDataContexts.getMetaData().getDatabase("foo_db"), 
times(0)).getSchema(any());
     }
     

Reply via email to