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());
}