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 3bdd3f8cc65 Remove SchemaMetaDataBuilder and move load metadata logic
to GenericSchemaBuilder (#17976)
3bdd3f8cc65 is described below
commit 3bdd3f8cc65b49d9a4f6b796716522838e10fd5a
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu May 26 19:33:08 2022 +0800
Remove SchemaMetaDataBuilder and move load metadata logic to
GenericSchemaBuilder (#17976)
* Refactor SchemaMetaDataBuilder and TableMetaDataLoaderMaterials
* remove SchemaMetaDataLoader
* fix checkstyle
* fix checkstyle
* fix checkstyle
---
.../metadata/database/ShardingSphereDatabase.java | 6 +-
.../schema/builder/GenericSchemaBuilder.java | 93 +++++++++++++++---
.../schema/builder/SchemaMetaDataBuilder.java | 109 ---------------------
.../schema/loader/SchemaMetaDataLoaderEngine.java | 4 +-
...DataLoader.java => SchemaTableNamesLoader.java} | 4 +-
.../schema/builder/SchemaMetaDataBuilderTest.java | 20 ++--
...erTest.java => SchemaTableNamesLoaderTest.java} | 4 +-
.../type/AlterTableStatementSchemaRefresher.java | 8 +-
.../type/AlterViewStatementSchemaRefresher.java | 8 +-
.../type/CreateTableStatementSchemaRefresher.java | 8 +-
.../type/CreateViewStatementSchemaRefresher.java | 8 +-
.../type/RenameTableStatementSchemaRefresher.java | 8 +-
.../datanode/SingleTableDataNodeLoader.java | 4 +-
.../metadata/SingleTableSchemaBuilderTest.java | 9 +-
.../mode/manager/ContextManager.java | 13 ++-
15 files changed, 131 insertions(+), 175 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 888c90c80e3..faa369bfe32 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -26,8 +26,9 @@ import
org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRulesBuilder;
@@ -71,7 +72,8 @@ public final class ShardingSphereDatabase {
final DatabaseConfiguration
databaseConfig, final ConfigurationProperties props) throws SQLException {
Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, databaseConfig, props);
Map<String, ShardingSphereSchema> schemas = new ConcurrentHashMap<>();
- schemas.putAll(GenericSchemaBuilder.build(name, protocolType,
storageType, databaseConfig.getDataSources(), databaseRules, props));
+ schemas.putAll(GenericSchemaBuilder.build(new
GenericSchemaBuilderMaterials(
+ protocolType, storageType, databaseConfig.getDataSources(),
databaseRules, props, name)));
schemas.putAll(SystemSchemaBuilder.build(name, protocolType));
return create(name, protocolType, databaseConfig, databaseRules,
schemas);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index ede990d816f..a5339446492 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -17,20 +17,22 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
@@ -42,22 +44,26 @@ public final class GenericSchemaBuilder {
/**
* Build generic schema.
*
- * @param databaseName database name
- * @param protocolType protocol type
- * @param storageType storage type
- * @param dataSourceMap data source map
- * @param rules rules
- * @param props configuration properties
+ * @param materials generic schema builder materials
* @return generic schema map
* @throws SQLException SQL exception
*/
- public static Map<String, ShardingSphereSchema> build(final String
databaseName, final DatabaseType protocolType, final DatabaseType storageType,
final Map<String, DataSource> dataSourceMap,
- final
Collection<ShardingSphereRule> rules, final ConfigurationProperties props)
throws SQLException {
- String defaultSchemaName =
DatabaseTypeEngine.getDefaultSchemaName(protocolType, databaseName);
- Map<String, SchemaMetaData> schemaMetaDataMap =
SchemaMetaDataBuilder.load(
- getAllTableNames(rules), new
GenericSchemaBuilderMaterials(protocolType, storageType, dataSourceMap, rules,
props, defaultSchemaName));
+ public static Map<String, ShardingSphereSchema> build(final
GenericSchemaBuilderMaterials materials) throws SQLException {
+ return build(getAllTableNames(materials.getRules()), materials);
+ }
+
+ /**
+ * Build generic schema.
+ *
+ * @param tableNames table names
+ * @param materials generic schema builder materials
+ * @return generic schema map
+ * @throws SQLException SQL exception
+ */
+ public static Map<String, ShardingSphereSchema> build(final
Collection<String> tableNames, final GenericSchemaBuilderMaterials materials)
throws SQLException {
+ Map<String, SchemaMetaData> schemaMetaDataMap =
loadSchemaMetaDataMap(tableNames, materials);
if (schemaMetaDataMap.isEmpty()) {
- return Collections.singletonMap(defaultSchemaName, new
ShardingSphereSchema());
+ return Collections.singletonMap(materials.getDefaultSchemaName(),
new ShardingSphereSchema());
}
Map<String, ShardingSphereSchema> result = new ConcurrentHashMap<>();
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
@@ -66,7 +72,64 @@ public final class GenericSchemaBuilder {
return result;
}
+ private static Map<String, SchemaMetaData> loadSchemaMetaDataMap(final
Collection<String> tableNames, final GenericSchemaBuilderMaterials materials)
throws SQLException {
+ Map<String, SchemaMetaData> result =
loadSchemasWithTableContainedRules(tableNames, materials);
+ if (!materials.getProtocolType().equals(materials.getStorageType())) {
+ result = translate(result, materials);
+ }
+ return decorate(result, materials);
+ }
+
private static Collection<String> getAllTableNames(final
Collection<ShardingSphereRule> rules) {
return rules.stream().filter(each -> each instanceof
TableContainedRule).flatMap(each -> ((TableContainedRule)
each).getTables().stream()).collect(Collectors.toSet());
}
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static Map<String, SchemaMetaData>
loadSchemasWithTableContainedRules(final Collection<String> tableNames, final
GenericSchemaBuilderMaterials materials) throws SQLException {
+ Map<String, SchemaMetaData> result = new LinkedHashMap<>();
+ for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
+ ShardingSphereRule rule = entry.getKey();
+ if (rule instanceof TableContainedRule) {
+ Collection<String> loadingTables =
filterLoadingTables(tableNames, (TableContainedRule) rule, result.values());
+ mergeSchemaMetaDataMap(result,
entry.getValue().load(loadingTables, (TableContainedRule) rule,
materials).values());
+ }
+ }
+ return result;
+ }
+
+ private static Collection<String> filterLoadingTables(final
Collection<String> tableNames, final TableContainedRule rule, final
Collection<SchemaMetaData> loadedSchemaMetaDataList) {
+ return tableNames.stream().filter(each ->
rule.getTables().contains(each) && !containsTable(loadedSchemaMetaDataList,
each)).collect(Collectors.toList());
+ }
+
+ private static boolean containsTable(final Collection<SchemaMetaData>
schemaMetaDataList, final String tableName) {
+ return schemaMetaDataList.stream().anyMatch(each ->
each.getTables().containsKey(tableName));
+ }
+
+ private static void mergeSchemaMetaDataMap(final Map<String,
SchemaMetaData> schemaMetaDataMap, final Collection<SchemaMetaData>
addedSchemaMetaDataList) {
+ for (SchemaMetaData each : addedSchemaMetaDataList) {
+ SchemaMetaData schemaMetaData =
schemaMetaDataMap.computeIfAbsent(each.getName(), key -> new
SchemaMetaData(each.getName(), new LinkedHashMap<>()));
+ schemaMetaData.getTables().putAll(each.getTables());
+ }
+ }
+
+ private static Map<String, SchemaMetaData> translate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) {
+ Map<String, SchemaMetaData> result = new LinkedHashMap<>();
+ Map<String, TableMetaData> tableMetaDataMap =
Optional.ofNullable(schemaMetaDataMap.get(
+
DatabaseTypeEngine.getDefaultSchemaName(materials.getStorageType(),
materials.getDefaultSchemaName()))).map(SchemaMetaData::getTables).orElseGet(Collections::emptyMap);
+ String frontendSchemaName =
DatabaseTypeEngine.getDefaultSchemaName(materials.getProtocolType(),
materials.getDefaultSchemaName());
+ result.put(frontendSchemaName, new SchemaMetaData(frontendSchemaName,
tableMetaDataMap));
+ return result;
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) throws SQLException {
+ Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap);
+ for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
+ if (!(entry.getKey() instanceof TableContainedRule)) {
+ continue;
+ }
+ result.putAll(entry.getValue().decorate(result,
(TableContainedRule) entry.getKey(), materials));
+ }
+ return result;
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilder.java
deleted file mode 100644
index 6f4aa752609..00000000000
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilder.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.metadata.database.schema.builder;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.spi.RuleBasedSchemaMetaDataBuilderFactory;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.rule.identifier.type.TableContainedRule;
-
-import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-/**
- * Schema meta data builder.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SchemaMetaDataBuilder {
-
- /**
- * Load table meta data.
- *
- * @param tableNames table names
- * @param materials schema builder materials
- * @return table meta data map
- * @throws SQLException SQL exception
- */
- public static Map<String, SchemaMetaData> load(final Collection<String>
tableNames, final GenericSchemaBuilderMaterials materials) throws SQLException {
- Map<String, SchemaMetaData> result =
loadSchemasWithTableContainedRules(tableNames, materials);
- if (!materials.getProtocolType().equals(materials.getStorageType())) {
- result = translate(result, materials);
- }
- return decorate(result, materials);
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- private static Map<String, SchemaMetaData>
loadSchemasWithTableContainedRules(final Collection<String> tableNames, final
GenericSchemaBuilderMaterials materials) throws SQLException {
- Map<String, SchemaMetaData> result = new LinkedHashMap<>();
- for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
- ShardingSphereRule rule = entry.getKey();
- if (rule instanceof TableContainedRule) {
- Collection<String> loadingTables =
filterLoadingTables(tableNames, (TableContainedRule) rule, result.values());
- mergeSchemaMetaDataMap(result,
entry.getValue().load(loadingTables, (TableContainedRule) rule,
materials).values());
- }
- }
- return result;
- }
-
- private static Collection<String> filterLoadingTables(final
Collection<String> tableNames, final TableContainedRule rule, final
Collection<SchemaMetaData> loadedSchemaMetaDataList) {
- return tableNames.stream().filter(each ->
rule.getTables().contains(each) && !containsTable(loadedSchemaMetaDataList,
each)).collect(Collectors.toList());
- }
-
- private static boolean containsTable(final Collection<SchemaMetaData>
schemaMetaDataList, final String tableName) {
- return schemaMetaDataList.stream().anyMatch(each ->
each.getTables().containsKey(tableName));
- }
-
- private static void mergeSchemaMetaDataMap(final Map<String,
SchemaMetaData> schemaMetaDataMap, final Collection<SchemaMetaData>
addedSchemaMetaDataList) {
- for (SchemaMetaData each : addedSchemaMetaDataList) {
- SchemaMetaData schemaMetaData =
schemaMetaDataMap.computeIfAbsent(each.getName(), key -> new
SchemaMetaData(each.getName(), new LinkedHashMap<>()));
- schemaMetaData.getTables().putAll(each.getTables());
- }
- }
-
- private static Map<String, SchemaMetaData> translate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) {
- Map<String, SchemaMetaData> result = new LinkedHashMap<>();
- Map<String, TableMetaData> tableMetaDataMap =
Optional.ofNullable(schemaMetaDataMap.get(
-
DatabaseTypeEngine.getDefaultSchemaName(materials.getStorageType(),
materials.getDefaultSchemaName()))).map(SchemaMetaData::getTables).orElseGet(Collections::emptyMap);
- String frontendSchemaName =
DatabaseTypeEngine.getDefaultSchemaName(materials.getProtocolType(),
materials.getDefaultSchemaName());
- result.put(frontendSchemaName, new SchemaMetaData(frontendSchemaName,
tableMetaDataMap));
- return result;
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- private static Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap);
- for (Entry<ShardingSphereRule, RuleBasedSchemaMetaDataBuilder> entry :
RuleBasedSchemaMetaDataBuilderFactory.getInstances(materials.getRules()).entrySet())
{
- if (!(entry.getKey() instanceof TableContainedRule)) {
- continue;
- }
- result.putAll(entry.getValue().decorate(result,
(TableContainedRule) entry.getKey(), materials));
- }
- return result;
- }
-}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
index 6279d141639..d43209a2292 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/SchemaMetaDataLoaderEngine.java
@@ -24,10 +24,10 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.common.TableMetaDataLoader;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoader;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.spi.DialectSchemaMetaDataLoaderFactory;
import java.sql.SQLException;
import java.util.Collection;
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoader.java
similarity index 98%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoader.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoader.java
index 33de0d48f25..8fdb38f7b7e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoader.java
@@ -35,10 +35,10 @@ import java.util.LinkedList;
import java.util.Map;
/**
- * Schema meta data loader.
+ * Schema table names loader.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SchemaMetaDataLoader {
+public final class SchemaTableNamesLoader {
private static final String TABLE_TYPE = "TABLE";
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
index 00ecd7b7abb..9e59a24b37e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SchemaMetaDataBuilderTest.java
@@ -18,11 +18,11 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.CommonFixtureRule;
import
org.apache.shardingsphere.infra.metadata.database.schema.fixture.rule.DataNodeContainedFixtureRule;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.test.mock.MockedDataSource;
import org.junit.Test;
@@ -49,23 +49,23 @@ public final class SchemaMetaDataBuilderTest {
@Test
public void assertLoadWithExistedTableName() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
"sharding_db");
-
assertFalse(SchemaMetaDataBuilder.load(Collections.singletonList("data_node_routed_table1"),
materials).isEmpty());
+ GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
+ Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
+
assertFalse(GenericSchemaBuilder.build(Collections.singletonList("data_node_routed_table1"),
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
}
@Test
public void assertLoadWithNotExistedTableName() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
"sharding_db");
-
assertTrue(SchemaMetaDataBuilder.load(Collections.singletonList("invalid_table"),
materials).isEmpty());
+ GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
+ Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
+
assertTrue(GenericSchemaBuilder.build(Collections.singletonList("invalid_table"),
materials).get(DefaultDatabase.LOGIC_NAME).getTables().isEmpty());
}
@Test
public void assertLoadAllTables() throws SQLException {
- GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap("logic_db", new MockedDataSource()),
- Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
"sharding_db");
- Map<String, SchemaMetaData> actual = SchemaMetaDataBuilder.load(new
DataNodeContainedFixtureRule().getTables(), materials);
+ GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, new MockedDataSource()),
+ Arrays.asList(new CommonFixtureRule(), new
DataNodeContainedFixtureRule()), new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
+ Map<String, ShardingSphereSchema> actual =
GenericSchemaBuilder.build(new DataNodeContainedFixtureRule().getTables(),
materials);
assertThat(actual.size(), is(1));
assertTables(new
ShardingSphereSchema(actual.values().iterator().next().getTables()).getTables());
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoaderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoaderTest.java
similarity index 94%
rename from
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoaderTest.java
rename to
shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoaderTest.java
index 13bbc6258be..bdc859ef00c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaMetaDataLoaderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/loader/common/SchemaTableNamesLoaderTest.java
@@ -37,7 +37,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
-public final class SchemaMetaDataLoaderTest {
+public final class SchemaTableNamesLoaderTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private DataSource dataSource;
@@ -59,7 +59,7 @@ public final class SchemaMetaDataLoaderTest {
@Test
public void assertLoadSchemaTableNames() throws SQLException {
-
assertThat(SchemaMetaDataLoader.loadSchemaTableNames(DefaultDatabase.LOGIC_NAME,
+
assertThat(SchemaTableNamesLoader.loadSchemaTableNames(DefaultDatabase.LOGIC_NAME,
new PostgreSQLDatabaseType(), dataSource),
is(Collections.singletonMap("public", Collections.singletonList("tbl"))));
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
index 6f34c9d1848..b5113aba8dd 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterTableStatementSchemaRefresher.java
@@ -24,10 +24,10 @@ 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.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -79,8 +79,8 @@ public final class AlterTableStatementSchemaRefresher
implements MetaDataRefresh
}
GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
database.getResource().getDatabaseType(),
database.getResource().getDataSources(), database.getRuleMetaData().getRules(),
props, schemaName);
- Map<String, SchemaMetaData> metaDataMap =
SchemaMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(metaDataMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
+ Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
actualTableMetaData.ifPresent(optional -> {
database.getSchemas().get(schemaName).put(tableName, optional);
federationDatabaseMetaData.putTableMetadata(schemaName, optional);
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
index cc89ba75d7f..ed49bf8b22d 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/AlterViewStatementSchemaRefresher.java
@@ -24,10 +24,10 @@ 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.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -82,8 +82,8 @@ public final class AlterViewStatementSchemaRefresher
implements MetaDataRefreshe
}
GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
database.getResource().getDatabaseType(),
database.getResource().getDataSources(), database.getRuleMetaData().getRules(),
props, schemaName);
- Map<String, SchemaMetaData> metaDataMap =
SchemaMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- Optional<TableMetaData> actualViewMetaData =
Optional.ofNullable(metaDataMap.get(schemaName)).map(optional ->
optional.getTables().get(viewName));
+ Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(viewName), materials);
+ Optional<TableMetaData> actualViewMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTables().get(viewName));
actualViewMetaData.ifPresent(optional -> {
database.getSchemas().get(schemaName).put(viewName, optional);
federationDatabaseMetaData.putTableMetadata(schemaName, optional);
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
index 8b1cf8ea62e..9ac780d7c1c 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateTableStatementSchemaRefresher.java
@@ -24,10 +24,10 @@ 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.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -55,8 +55,8 @@ public final class CreateTableStatementSchemaRefresher
implements MetaDataRefres
}
GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
database.getResource().getDatabaseType(),
database.getResource().getDataSources(), database.getRuleMetaData().getRules(),
props, schemaName);
- Map<String, SchemaMetaData> metaDataMap =
SchemaMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(metaDataMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
+ Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
actualTableMetaData.ifPresent(optional -> {
database.getSchemas().get(schemaName).put(tableName, optional);
federationDatabaseMetaData.putTableMetadata(schemaName, optional);
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
index 3f9c7db8358..e4f4e9f94ba 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/CreateViewStatementSchemaRefresher.java
@@ -24,10 +24,10 @@ 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.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -55,8 +55,8 @@ public final class CreateViewStatementSchemaRefresher
implements MetaDataRefresh
}
GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
database.getResource().getDatabaseType(),
database.getResource().getDataSources(), database.getRuleMetaData().getRules(),
props, schemaName);
- Map<String, SchemaMetaData> metaDataMap =
SchemaMetaDataBuilder.load(Collections.singletonList(viewName), materials);
- Optional<TableMetaData> actualViewMetaData =
Optional.ofNullable(metaDataMap.get(schemaName)).map(optional ->
optional.getTables().get(viewName));
+ Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(viewName), materials);
+ Optional<TableMetaData> actualViewMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTables().get(viewName));
actualViewMetaData.ifPresent(optional -> {
database.getSchemas().get(schemaName).put(viewName, optional);
federationDatabaseMetaData.putTableMetadata(schemaName, optional);
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
index 03b4ad880c6..01981ffbc60 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/type/RenameTableStatementSchemaRefresher.java
@@ -24,10 +24,10 @@ 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.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.event.SchemaAlteredEvent;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
@@ -77,8 +77,8 @@ public final class RenameTableStatementSchemaRefresher
implements MetaDataRefres
}
GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
database.getResource().getDatabaseType(),
database.getResource().getDataSources(), database.getRuleMetaData().getRules(),
props, schemaName);
- Map<String, SchemaMetaData> metaDataMap =
SchemaMetaDataBuilder.load(Collections.singletonList(tableName), materials);
- Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(metaDataMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
+ Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), materials);
+ Optional<TableMetaData> actualTableMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTables().get(tableName));
actualTableMetaData.ifPresent(optional -> {
database.getSchemas().get(schemaName).put(tableName, optional);
federationDatabaseMetaData.putTableMetadata(schemaName, optional);
diff --git
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/datanode/SingleTableDataNodeLoader.java
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/datanode/SingleTableDataNodeLoader.java
index c52ca92e585..c70e108c65f 100644
---
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/datanode/SingleTableDataNodeLoader.java
+++
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/main/java/org/apache/shardingsphere/singletable/datanode/SingleTableDataNodeLoader.java
@@ -25,7 +25,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.common.SchemaMetaDataLoader;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.common.SchemaTableNamesLoader;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -104,7 +104,7 @@ public final class SingleTableDataNodeLoader {
private static Map<String, Collection<String>> loadSchemaTableNames(final
String databaseName, final DatabaseType databaseType, final DataSource
dataSource, final String dataSourceName) {
try {
- return SchemaMetaDataLoader.loadSchemaTableNames(databaseName,
databaseType, dataSource);
+ return SchemaTableNamesLoader.loadSchemaTableNames(databaseName,
databaseType, dataSource);
} catch (final SQLException ex) {
throw new ShardingSphereConfigurationException(String.format("Can
not load table, databaseName: %s, dataSourceName: %s", databaseName,
dataSourceName), ex);
}
diff --git
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaBuilderTest.java
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaBuilderTest.java
index 775025d3c9f..cf43075b66b 100644
---
a/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaBuilderTest.java
+++
b/shardingsphere-kernel/shardingsphere-single-table/shardingsphere-single-table-core/src/test/java/org/apache/shardingsphere/singletable/metadata/SingleTableSchemaBuilderTest.java
@@ -21,9 +21,9 @@ import lombok.SneakyThrows;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.singletable.config.SingleTableRuleConfiguration;
@@ -74,8 +74,9 @@ public final class SingleTableSchemaBuilderTest {
when(dataSource.getConnection()).thenReturn(connection);
Collection<ShardingSphereRule> rules =
Collections.singletonList(mockSingleTableRuleLoad(connection));
mockSQLLoad(connection);
- Map<String, SchemaMetaData> actual =
SchemaMetaDataBuilder.load(Arrays.asList(singleTableNames), new
GenericSchemaBuilderMaterials(
- databaseType, databaseType,
Collections.singletonMap(DefaultDatabase.LOGIC_NAME, dataSource), rules, new
ConfigurationProperties(new Properties()), DefaultDatabase.LOGIC_NAME));
+ GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(databaseType, databaseType,
+ Collections.singletonMap(DefaultDatabase.LOGIC_NAME,
dataSource), rules, new ConfigurationProperties(new Properties()),
DefaultDatabase.LOGIC_NAME);
+ Map<String, ShardingSphereSchema> actual =
GenericSchemaBuilder.build(Arrays.asList(singleTableNames), materials);
assertThat(actual.size(), is(1));
assertThat(actual.values().iterator().next().getTables().size(),
is(2));
assertActualOfSingleTables(actual.values().iterator().next().getTables().values());
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 39c0a285c2f..d03025b4b2d 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
@@ -40,9 +40,7 @@ import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRule
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterials;
-import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SchemaMetaDataBuilder;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.SystemSchemaBuilder;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
@@ -455,9 +453,9 @@ public final class ContextManager implements AutoCloseable {
}
private void loadTableMetaData(final String databaseName, final String
schemaName, final String tableName, final GenericSchemaBuilderMaterials
materials) throws SQLException {
- SchemaMetaData schemaMetaData =
SchemaMetaDataBuilder.load(Collections.singletonList(tableName),
materials).getOrDefault(schemaName, new SchemaMetaData("",
Collections.emptyMap()));
- if (schemaMetaData.getTables().containsKey(tableName)) {
-
metaDataContexts.getDatabase(databaseName).getSchemas().get(schemaName).put(tableName,
schemaMetaData.getTables().get(tableName));
+ ShardingSphereSchema schema =
GenericSchemaBuilder.build(Collections.singletonList(tableName),
materials).getOrDefault(schemaName, new ShardingSphereSchema());
+ if (schema.getTables().containsKey(tableName)) {
+
metaDataContexts.getDatabase(databaseName).getSchemas().get(schemaName).put(tableName,
schema.getTables().get(tableName));
metaDataContexts.getPersistService().ifPresent(optional ->
optional.getSchemaMetaDataService()
.persistMetaData(databaseName, schemaName,
metaDataContexts.getDatabase(databaseName).getSchemas().get(schemaName)));
}
@@ -469,8 +467,9 @@ public final class ContextManager implements AutoCloseable {
refreshRules(databaseName, database);
DatabaseType databaseType =
DatabaseTypeEngine.getDatabaseType(dataSourceMap.values());
Map<String, ShardingSphereSchema> result = new ConcurrentHashMap<>();
- result.putAll(GenericSchemaBuilder.build(databaseName,
database.getProtocolType(), databaseType,
- dataSourceMap, database.getRuleMetaData().getRules(),
metaDataContexts.getMetaData().getProps()));
+ GenericSchemaBuilderMaterials materials = new
GenericSchemaBuilderMaterials(database.getProtocolType(),
+ databaseType, dataSourceMap,
database.getRuleMetaData().getRules(),
metaDataContexts.getMetaData().getProps(), databaseName);
+ result.putAll(GenericSchemaBuilder.build(materials));
result.putAll(SystemSchemaBuilder.build(databaseName,
database.getProtocolType()));
return result;
}