This is an automated email from the ASF dual-hosted git repository.

panjuan 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 07ce91748c8 Refactor ContextManager.addSchema (#18679)
07ce91748c8 is described below

commit 07ce91748c8d080d3ba7e8305e0b39f30a4e5cd1
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jun 29 13:31:11 2022 +0800

    Refactor ContextManager.addSchema (#18679)
---
 .../federation/optimizer/context/OptimizerContext.java    | 13 +++++++++++++
 .../shardingsphere/mode/manager/ContextManager.java       |  6 ++----
 .../shardingsphere/mode/manager/ContextManagerTest.java   | 15 ++++++++++++++-
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
index 4748c90bf72..f6864a10781 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/context/OptimizerContext.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.Opti
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContextFactory;
 import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.model.ShardingSphereTable;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 
 import java.util.Collections;
@@ -58,4 +59,16 @@ public final class OptimizerContext {
         parserContexts.put(databaseName, 
OptimizerParserContextFactory.create(protocolType));
         plannerContexts.put(databaseName, 
OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
     }
+    
+    /**
+     * Add schema.
+     *
+     * @param databaseName database name
+     * @param schemaName schema name
+     */
+    public void addSchema(final String databaseName, final String schemaName) {
+        
federationMetaData.getDatabases().get(databaseName).putTable(schemaName, new 
ShardingSphereTable());
+        // TODO add schema only
+        plannerContexts.put(databaseName, 
OptimizerPlannerContextFactory.create(federationMetaData.getDatabases().get(databaseName)));
+    }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 61acc301f02..f3142720bd9 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -134,13 +134,11 @@ public final class ContextManager implements 
AutoCloseable {
      * @param schemaName schema name
      */
     public void addSchema(final String databaseName, final String schemaName) {
-        if (null != 
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().get(schemaName))
 {
+        if 
(metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().containsKey(schemaName))
 {
             return;
         }
-        FederationDatabaseMetaData federationDatabaseMetaData = 
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().get(databaseName);
-        federationDatabaseMetaData.putTable(schemaName, new 
ShardingSphereTable());
-        
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(federationDatabaseMetaData));
         
metaDataContexts.getMetaData().getDatabases().get(databaseName).getSchemas().put(schemaName,
 new ShardingSphereSchema());
+        metaDataContexts.getOptimizerContext().addSchema(databaseName, 
schemaName);
     }
     
     /**
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 1984e6b11bb..759f178ec32 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -79,7 +79,7 @@ public final class ContextManagerTest {
         when(metaDataContexts.getMetaData().getProps()).thenReturn(new 
ConfigurationProperties(new Properties()));
         
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
         
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getProtocolType()).thenReturn(new
 MySQLDatabaseType());
-        
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getSchemas()).thenReturn(Collections.singletonMap("foo_db",
 new ShardingSphereSchema()));
+        
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getSchemas()).thenReturn(new
 HashMap<>(Collections.singletonMap("foo_schema", new ShardingSphereSchema())));
         
when(metaDataContexts.getMetaData().getDatabases().get("foo_db").getRuleMetaData()).thenReturn(new
 ShardingSphereRuleMetaData(Collections.emptyList()));
         
when(metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases()).thenReturn(new
 LinkedHashMap<>());
         
when(metaDataContexts.getOptimizerContext().getParserContexts()).thenReturn(new 
LinkedHashMap<>());
@@ -118,6 +118,19 @@ public final class ContextManagerTest {
         verify(metaDataContexts.getOptimizerContext(), 
times(0)).addDatabase(eq("foo_db"), any(DatabaseType.class));
     }
     
+    @Test
+    public void assertAddSchema() {
+        contextManager.addSchema("foo_db", "bar_schema");
+        
assertTrue(contextManager.getMetaDataContexts().getMetaData().getDatabases().get("foo_db").getSchemas().containsKey("bar_schema"));
+        verify(metaDataContexts.getOptimizerContext()).addSchema("foo_db", 
"bar_schema");
+    }
+    
+    @Test
+    public void assertAddExistedSchema() {
+        contextManager.addSchema("foo_db", "foo_schema");
+        verify(metaDataContexts.getOptimizerContext(), 
times(0)).addSchema("foo_db", "foo_schema");
+    }
+    
     @Test
     public void assertAlterSchemas() {
         contextManager.alterSchemas("foo_db", 
Collections.singletonMap("foo_db", new 
ShardingSphereSchema(Collections.singletonMap("foo_table",

Reply via email to