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/09 05:35:49 UTC

[shardingsphere] branch master updated: Add ColumnExistedReviser (#24071)

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 25249c0eefd Add ColumnExistedReviser (#24071)
25249c0eefd is described below

commit 25249c0eefdccc6e704559a36bedaddc32cfa67d
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Feb 9 13:35:42 2023 +0800

    Add ColumnExistedReviser (#24071)
---
 ...viser.java => EncryptColumnExistedReviser.java} | 22 ++++++----------------
 .../metadata/reviser/EncryptColumnNameReviser.java | 18 ++++--------------
 .../reviser/EncryptTableMetaDataReviseEntry.java   |  5 +++++
 .../reviser/column/ColumnDataTypeReviser.java      |  2 +-
 ...nNameReviser.java => ColumnExistedReviser.java} | 15 ++++++---------
 .../reviser/column/ColumnNameReviser.java          |  6 ++----
 .../reviser/column/ColumnReviseEngine.java         | 12 ++++++------
 .../decorator/spi/TableMetaDataReviseEntry.java    | 12 ++++++++++++
 8 files changed, 42 insertions(+), 50 deletions(-)

diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnExistedReviser.java
similarity index 64%
copy from features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java
copy to features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnExistedReviser.java
index 75b85c931fb..e7a5165dea5 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnExistedReviser.java
@@ -19,15 +19,14 @@ package org.apache.shardingsphere.encrypt.metadata.reviser;
 
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.EncryptTable;
-import org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnNameReviser;
+import org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnExistedReviser;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
- * Encrypt column name reviser.
+ * Encrypt column existed reviser.
  */
-public final class EncryptColumnNameReviser implements ColumnNameReviser<EncryptRule> {
+public final class EncryptColumnExistedReviser implements ColumnExistedReviser<EncryptRule> {
     
     private final EncryptTable encryptTable;
     
@@ -37,7 +36,7 @@ public final class EncryptColumnNameReviser implements ColumnNameReviser<Encrypt
     
     private final Collection<String> likeQueryColumns;
     
-    public EncryptColumnNameReviser(final EncryptTable encryptTable) {
+    public EncryptColumnExistedReviser(final EncryptTable encryptTable) {
         this.encryptTable = encryptTable;
         plainColumns = encryptTable.getPlainColumns();
         assistedQueryColumns = encryptTable.getAssistedQueryColumns();
@@ -45,16 +44,7 @@ public final class EncryptColumnNameReviser implements ColumnNameReviser<Encrypt
     }
     
     @Override
-    public Optional<String> revise(final String originalName, final String tableName, final EncryptRule rule) {
-        if (plainColumns.contains(originalName)) {
-            return Optional.of(encryptTable.getLogicColumnByPlainColumn(originalName));
-        }
-        if (encryptTable.isCipherColumn(originalName)) {
-            return Optional.of(encryptTable.getLogicColumnByCipherColumn(originalName));
-        }
-        if (!assistedQueryColumns.contains(originalName) && !likeQueryColumns.contains(originalName)) {
-            return Optional.of(originalName);
-        }
-        return Optional.empty();
+    public boolean isExisted(final String originalName, final EncryptRule rule) {
+        return plainColumns.contains(originalName) || encryptTable.isCipherColumn(originalName) || !assistedQueryColumns.contains(originalName) && !likeQueryColumns.contains(originalName);
     }
 }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java
index 75b85c931fb..0300f56edf0 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/metadata/reviser/EncryptColumnNameReviser.java
@@ -22,7 +22,6 @@ import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.infra.metadata.database.schema.decorator.reviser.column.ColumnNameReviser;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
  * Encrypt column name reviser.
@@ -33,28 +32,19 @@ public final class EncryptColumnNameReviser implements ColumnNameReviser<Encrypt
     
     private final Collection<String> plainColumns;
     
-    private final Collection<String> assistedQueryColumns;
-    
-    private final Collection<String> likeQueryColumns;
-    
     public EncryptColumnNameReviser(final EncryptTable encryptTable) {
         this.encryptTable = encryptTable;
         plainColumns = encryptTable.getPlainColumns();
-        assistedQueryColumns = encryptTable.getAssistedQueryColumns();
-        likeQueryColumns = encryptTable.getLikeQueryColumns();
     }
     
     @Override
-    public Optional<String> revise(final String originalName, final String tableName, final EncryptRule rule) {
+    public String revise(final String originalName, final String tableName, final EncryptRule rule) {
         if (plainColumns.contains(originalName)) {
-            return Optional.of(encryptTable.getLogicColumnByPlainColumn(originalName));
+            return encryptTable.getLogicColumnByPlainColumn(originalName);
         }
         if (encryptTable.isCipherColumn(originalName)) {
-            return Optional.of(encryptTable.getLogicColumnByCipherColumn(originalName));
-        }
-        if (!assistedQueryColumns.contains(originalName) && !likeQueryColumns.contains(originalName)) {
-            return Optional.of(originalName);
+            return encryptTable.getLogicColumnByCipherColumn(originalName);
         }
-        return Optional.empty();
+        return originalName;
     }
 }
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/EncryptTableMetaDataReviseEntry.java
index 21f44d2f2d7..668c5e8b828 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/EncryptTableMetaDataReviseEntry.java
@@ -27,6 +27,11 @@ import java.util.Optional;
  */
 public final class EncryptTableMetaDataReviseEntry implements TableMetaDataReviseEntry<EncryptRule> {
     
+    @Override
+    public Optional<EncryptColumnExistedReviser> getColumnExistedReviser(final EncryptRule rule, final String tableName) {
+        return rule.findEncryptTable(tableName).map(EncryptColumnExistedReviser::new);
+    }
+    
     @Override
     public Optional<EncryptColumnNameReviser> getColumnNameReviser(final EncryptRule rule, final String tableName) {
         return rule.findEncryptTable(tableName).map(EncryptColumnNameReviser::new);
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnDataTypeReviser.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnDataTypeReviser.java
index 042794944d5..91ddd9afacd 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnDataTypeReviser.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/decorator/reviser/column/ColumnDataTypeReviser.java
@@ -33,7 +33,7 @@ public interface ColumnDataTypeReviser<T extends ShardingSphereRule> {
     /**
      * Revise column data type.
      *
-     * @param originalName original name
+     * @param originalName original column name
      * @param tableName table name
      * @param rule rule
      * @param databaseType database type
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/ColumnExistedReviser.java
similarity index 75%
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/ColumnExistedReviser.java
index ae2469bd905..a44dc1a697d 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/ColumnExistedReviser.java
@@ -19,22 +19,19 @@ package org.apache.shardingsphere.infra.metadata.database.schema.decorator.revis
 
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
-import java.util.Optional;
-
 /**
- * Column name reviser.
+ * Column existed reviser.
  * 
  * @param <T> type of rule
  */
-public interface ColumnNameReviser<T extends ShardingSphereRule> {
+public interface ColumnExistedReviser<T extends ShardingSphereRule> {
     
     /**
-     * Revise column name.
+     * Judge whether column existed.
      * 
-     * @param originalName original name
-     * @param tableName table name
+     * @param originalName original column name
      * @param rule rule
-     * @return revised column name
+     * @return column existed or not
      */
-    Optional<String> revise(String originalName, String tableName, T rule);
+    boolean isExisted(String originalName, T rule);
 }
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 ae2469bd905..4fe89bcd8f6 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
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.infra.metadata.database.schema.decorator.revis
 
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
-import java.util.Optional;
-
 /**
  * Column name reviser.
  * 
@@ -31,10 +29,10 @@ public interface ColumnNameReviser<T extends ShardingSphereRule> {
     /**
      * Revise column name.
      * 
-     * @param originalName original name
+     * @param originalName original column name
      * @param tableName table name
      * @param rule rule
      * @return revised column name
      */
-    Optional<String> revise(String originalName, String tableName, T rule);
+    String revise(String originalName, String tableName, T rule);
 }
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 fcabcc2aa37..5d5c9803e01 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
@@ -52,19 +52,19 @@ public final class ColumnReviseEngine<T extends ShardingSphereRule> {
      * @return revised column meta data
      */
     public Collection<ColumnMetaData> revise(final String tableName, final Collection<ColumnMetaData> originalMetaDataList) {
+        Optional<? extends ColumnExistedReviser<T>> existedReviser = reviseEntry.getColumnExistedReviser(rule, tableName);
         Optional<? extends ColumnNameReviser<T>> nameReviser = reviseEntry.getColumnNameReviser(rule, tableName);
         Optional<? extends ColumnDataTypeReviser<T>> dataTypeReviser = reviseEntry.getColumnDataTypeReviser(rule, tableName);
         Optional<? extends ColumnGeneratedReviser<T>> generatedReviser = reviseEntry.getColumnGeneratedReviser(rule, tableName);
         Collection<ColumnMetaData> result = new LinkedHashSet<>();
         for (ColumnMetaData each : originalMetaDataList) {
-            Optional<String> name = nameReviser.isPresent() ? nameReviser.get().revise(each.getName(), tableName, rule) : Optional.of(each.getName());
-            if (!name.isPresent()) {
+            if (existedReviser.isPresent() && !existedReviser.get().isExisted(each.getName(), rule)) {
                 continue;
             }
-            Optional<Integer> dataType = dataTypeReviser.isPresent() ? dataTypeReviser.get().revise(each.getName(), tableName, rule, databaseType, dataSource) : Optional.empty();
-            Optional<Boolean> generated = generatedReviser.map(optional -> optional.revise(each, rule));
-            result.add(new ColumnMetaData(name.get(),
-                    dataType.orElseGet(each::getDataType), each.isPrimaryKey(), generated.orElse(each.isGenerated()), each.isCaseSensitive(), each.isVisible(), each.isUnsigned()));
+            String name = nameReviser.isPresent() ? nameReviser.get().revise(each.getName(), tableName, rule) : each.getName();
+            int dataType = dataTypeReviser.map(optional -> optional.revise(each.getName(), tableName, rule, databaseType, dataSource).orElseGet(each::getDataType)).orElseGet(each::getDataType);
+            boolean generated = generatedReviser.map(optional -> optional.revise(each, rule)).orElseGet(each::isGenerated);
+            result.add(new ColumnMetaData(name, dataType, each.isPrimaryKey(), generated, each.isCaseSensitive(), each.isVisible(), each.isUnsigned()));
         }
         return result;
     }
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/TableMetaDataReviseEntry.java
index 9138232191a..febc19c2bcc 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/TableMetaDataReviseEntry.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.database.schema.decorator.spi;
 
 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;
@@ -44,6 +45,17 @@ public interface TableMetaDataReviseEntry<T extends ShardingSphereRule> extends
         return Optional.empty();
     }
     
+    /**
+     * Get column existed reviser.
+     *
+     * @param rule rule
+     * @param tableName table name
+     * @return column existed reviser
+     */
+    default Optional<? extends ColumnExistedReviser<T>> getColumnExistedReviser(final T rule, final String tableName) {
+        return Optional.empty();
+    }
+    
     /**
      * Get column name reviser.
      *