You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/06/29 05:31:18 UTC
[shardingsphere] branch master updated: Refactor ContextManager.addSchema (#18679)
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 <zh...@apache.org>
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",