You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/02/09 07:12:06 UTC
[shardingsphere] branch master updated: Add SchemaTableAggregationReviser (#24072)
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 <zh...@apache.org>
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