You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/18 15:03:07 UTC
[shardingsphere] branch master updated: Remove EncryptTable.findEncryptColumn() (#26418)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 38ad82ed863 Remove EncryptTable.findEncryptColumn() (#26418)
38ad82ed863 is described below
commit 38ad82ed8638f98a1c7b78a94c2c0baff05991d1
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Jun 18 23:03:00 2023 +0800
Remove EncryptTable.findEncryptColumn() (#26418)
* Refactor EncryptConditionEngine
* Refactor EncryptPredicateColumnTokenGenerator
* Remove EncryptTable.findEncryptColumn()
---
.../rewrite/condition/EncryptConditionEngine.java | 9 ++++---
.../EncryptPredicateColumnTokenGenerator.java | 2 +-
.../generator/EncryptProjectionTokenGenerator.java | 5 ++--
.../shardingsphere/encrypt/rule/EncryptTable.java | 30 ++++++++--------------
.../EncryptCreateTableTokenGeneratorTest.java | 3 ---
5 files changed, 19 insertions(+), 30 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
index 08396319c02..37437b52f29 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/condition/EncryptConditionEngine.java
@@ -21,8 +21,8 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException;
import org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptBinaryCondition;
import org.apache.shardingsphere.encrypt.rewrite.condition.impl.EncryptInCondition;
-import org.apache.shardingsphere.encrypt.rule.EncryptColumn;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -118,9 +118,10 @@ public final class EncryptConditionEngine {
}
for (ColumnSegment each : ColumnExtractor.extract(expression)) {
String tableName = expressionTableNames.getOrDefault(each.getExpression(), "");
- Optional<EncryptColumn> encryptColumn = encryptRule.findEncryptTable(tableName).flatMap(optional -> optional.findEncryptColumn(each.getIdentifier().getValue()));
- Optional<EncryptCondition> encryptCondition = encryptColumn.isPresent() ? createEncryptCondition(expression, tableName) : Optional.empty();
- encryptCondition.ifPresent(encryptConditions::add);
+ Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
+ if (encryptTable.isPresent() && encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
+ createEncryptCondition(expression, tableName).ifPresent(encryptConditions::add);
+ }
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
index 86a7af3c0c6..ae769607a4b 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
@@ -85,7 +85,7 @@ public final class EncryptPredicateColumnTokenGenerator implements CollectionSQL
for (ColumnSegment each : columnSegments) {
String tableName = Optional.ofNullable(columnExpressionTableNames.get(each.getExpression())).orElse("");
Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (encryptTable.isPresent() && encryptTable.get().findEncryptColumn(each.getIdentifier().getValue()).isPresent()) {
+ if (encryptTable.isPresent() && encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
result.add(buildSubstitutableColumnNameToken(each, whereSegments, encryptTable.get()));
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index 606f402d429..8a0948571fe 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -120,10 +120,11 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
List<Projection> projections = new LinkedList<>();
for (Projection each : actualColumns) {
String tableName = columnTableNames.get(each.getExpression());
- if (null == tableName || !encryptRule.findEncryptTable(tableName).flatMap(optional -> optional.findEncryptColumn(each.getColumnLabel())).isPresent()) {
+ Optional<EncryptTable> encryptTable = null == tableName ? Optional.empty() : encryptRule.findEncryptTable(tableName);
+ if (!encryptTable.isPresent() || !encryptTable.get().isEncryptColumn(each.getColumnLabel())) {
projections.add(each.getAlias().map(optional -> (Projection) new ColumnProjection(null, optional, null)).orElse(each));
} else if (each instanceof ColumnProjection) {
- encryptRule.findEncryptTable(tableName).ifPresent(optional -> projections.addAll(generateProjections(optional, (ColumnProjection) each, subqueryType, true, segment)));
+ projections.addAll(generateProjections(encryptTable.get(), (ColumnProjection) each, subqueryType, true, segment));
}
}
int startIndex = segment.getOwner().isPresent() ? segment.getOwner().get().getStartIndex() : segment.getStartIndex();
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
index 78fb07cd8f2..256a62815c7 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfig
import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.exception.metadata.EncryptColumnNotFoundException;
import org.apache.shardingsphere.encrypt.exception.metadata.EncryptLogicColumnNotFoundException;
+import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import java.util.Collection;
import java.util.LinkedList;
@@ -57,12 +58,10 @@ public final class EncryptTable {
EncryptColumnItem cipherColumnItem = new EncryptColumnItem(config.getCipher().getName(), config.getCipher().getEncryptorName());
EncryptColumn result = new EncryptColumn(config.getName(), cipherColumnItem);
if (config.getAssistedQuery().isPresent()) {
- EncryptColumnItem assistedQueryColumn = new EncryptColumnItem(config.getAssistedQuery().get().getName(), config.getAssistedQuery().get().getEncryptorName());
- result.setAssistedQuery(assistedQueryColumn);
+ result.setAssistedQuery(new EncryptColumnItem(config.getAssistedQuery().get().getName(), config.getAssistedQuery().get().getEncryptorName()));
}
if (config.getLikeQuery().isPresent()) {
- EncryptColumnItem likeQueryColumn = new EncryptColumnItem(config.getLikeQuery().get().getName(), config.getLikeQuery().get().getEncryptorName());
- result.setLikeQuery(likeQueryColumn);
+ result.setLikeQuery(new EncryptColumnItem(config.getLikeQuery().get().getName(), config.getLikeQuery().get().getEncryptorName()));
}
return result;
}
@@ -122,16 +121,6 @@ public final class EncryptTable {
throw new EncryptLogicColumnNotFoundException(cipherColumnName);
}
- /**
- * Is encrypt column or not.
- *
- * @param logicColumnName logic column name
- * @return encrypt column or not
- */
- public boolean isEncryptColumn(final String logicColumnName) {
- return columns.containsKey(logicColumnName);
- }
-
/**
* Is cipher column or not.
*
@@ -216,13 +205,13 @@ public final class EncryptTable {
}
/**
- * Find encrypt column.
- *
+ * Is encrypt column or not.
+ *
* @param logicColumnName logic column name
- * @return encrypt column
+ * @return encrypt column or not
*/
- public Optional<EncryptColumn> findEncryptColumn(final String logicColumnName) {
- return Optional.ofNullable(columns.get(logicColumnName));
+ public boolean isEncryptColumn(final String logicColumnName) {
+ return columns.containsKey(logicColumnName);
}
/**
@@ -232,6 +221,7 @@ public final class EncryptTable {
* @return encrypt column
*/
public EncryptColumn getEncryptColumn(final String logicColumnName) {
- return findEncryptColumn(logicColumnName).orElseThrow(() -> new EncryptColumnNotFoundException(table, logicColumnName));
+ ShardingSpherePreconditions.checkState(isEncryptColumn(logicColumnName), () -> new EncryptColumnNotFoundException(table, logicColumnName));
+ return columns.get(logicColumnName);
}
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
index e1bb6facf72..3f300318a63 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGeneratorTest.java
@@ -36,7 +36,6 @@ import org.junit.jupiter.api.Test;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import java.util.Optional;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
@@ -64,12 +63,10 @@ class EncryptCreateTableTokenGeneratorTest {
private EncryptTable mockEncryptTable() {
EncryptTable result = mock(EncryptTable.class);
EncryptColumn column = mockEncryptColumn();
- when(result.getLogicColumns()).thenReturn(Collections.singletonList("t_encrypt"));
when(result.isEncryptColumn("certificate_number")).thenReturn(true);
when(result.getCipherColumn("certificate_number")).thenReturn(column.getCipher().getName());
when(result.findAssistedQueryColumn("certificate_number")).thenReturn(column.getAssistedQuery().map(EncryptColumnItem::getName));
when(result.findLikeQueryColumn("certificate_number")).thenReturn(column.getLikeQuery().map(EncryptColumnItem::getName));
- when(result.findEncryptColumn("certificate_number")).thenReturn(Optional.of(column));
return result;
}