tristaZero commented on a change in pull request #11028:
URL: https://github.com/apache/shardingsphere/pull/11028#discussion_r661943638
##########
File path:
shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
##########
@@ -94,21 +96,21 @@ public StandardMetaDataContexts build() throws SQLException
{
Collection<RuleConfiguration> ruleConfigs =
schemaRuleConfigs.get(each);
DatabaseType databaseType =
DatabaseTypeRecognizer.getDatabaseType(dataSourceMap.values());
Collection<ShardingSphereRule> rules =
ShardingSphereRulesBuilder.buildSchemaRules(each, ruleConfigs, databaseType,
dataSourceMap);
- Map<Map<String, TableMetaData>, Map<String, TableMetaData>>
tableMetaDataMap = SchemaBuilder.build(new SchemaBuilderMaterials(databaseType,
dataSourceMap, rules, props));
+ Map<TableMetaData, TableMetaData> tableMetaDatas =
SchemaBuilder.build(new SchemaBuilderMaterials(databaseType, dataSourceMap,
rules, props));
ShardingSphereRuleMetaData ruleMetaData = new
ShardingSphereRuleMetaData(ruleConfigs, rules);
ShardingSphereResource resource = buildResource(databaseType,
dataSourceMap);
- ShardingSphereSchema actualSchema = new
ShardingSphereSchema(tableMetaDataMap.keySet().iterator().next());
+ ShardingSphereSchema actualSchema = new
ShardingSphereSchema(tableMetaDatas.keySet().stream().filter(Objects::nonNull).collect(Collectors.toMap(TableMetaData::getName,
v -> v)));
actualMetaDataMap.put(each, new ShardingSphereMetaData(each,
resource, ruleMetaData, actualSchema));
- metaDataMap.put(each, new ShardingSphereMetaData(each, resource,
ruleMetaData, buildSchema(tableMetaDataMap)));
+ metaDataMap.put(each, new ShardingSphereMetaData(each, resource,
ruleMetaData, buildSchema(tableMetaDatas)));
}
OptimizeContextFactory optimizeContextFactory = new
OptimizeContextFactory(actualMetaDataMap);
return new StandardMetaDataContexts(metaDataMap,
buildGlobalSchemaMetaData(metaDataMap), executorEngine, props,
optimizeContextFactory);
}
-
- private ShardingSphereSchema buildSchema(final Map<Map<String,
TableMetaData>, Map<String, TableMetaData>> tableMetaDataMap) {
- Map<String, TableMetaData> tables = new
HashMap<>(tableMetaDataMap.size(), 1);
- tables.putAll(tableMetaDataMap.keySet().iterator().next());
- tables.putAll(tableMetaDataMap.values().iterator().next());
+
+ private ShardingSphereSchema buildSchema(final Map<TableMetaData,
TableMetaData> tableMetaDatas) {
Review comment:
Hi @totalo
Basically, this PR looks better now. But I still have two points for our
discussion.
1. `Objects::nonNull).collect` , why do we need these filters?
2. To solve the first question, I guess we have to look at
`SchemaBuilder.build()`. I think it is possible that the current handling has
some issues.
As I said before, one logic table corresponds to a physical table, there is
no possibility to do filtering. If there is no rule to generate a logic table,
a physical table will be a logic table (No rule applied.)
##########
File path:
shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
##########
@@ -94,21 +96,21 @@ public StandardMetaDataContexts build() throws SQLException
{
Collection<RuleConfiguration> ruleConfigs =
schemaRuleConfigs.get(each);
DatabaseType databaseType =
DatabaseTypeRecognizer.getDatabaseType(dataSourceMap.values());
Collection<ShardingSphereRule> rules =
ShardingSphereRulesBuilder.buildSchemaRules(each, ruleConfigs, databaseType,
dataSourceMap);
- Map<Map<String, TableMetaData>, Map<String, TableMetaData>>
tableMetaDataMap = SchemaBuilder.build(new SchemaBuilderMaterials(databaseType,
dataSourceMap, rules, props));
+ Map<TableMetaData, TableMetaData> tableMetaDatas =
SchemaBuilder.build(new SchemaBuilderMaterials(databaseType, dataSourceMap,
rules, props));
ShardingSphereRuleMetaData ruleMetaData = new
ShardingSphereRuleMetaData(ruleConfigs, rules);
ShardingSphereResource resource = buildResource(databaseType,
dataSourceMap);
- ShardingSphereSchema actualSchema = new
ShardingSphereSchema(tableMetaDataMap.keySet().iterator().next());
+ ShardingSphereSchema actualSchema = new
ShardingSphereSchema(tableMetaDatas.keySet().stream().filter(Objects::nonNull).collect(Collectors.toMap(TableMetaData::getName,
v -> v)));
actualMetaDataMap.put(each, new ShardingSphereMetaData(each,
resource, ruleMetaData, actualSchema));
- metaDataMap.put(each, new ShardingSphereMetaData(each, resource,
ruleMetaData, buildSchema(tableMetaDataMap)));
+ metaDataMap.put(each, new ShardingSphereMetaData(each, resource,
ruleMetaData, buildSchema(tableMetaDatas)));
}
OptimizeContextFactory optimizeContextFactory = new
OptimizeContextFactory(actualMetaDataMap);
return new StandardMetaDataContexts(metaDataMap,
buildGlobalSchemaMetaData(metaDataMap), executorEngine, props,
optimizeContextFactory);
}
-
- private ShardingSphereSchema buildSchema(final Map<Map<String,
TableMetaData>, Map<String, TableMetaData>> tableMetaDataMap) {
- Map<String, TableMetaData> tables = new
HashMap<>(tableMetaDataMap.size(), 1);
- tables.putAll(tableMetaDataMap.keySet().iterator().next());
- tables.putAll(tableMetaDataMap.values().iterator().next());
+
+ private ShardingSphereSchema buildSchema(final Map<TableMetaData,
TableMetaData> tableMetaDatas) {
Review comment:
Could you reflect on these issues? Maybe we can improve them in the next
PR.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]