You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/02/06 10:28:24 UTC
[shardingsphere] branch master updated: Add ShardingConstraintReviser (#24027)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 17c576ef0a2 Add ShardingConstraintReviser (#24027)
17c576ef0a2 is described below
commit 17c576ef0a2659c4e2eeacc0eaaf21e9ad7265e9
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Feb 6 18:28:16 2023 +0800
Add ShardingConstraintReviser (#24027)
* Add ShardingIndexReviser
* Add ShardingConstraintReviser
---
.../metadata/ShardingSchemaMetaDataDecorator.java | 26 ++--------
.../reviser/ShardingConstraintReviser.java | 55 ++++++++++++++++++++++
2 files changed, 58 insertions(+), 23 deletions(-)
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 fc98652c19d..b7737346943 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
@@ -18,29 +18,27 @@
package org.apache.shardingsphere.sharding.metadata;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
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.RuleBasedSchemaMetaDataDecorator;
-import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
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.sharding.constant.ShardingOrder;
import org.apache.shardingsphere.sharding.exception.metadata.InconsistentShardingTableMetaDataException;
import org.apache.shardingsphere.sharding.metadata.reviser.ShardingColumnGeneratedReviser;
+import org.apache.shardingsphere.sharding.metadata.reviser.ShardingConstraintReviser;
import org.apache.shardingsphere.sharding.metadata.reviser.ShardingIndexReviser;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sharding.rule.TableRule;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Optional;
import java.util.stream.Collectors;
/**
@@ -70,10 +68,9 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
}
private TableMetaData createTableMetaData(final ShardingRule rule, final TableRule tableRule, final TableMetaData tableMetaData) {
- Collection<ConstraintMetaData> constraintMetaDataList = getConstraintMetaDataList(tableMetaData, rule, tableRule);
return new TableMetaData(tableRule.getLogicTable(), new ColumnReviseEngine().revise(tableMetaData.getColumns(), Collections.singleton(new ShardingColumnGeneratedReviser(tableRule))),
new IndexReviseEngine().revise(tableMetaData.getName(), tableMetaData.getIndexes(), Collections.singleton(new ShardingIndexReviser(tableRule))),
- constraintMetaDataList);
+ new ConstraintReviseEngine().revise(tableMetaData.getName(), tableMetaData.getConstrains(), Collections.singleton(new ShardingConstraintReviser(rule, tableRule))));
}
private Map<String, Collection<TableMetaData>> getLogicTableMetaDataMap(final SchemaMetaData schemaMetaData, final ShardingRule rule) {
@@ -95,23 +92,6 @@ public final class ShardingSchemaMetaDataDecorator implements RuleBasedSchemaMet
}
}
- private Collection<ConstraintMetaData> getConstraintMetaDataList(final TableMetaData tableMetaData, final ShardingRule shardingRule, final TableRule tableRule) {
- Collection<ConstraintMetaData> result = new HashSet<>();
- for (ConstraintMetaData each : tableMetaData.getConstrains()) {
- for (DataNode dataNode : tableRule.getActualDataNodes()) {
- String referencedTableName = each.getReferencedTableName();
- getLogicIndex(each.getName(), dataNode.getTableName()).ifPresent(optional -> result.add(
- new ConstraintMetaData(optional, shardingRule.findLogicTableByActualTable(referencedTableName).orElse(referencedTableName))));
- }
- }
- return result;
- }
-
- private Optional<String> getLogicIndex(final String actualIndexName, final String actualTableName) {
- String indexNameSuffix = "_" + actualTableName;
- return actualIndexName.endsWith(indexNameSuffix) ? Optional.of(actualIndexName.replace(indexNameSuffix, "")) : Optional.empty();
- }
-
@Override
public int getOrder() {
return ShardingOrder.ORDER;
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingConstraintReviser.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingConstraintReviser.java
new file mode 100644
index 00000000000..738ad91c975
--- /dev/null
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingConstraintReviser.java
@@ -0,0 +1,55 @@
+/*
+ * 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.datanode.DataNode;
+import org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.constraint.ConstraintReviser;
+import org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
+import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.sharding.rule.TableRule;
+
+import java.util.Optional;
+
+/**
+ * Sharding constraint reviser.
+ */
+@RequiredArgsConstructor
+public final class ShardingConstraintReviser implements ConstraintReviser {
+
+ private final ShardingRule shardingRule;
+
+ private final TableRule tableRule;
+
+ @Override
+ public Optional<ConstraintMetaData> revise(final String tableName, final ConstraintMetaData originalMetaData) {
+ for (DataNode each : tableRule.getActualDataNodes()) {
+ String referencedTableName = originalMetaData.getReferencedTableName();
+ Optional<String> logicIndexName = getLogicIndex(originalMetaData.getName(), each.getTableName());
+ if (logicIndexName.isPresent()) {
+ return Optional.of(new ConstraintMetaData(logicIndexName.get(), shardingRule.findLogicTableByActualTable(referencedTableName).orElse(referencedTableName)));
+ }
+ }
+ return Optional.empty();
+ }
+
+ private Optional<String> getLogicIndex(final String actualIndexName, final String actualTableName) {
+ String indexNameSuffix = "_" + actualTableName;
+ return actualIndexName.endsWith(indexNameSuffix) ? Optional.of(actualIndexName.replace(indexNameSuffix, "")) : Optional.empty();
+ }
+}