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.
*