This is an automated email from the ASF dual-hosted git repository.

tuichenchuxin 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 1682dd931ca Add ColumnGeneratedReviser (#24012)
1682dd931ca is described below

commit 1682dd931ca5dd81df68427e1a5f5641580d2afa
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Feb 6 11:00:58 2023 +0800

    Add ColumnGeneratedReviser (#24012)
---
 .../metadata/ShardingSchemaMetaDataDecorator.java  | 14 ++++--------
 .../reviser/ShardingColumnGeneratedReviser.java    | 25 ++++++++++------------
 ...ameReviser.java => ColumnGeneratedReviser.java} | 13 ++++++-----
 .../reviser/column/ColumnNameReviser.java          |  3 +--
 4 files changed, 22 insertions(+), 33 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 97fbf624f31..5811eaecf8e 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
@@ -20,6 +20,7 @@ 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.spi.RuleBasedSchemaMetaDataDecorator;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ConstraintMetaData;
@@ -28,10 +29,12 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.Sch
 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.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;
@@ -67,7 +70,7 @@ public final class ShardingSchemaMetaDataDecorator implements 
RuleBasedSchemaMet
     }
     
     private TableMetaData createTableMetaData(final ShardingRule rule, final 
TableRule tableRule, final TableMetaData tableMetaData) {
-        Collection<ColumnMetaData> columnMetaDataList = 
getColumnMetaDataList(tableMetaData, tableRule);
+        Collection<ColumnMetaData> columnMetaDataList = new 
ColumnReviseEngine().revise(tableMetaData.getColumns(), 
Collections.singleton(new ShardingColumnGeneratedReviser(tableRule)));
         Collection<IndexMetaData> indexMetaDataList = 
getIndexMetaDataList(tableMetaData, tableRule);
         Collection<ConstraintMetaData> constraintMetaDataList = 
getConstraintMetaDataList(tableMetaData, rule, tableRule);
         return new TableMetaData(tableRule.getLogicTable(), 
columnMetaDataList, indexMetaDataList, constraintMetaDataList);
@@ -92,15 +95,6 @@ public final class ShardingSchemaMetaDataDecorator 
implements RuleBasedSchemaMet
         }
     }
     
-    private Collection<ColumnMetaData> getColumnMetaDataList(final 
TableMetaData tableMetaData, final TableRule tableRule) {
-        Collection<ColumnMetaData> result = new LinkedList<>();
-        for (ColumnMetaData each : tableMetaData.getColumns()) {
-            boolean generated = 
each.getName().equalsIgnoreCase(tableRule.getGenerateKeyColumn().orElse(null));
-            result.add(new ColumnMetaData(each.getName(), each.getDataType(), 
each.isPrimaryKey(), generated, each.isCaseSensitive(), each.isVisible(), 
each.isUnsigned()));
-        }
-        return result;
-    }
-    
     private Collection<IndexMetaData> getIndexMetaDataList(final TableMetaData 
tableMetaData, final TableRule tableRule) {
         Collection<IndexMetaData> result = new HashSet<>();
         for (IndexMetaData each : tableMetaData.getIndexes()) {
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingColumnGeneratedReviser.java
similarity index 53%
copy from 
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
copy to 
features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingColumnGeneratedReviser.java
index bcc357319d4..9528bf1aaf3 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/ShardingColumnGeneratedReviser.java
@@ -15,26 +15,23 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column;
+package org.apache.shardingsphere.sharding.metadata.reviser;
 
+import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnGeneratedReviser;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
-
-import java.util.Optional;
+import org.apache.shardingsphere.sharding.rule.TableRule;
 
 /**
- * Column name reviser.
+ * Sharding column generated reviser.
  */
-public abstract class ColumnNameReviser implements ColumnReviser {
+@RequiredArgsConstructor
+public final class ShardingColumnGeneratedReviser extends 
ColumnGeneratedReviser {
     
-    @Override
-    public final Optional<ColumnMetaData> revise(final ColumnMetaData 
originalMetaData) {
-        return getColumnName(originalMetaData.getName()).map(optional -> 
createColumnMetaData(optional, originalMetaData));
-    }
+    private final TableRule tableRule;
     
-    private ColumnMetaData createColumnMetaData(final String name, final 
ColumnMetaData metaData) {
-        return new ColumnMetaData(name, metaData.getDataType(),
-                metaData.isPrimaryKey(), metaData.isGenerated(), 
metaData.isCaseSensitive(), metaData.isVisible(), metaData.isUnsigned());
+    @Override
+    protected boolean isGenerated(final ColumnMetaData originalMetaData) {
+        return 
originalMetaData.getName().equalsIgnoreCase(tableRule.getGenerateKeyColumn().orElse(null));
     }
-    
-    protected abstract Optional<String> getColumnName(String originalName);
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnGeneratedReviser.java
similarity index 66%
copy from 
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
copy to 
infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnGeneratedReviser.java
index bcc357319d4..c2f09c1e588 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnGeneratedReviser.java
@@ -22,19 +22,18 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.Col
 import java.util.Optional;
 
 /**
- * Column name reviser.
+ * Column generated reviser.
  */
-public abstract class ColumnNameReviser implements ColumnReviser {
+public abstract class ColumnGeneratedReviser implements ColumnReviser {
     
     @Override
     public final Optional<ColumnMetaData> revise(final ColumnMetaData 
originalMetaData) {
-        return getColumnName(originalMetaData.getName()).map(optional -> 
createColumnMetaData(optional, originalMetaData));
+        return Optional.of(createColumnMetaData(isGenerated(originalMetaData), 
originalMetaData));
     }
     
-    private ColumnMetaData createColumnMetaData(final String name, final 
ColumnMetaData metaData) {
-        return new ColumnMetaData(name, metaData.getDataType(),
-                metaData.isPrimaryKey(), metaData.isGenerated(), 
metaData.isCaseSensitive(), metaData.isVisible(), metaData.isUnsigned());
+    private ColumnMetaData createColumnMetaData(final boolean isGenerated, 
final ColumnMetaData metaData) {
+        return new ColumnMetaData(metaData.getName(), metaData.getDataType(), 
metaData.isPrimaryKey(), isGenerated, metaData.isCaseSensitive(), 
metaData.isVisible(), metaData.isUnsigned());
     }
     
-    protected abstract Optional<String> getColumnName(String originalName);
+    protected abstract boolean isGenerated(ColumnMetaData originalMetaData);
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
index bcc357319d4..8119a930c4c 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnNameReviser.java
@@ -32,8 +32,7 @@ public abstract class ColumnNameReviser implements 
ColumnReviser {
     }
     
     private ColumnMetaData createColumnMetaData(final String name, final 
ColumnMetaData metaData) {
-        return new ColumnMetaData(name, metaData.getDataType(),
-                metaData.isPrimaryKey(), metaData.isGenerated(), 
metaData.isCaseSensitive(), metaData.isVisible(), metaData.isUnsigned());
+        return new ColumnMetaData(name, metaData.getDataType(), 
metaData.isPrimaryKey(), metaData.isGenerated(), metaData.isCaseSensitive(), 
metaData.isVisible(), metaData.isUnsigned());
     }
     
     protected abstract Optional<String> getColumnName(String originalName);

Reply via email to