This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 7847cd42019 Add SchemaTableAggregationReviser (#24072)
7847cd42019 is described below
commit 7847cd42019044901b996fde8e49ec0bb9f4e306
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Feb 9 15:11:57 2023 +0800
Add SchemaTableAggregationReviser (#24072)
---
.../metadata/EncryptSchemaMetaDataDecorator.java | 9 +--
...eEntry.java => EncryptMetaDataReviseEntry.java} | 6 +-
...tabase.schema.decorator.spi.MetaDataReviseEntry | 2 +-
.../metadata/ShardingSchemaMetaDataDecorator.java | 37 +-----------
...Entry.java => ShardingMetaDataReviseEntry.java} | 13 ++++-
.../ShardingSchemaTableAggregationReviser.java | 68 ++++++++++++++++++++++
...abase.schema.decorator.spi.MetaDataReviseEntry} | 2 +-
.../reviser/column/ColumnReviseEngine.java | 4 +-
.../reviser/constraint/ConstraintReviseEngine.java | 4 +-
.../decorator/reviser/index/IndexReviseEngine.java | 4 +-
.../SchemaMetaDataReviseEngine.java} | 49 +++++++++-------
.../schema/SchemaTableAggregationReviser.java | 40 +++++++------
.../reviser/table/TableMetaDataReviseEngine.java | 12 +---
...taReviseEntry.java => MetaDataReviseEntry.java} | 17 +++++-
.../metadata/SingleSchemaMetaDataDecorator.java | 9 +--
...seEntry.java => SingleMetaDataReviseEntry.java} | 6 +-
...tabase.schema.decorator.spi.MetaDataReviseEntry | 2 +-
17 files changed, 166 insertions(+), 118 deletions(-)
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
index 986c9d2da7f..061ba32a226 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/EncryptSchemaMetaDataDecorator.java
@@ -21,17 +21,14 @@ import
org.apache.shardingsphere.encrypt.constant.EncryptOrder;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableMetaDataReviseEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.SchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import javax.sql.DataSource;
-import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.stream.Collectors;
/**
* Schema meta data decorator for encrypt.
@@ -44,9 +41,7 @@ public final class EncryptSchemaMetaDataDecorator implements
RuleBasedSchemaMeta
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
DatabaseType databaseType =
material.getStorageTypes().get(entry.getKey());
DataSource dataSource =
material.getDataSourceMap().get(entry.getKey());
- TableMetaDataReviseEngine<EncryptRule> tableMetaDataReviseEngine =
new TableMetaDataReviseEngine<>(rule, databaseType, dataSource);
- Collection<TableMetaData> tables =
entry.getValue().getTables().stream().map(tableMetaDataReviseEngine::revise).collect(Collectors.toList());
- result.put(entry.getKey(), new SchemaMetaData(entry.getKey(),
tables));
+ result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule,
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
}
return result;
}
diff --git
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptTableMetaDataReviseEntry.java
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
similarity index 89%
rename from
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptTableMetaDataReviseEntry.java
rename to
features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
index 668c5e8b828..d9cc520dff0 100644
---
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptTableMetaDataReviseEntry.java
+++
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptMetaDataReviseEntry.java
@@ -18,14 +18,14 @@
package org.apache.shardingsphere.encrypt.metadata.reviser;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import java.util.Optional;
/**
- * Encrypt table meta data revise entry.
+ * Encrypt meta data revise entry.
*/
-public final class EncryptTableMetaDataReviseEntry implements
TableMetaDataReviseEntry<EncryptRule> {
+public final class EncryptMetaDataReviseEntry implements
MetaDataReviseEntry<EncryptRule> {
@Override
public Optional<EncryptColumnExistedReviser> getColumnExistedReviser(final
EncryptRule rule, final String tableName) {
diff --git
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
b/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
similarity index 90%
rename from
kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
rename to
features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
index aa936b0634a..020133aeeae 100644
---
a/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
+++
b/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.single.metadata.reviser.SingleTableMetaDataReviseEntry
+org.apache.shardingsphere.encrypt.metadata.reviser.EncryptMetaDataReviseEntry
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
index 4e3bb28b177..07514c7d43a 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingSchemaMetaDataDecorator.java
@@ -17,25 +17,18 @@
package org.apache.shardingsphere.sharding.metadata;
-import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableMetaDataReviseEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
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.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.sharding.constant.ShardingOrder;
-import
org.apache.shardingsphere.sharding.exception.metadata.InconsistentShardingTableMetaDataException;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import javax.sql.DataSource;
-import java.util.Collection;
import java.util.LinkedHashMap;
-import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.stream.Collectors;
/**
* Schema meta data decorator for sharding.
@@ -45,40 +38,14 @@ public final class ShardingSchemaMetaDataDecorator
implements RuleBasedSchemaMet
@Override
public Map<String, SchemaMetaData> decorate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final ShardingRule rule, final
GenericSchemaBuilderMaterial material) {
Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap.size(), 1);
- boolean checkTableMetaDataEnabled =
material.getProps().getValue(ConfigurationPropertyKey.CHECK_TABLE_META_DATA_ENABLED);
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
DatabaseType databaseType =
material.getStorageTypes().get(entry.getKey());
DataSource dataSource =
material.getDataSourceMap().get(entry.getKey());
- Collection<TableMetaData> tables = new LinkedList<>();
- for (Entry<String, Collection<TableMetaData>> tableEntry :
getLogicTableMetaDataMap(entry.getValue(), rule, databaseType,
dataSource).entrySet()) {
- if (checkTableMetaDataEnabled) {
- checkUniformed(tableEntry.getKey(), tableEntry.getValue());
- }
- tables.add(tableEntry.getValue().iterator().next());
- }
- result.put(entry.getKey(), new SchemaMetaData(entry.getKey(),
tables));
+ result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule,
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
}
return result;
}
- private Map<String, Collection<TableMetaData>>
getLogicTableMetaDataMap(final SchemaMetaData schemaMetaData, final
ShardingRule rule,
-
final DatabaseType databaseType, final DataSource dataSource) {
- Map<String, Collection<TableMetaData>> result = new LinkedHashMap<>();
- TableMetaDataReviseEngine<ShardingRule> tableMetaDataReviseEngine =
new TableMetaDataReviseEngine<>(rule, databaseType, dataSource);
- for (TableMetaData each : schemaMetaData.getTables()) {
- String logicTableName =
rule.findLogicTableByActualTable(each.getName()).orElse(each.getName());
- result.computeIfAbsent(logicTableName, key -> new
LinkedList<>()).add(tableMetaDataReviseEngine.revise(each));
- }
- return result;
- }
-
- private void checkUniformed(final String logicTableName, final
Collection<TableMetaData> tableMetaDataList) {
- TableMetaData sample = tableMetaDataList.iterator().next();
- Collection<TableMetaDataViolation> violations =
tableMetaDataList.stream()
- .filter(each -> !sample.equals(each)).map(each -> new
TableMetaDataViolation(each.getName(), each)).collect(Collectors.toList());
- ShardingSpherePreconditions.checkState(violations.isEmpty(), () -> new
InconsistentShardingTableMetaDataException(logicTableName, violations));
- }
-
@Override
public int getOrder() {
return ShardingOrder.ORDER;
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingTableMetaDataReviseEntry.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
similarity index 75%
rename from
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingTableMetaDataReviseEntry.java
rename to
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
index 810f8bbd623..662b490b8f5 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingTableMetaDataReviseEntry.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingMetaDataReviseEntry.java
@@ -17,15 +17,22 @@
package org.apache.shardingsphere.sharding.metadata.reviser;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaTableAggregationReviser;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import java.util.Optional;
/**
- * Sharding table meta data revise entry.
+ * Sharding meta data revise entry.
*/
-public final class ShardingTableMetaDataReviseEntry implements
TableMetaDataReviseEntry<ShardingRule> {
+public final class ShardingMetaDataReviseEntry implements
MetaDataReviseEntry<ShardingRule> {
+
+ @Override
+ public Optional<? extends SchemaTableAggregationReviser<ShardingRule>>
getSchemaTableAggregationReviser(final ShardingRule rule, final
ConfigurationProperties props) {
+ return
MetaDataReviseEntry.super.getSchemaTableAggregationReviser(rule, props);
+ }
@Override
public Optional<ShardingTableNameReviser> getTableNameReviser() {
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingSchemaTableAggregationReviser.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingSchemaTableAggregationReviser.java
new file mode 100644
index 00000000000..830d3d053de
--- /dev/null
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingSchemaTableAggregationReviser.java
@@ -0,0 +1,68 @@
+/*
+ * 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.sharding.metadata.reviser;
+
+import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaTableAggregationReviser;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.sharding.exception.metadata.InconsistentShardingTableMetaDataException;
+import org.apache.shardingsphere.sharding.metadata.TableMetaDataViolation;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
+
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * Sharding schema table aggregation reviser.
+ */
+@RequiredArgsConstructor
+public final class ShardingSchemaTableAggregationReviser implements
SchemaTableAggregationReviser<ShardingRule> {
+
+ private final boolean checkTableMetaDataEnabled;
+
+ private final Map<String, Collection<TableMetaData>> tableMetaDataMap =
new LinkedHashMap<>();
+
+ @Override
+ public void add(final TableMetaData metaData) {
+ tableMetaDataMap.computeIfAbsent(metaData.getName(), key -> new
LinkedList<>()).add(metaData);
+ }
+
+ @Override
+ public Collection<TableMetaData> aggregate(final ShardingRule rule) {
+ Collection<TableMetaData> result = new LinkedList<>();
+ for (Entry<String, Collection<TableMetaData>> entry :
tableMetaDataMap.entrySet()) {
+ if (checkTableMetaDataEnabled) {
+ checkUniformed(entry.getKey(), entry.getValue());
+ }
+ result.add(entry.getValue().iterator().next());
+ }
+ return result;
+ }
+
+ private void checkUniformed(final String logicTableName, final
Collection<TableMetaData> tableMetaDataList) {
+ TableMetaData sample = tableMetaDataList.iterator().next();
+ Collection<TableMetaDataViolation> violations =
tableMetaDataList.stream()
+ .filter(each -> !sample.equals(each)).map(each -> new
TableMetaDataViolation(each.getName(), each)).collect(Collectors.toList());
+ ShardingSpherePreconditions.checkState(violations.isEmpty(), () -> new
InconsistentShardingTableMetaDataException(logicTableName, violations));
+ }
+}
diff --git
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
b/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
similarity index 90%
rename from
features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
rename to
features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
index 7c6ab16861d..02f44432f4d 100644
---
a/features/encrypt/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
+++
b/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.encrypt.metadata.reviser.EncryptTableMetaDataReviseEntry
+org.apache.shardingsphere.sharding.metadata.reviser.ShardingMetaDataReviseEntry
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnReviseEngine.java
index 5d5c9803e01..5ac2ae49c2c 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnReviseEngine.java
@@ -19,7 +19,7 @@ package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.revis
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -42,7 +42,7 @@ public final class ColumnReviseEngine<T extends
ShardingSphereRule> {
private final DataSource dataSource;
- private final TableMetaDataReviseEntry<T> reviseEntry;
+ private final MetaDataReviseEntry<T> reviseEntry;
/**
* Revise column meta data.
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/constraint/ConstraintReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/constraint/ConstraintReviseEngine.java
index c06fa00bdc6..984073315a0 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/constraint/ConstraintReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/constraint/ConstraintReviseEngine.java
@@ -18,7 +18,7 @@
package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.constraint;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -37,7 +37,7 @@ public final class ConstraintReviseEngine<T extends
ShardingSphereRule> {
private final T rule;
- private final TableMetaDataReviseEntry<T> reviseEntry;
+ private final MetaDataReviseEntry<T> reviseEntry;
/**
* Revise constraint meta data.
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/index/IndexReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/index/IndexReviseEngine.java
index e3186412362..67035d56a2d 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/index/IndexReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/index/IndexReviseEngine.java
@@ -18,7 +18,7 @@
package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.index;
import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.IndexMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -37,7 +37,7 @@ public final class IndexReviseEngine<T extends
ShardingSphereRule> {
private final T rule;
- private final TableMetaDataReviseEntry<T> reviseEntry;
+ private final MetaDataReviseEntry<T> reviseEntry;
/**
* Revise index meta data.
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
similarity index 51%
copy from
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
copy to
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
index ade5a624f77..4b855f27cbb 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaMetaDataReviseEngine.java
@@ -15,53 +15,60 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table;
+package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema;
import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnReviseEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.constraint.ConstraintReviseEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.index.IndexReviseEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableMetaDataReviseEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
+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.util.spi.type.typed.TypedSPILoader;
import javax.sql.DataSource;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
- * Table meta data revise engine.
+ * Schema meta data revise engine.
*
* @param <T> type of rule
*/
@RequiredArgsConstructor
-public final class TableMetaDataReviseEngine<T extends ShardingSphereRule> {
+public final class SchemaMetaDataReviseEngine<T extends ShardingSphereRule> {
private final T rule;
+ private final ConfigurationProperties props;
+
private final DatabaseType databaseType;
private final DataSource dataSource;
/**
- * Revise table meta data.
+ * Revise schema meta data.
*
- * @param originalMetaData original table meta data
- * @return revised table meta data
+ * @param originalMetaData original schema meta data
+ * @return revised schema data
*/
@SuppressWarnings("unchecked")
- public TableMetaData revise(final TableMetaData originalMetaData) {
+ public SchemaMetaData revise(final SchemaMetaData originalMetaData) {
@SuppressWarnings("rawtypes")
- Optional<TableMetaDataReviseEntry> reviseEntry =
TypedSPILoader.findService(TableMetaDataReviseEntry.class,
rule.getClass().getSimpleName());
- return reviseEntry.map(optional -> revise(originalMetaData,
optional)).orElse(originalMetaData);
- }
-
- private TableMetaData revise(final TableMetaData originalMetaData, final
TableMetaDataReviseEntry<T> reviseEntry) {
- Optional<? extends TableNameReviser<T>> tableNameReviser =
reviseEntry.getTableNameReviser();
- String revisedTableName = tableNameReviser.map(optional ->
optional.revise(originalMetaData.getName(),
rule)).orElse(originalMetaData.getName());
- return new TableMetaData(revisedTableName, new
ColumnReviseEngine<>(rule, databaseType, dataSource,
reviseEntry).revise(originalMetaData.getName(), originalMetaData.getColumns()),
- new IndexReviseEngine<>(rule,
reviseEntry).revise(revisedTableName, originalMetaData.getIndexes()),
- new ConstraintReviseEngine<>(rule,
reviseEntry).revise(revisedTableName, originalMetaData.getConstrains()));
+ Optional<MetaDataReviseEntry> reviseEntry =
TypedSPILoader.findService(MetaDataReviseEntry.class,
rule.getClass().getSimpleName());
+ if (!reviseEntry.isPresent()) {
+ return originalMetaData;
+ }
+ @SuppressWarnings("rawtypes")
+ TableMetaDataReviseEngine<T> tableMetaDataReviseEngine = new
TableMetaDataReviseEngine<>(rule, databaseType, dataSource, reviseEntry.get());
+ Optional<? extends SchemaTableAggregationReviser<T>>
aggregationReviser = reviseEntry.get().getSchemaTableAggregationReviser(rule,
props);
+ if (!aggregationReviser.isPresent()) {
+ return new SchemaMetaData(originalMetaData.getName(),
originalMetaData.getTables().stream().map(tableMetaDataReviseEngine::revise).collect(Collectors.toList()));
+ }
+ for (TableMetaData each : originalMetaData.getTables()) {
+
aggregationReviser.get().add(tableMetaDataReviseEngine.revise(each));
+ }
+ return new SchemaMetaData(originalMetaData.getName(),
aggregationReviser.get().aggregate(rule));
}
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaTableAggregationReviser.java
similarity index 52%
copy from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
copy to
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaTableAggregationReviser.java
index 626fb9b9992..f819a39ed63 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/schema/SchemaTableAggregationReviser.java
@@ -15,30 +15,32 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.single.metadata.reviser;
+package
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
-import org.apache.shardingsphere.single.rule.SingleRule;
+import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import java.util.Optional;
+import java.util.Collection;
/**
- * Single table meta data revise entry.
+ * Schema table aggregation reviser.
+ *
+ * @param <T> type of rule
*/
-public final class SingleTableMetaDataReviseEntry implements
TableMetaDataReviseEntry<SingleRule> {
+public interface SchemaTableAggregationReviser<T extends ShardingSphereRule> {
- @Override
- public Optional<SingleIndexReviser> getIndexReviser(final SingleRule rule,
final String tableName) {
- return Optional.of(new SingleIndexReviser());
- }
+ /**
+ * Add table meta data.
+ *
+ * @param metaData table meta data
+ */
+ void add(TableMetaData metaData);
- @Override
- public Optional<SingleConstraintReviser> getConstraintReviser(final
SingleRule rule, final String tableName) {
- return Optional.of(new SingleConstraintReviser());
- }
-
- @Override
- public String getType() {
- return SingleRule.class.getSimpleName();
- }
+ /**
+ * Aggregate table meta data list.
+ *
+ * @param rule rule
+ * @return aggregated meta data list
+ */
+ Collection<TableMetaData> aggregate(T rule);
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
index ade5a624f77..c1445e61c3d 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/table/TableMetaDataReviseEngine.java
@@ -22,10 +22,9 @@ import
org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnReviseEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.constraint.ConstraintReviseEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.index.IndexReviseEngine;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import javax.sql.DataSource;
import java.util.Optional;
@@ -44,20 +43,15 @@ public final class TableMetaDataReviseEngine<T extends
ShardingSphereRule> {
private final DataSource dataSource;
+ private final MetaDataReviseEntry<T> reviseEntry;
+
/**
* Revise table meta data.
*
* @param originalMetaData original table meta data
* @return revised table meta data
*/
- @SuppressWarnings("unchecked")
public TableMetaData revise(final TableMetaData originalMetaData) {
- @SuppressWarnings("rawtypes")
- Optional<TableMetaDataReviseEntry> reviseEntry =
TypedSPILoader.findService(TableMetaDataReviseEntry.class,
rule.getClass().getSimpleName());
- return reviseEntry.map(optional -> revise(originalMetaData,
optional)).orElse(originalMetaData);
- }
-
- private TableMetaData revise(final TableMetaData originalMetaData, final
TableMetaDataReviseEntry<T> reviseEntry) {
Optional<? extends TableNameReviser<T>> tableNameReviser =
reviseEntry.getTableNameReviser();
String revisedTableName = tableNameReviser.map(optional ->
optional.revise(originalMetaData.getName(),
rule)).orElse(originalMetaData.getName());
return new TableMetaData(revisedTableName, new
ColumnReviseEngine<>(rule, databaseType, dataSource,
reviseEntry).revise(originalMetaData.getName(), originalMetaData.getColumns()),
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/TableMetaDataReviseEntry.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
similarity index 85%
rename from
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/TableMetaDataReviseEntry.java
rename to
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
index febc19c2bcc..24d690eade2 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/TableMetaDataReviseEntry.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/spi/MetaDataReviseEntry.java
@@ -17,12 +17,14 @@
package org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnDataTypeReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnExistedReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnGeneratedReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnNameReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.constraint.ConstraintReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.index.IndexReviser;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaTableAggregationReviser;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableNameReviser;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
@@ -30,11 +32,22 @@ import
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
import java.util.Optional;
/**
- * Table name revise entry.
+ * Meta data revise entry.
*
* @param <T> type of rule
*/
-public interface TableMetaDataReviseEntry<T extends ShardingSphereRule>
extends TypedSPI {
+public interface MetaDataReviseEntry<T extends ShardingSphereRule> extends
TypedSPI {
+
+ /**
+ * Get schema table aggregation reviser.
+ *
+ * @param rule rule
+ * @param props configuration properties
+ * @return schema table aggregation reviser
+ */
+ default Optional<? extends SchemaTableAggregationReviser<T>>
getSchemaTableAggregationReviser(final T rule, final ConfigurationProperties
props) {
+ return Optional.empty();
+ }
/**
* Get table name reviser.
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
index 2ed77d761b1..ec656ca065b 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/SingleSchemaMetaDataDecorator.java
@@ -19,19 +19,16 @@ package org.apache.shardingsphere.single.metadata;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.table.TableMetaDataReviseEngine;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.schema.SchemaMetaDataReviseEngine;
import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.RuleBasedSchemaMetaDataDecorator;
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.single.constant.SingleOrder;
import org.apache.shardingsphere.single.rule.SingleRule;
import javax.sql.DataSource;
-import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.stream.Collectors;
/**
* Schema meta data decorator for single.
@@ -44,9 +41,7 @@ public final class SingleSchemaMetaDataDecorator implements
RuleBasedSchemaMetaD
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
DatabaseType databaseType =
material.getStorageTypes().get(entry.getKey());
DataSource dataSource =
material.getDataSourceMap().get(entry.getKey());
- TableMetaDataReviseEngine<SingleRule> tableMetaDataReviseEngine =
new TableMetaDataReviseEngine<>(rule, databaseType, dataSource);
- Collection<TableMetaData> tables =
entry.getValue().getTables().stream().map(tableMetaDataReviseEngine::revise).collect(Collectors.toList());
- result.put(entry.getKey(), new SchemaMetaData(entry.getKey(),
tables));
+ result.put(entry.getKey(), new SchemaMetaDataReviseEngine<>(rule,
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
}
return result;
}
diff --git
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
similarity index 89%
rename from
kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
rename to
kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
index 626fb9b9992..10e2b1b6291 100644
---
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleTableMetaDataReviseEntry.java
+++
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/metadata/reviser/SingleMetaDataReviseEntry.java
@@ -17,15 +17,15 @@
package org.apache.shardingsphere.single.metadata.reviser;
-import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry;
+import
org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry;
import org.apache.shardingsphere.single.rule.SingleRule;
import java.util.Optional;
/**
- * Single table meta data revise entry.
+ * Single meta data revise entry.
*/
-public final class SingleTableMetaDataReviseEntry implements
TableMetaDataReviseEntry<SingleRule> {
+public final class SingleMetaDataReviseEntry implements
MetaDataReviseEntry<SingleRule> {
@Override
public Optional<SingleIndexReviser> getIndexReviser(final SingleRule rule,
final String tableName) {
diff --git
a/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
similarity index 90%
rename from
features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
rename to
kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
index 680c4d4c6d9..ab365ba16fa 100644
---
a/features/sharding/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.TableMetaDataReviseEntry
+++
b/kernel/single/core/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi.MetaDataReviseEntry
@@ -15,4 +15,4 @@
# limitations under the License.
#
-org.apache.shardingsphere.sharding.metadata.reviser.ShardingTableMetaDataReviseEntry
+org.apache.shardingsphere.single.metadata.reviser.SingleMetaDataReviseEntry