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 <[email protected]>
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();
+    }
+}

Reply via email to