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/06/14 12:35:09 UTC
[shardingsphere] branch master updated: Add EncryptRule.getEncryptTable() (#26347)
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 adf81599dd7 Add EncryptRule.getEncryptTable() (#26347)
adf81599dd7 is described below
commit adf81599dd73ae60976d148d9dcae5d5059dc8b0
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed Jun 14 20:34:59 2023 +0800
Add EncryptRule.getEncryptTable() (#26347)
* Add EncryptRule.getEncryptTable()
* Fix test cases
---
.../AssistQueryAndPlainInsertColumnsTokenGenerator.java | 9 +++------
.../generator/EncryptAlterTableTokenGenerator.java | 13 +++++--------
.../generator/EncryptAssignmentTokenGenerator.java | 7 ++-----
.../generator/EncryptCreateTableTokenGenerator.java | 7 ++-----
...EncryptForUseDefaultInsertColumnsTokenGenerator.java | 11 +++--------
.../generator/EncryptIndexColumnTokenGenerator.java | 7 ++-----
.../generator/EncryptInsertOnUpdateTokenGenerator.java | 7 ++-----
.../generator/EncryptInsertValuesTokenGenerator.java | 17 +++++------------
.../generator/EncryptOrderByItemTokenGenerator.java | 6 +++---
.../generator/EncryptPredicateColumnTokenGenerator.java | 5 ++---
.../apache/shardingsphere/encrypt/rule/EncryptRule.java | 13 +++++++++++++
...istQueryAndPlainInsertColumnsTokenGeneratorTest.java | 2 +-
.../token/EncryptInsertOnUpdateTokenGeneratorTest.java | 2 +-
.../generator/EncryptAlterTableTokenGeneratorTest.java | 2 +-
.../generator/EncryptCreateTableTokenGeneratorTest.java | 2 +-
.../shardingsphere/encrypt/rule/EncryptRuleTest.java | 11 +++++++++++
16 files changed, 57 insertions(+), 64 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
index 24b2d733d57..97448f070d2 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/AssistQueryAndPlainInsertColumnsTokenGenerator.java
@@ -17,11 +17,10 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator;
-import com.google.common.base.Preconditions;
import lombok.Setter;
+import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
-import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.infra.rewrite.sql.token.generator.CollectionSQLTokenGenerator;
@@ -32,7 +31,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.Column
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
-import java.util.Optional;
/**
* Assist query and plain insert columns token generator.
@@ -50,10 +48,9 @@ public final class AssistQueryAndPlainInsertColumnsTokenGenerator implements Col
@Override
public Collection<SQLToken> generateSQLTokens(final InsertStatementContext insertStatementContext) {
Collection<SQLToken> result = new LinkedList<>();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
- Preconditions.checkState(encryptTable.isPresent());
+ EncryptTable encryptTable = encryptRule.getEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
for (ColumnSegment each : insertStatementContext.getSqlStatement().getColumns()) {
- List<String> columns = getColumns(encryptTable.get(), each);
+ List<String> columns = getColumns(encryptTable, each);
if (!columns.isEmpty()) {
result.add(new InsertColumnsToken(each.getStopIndex() + 1, columns));
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
index 7d6f7686e77..6e94400adee 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
@@ -63,14 +63,11 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
@Override
public Collection<SQLToken> generateSQLTokens(final AlterTableStatementContext alterTableStatementContext) {
String tableName = alterTableStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return Collections.emptyList();
- }
- Collection<SQLToken> result = new LinkedList<>(getAddColumnTokens(encryptTable.get(), alterTableStatementContext.getSqlStatement().getAddColumnDefinitions()));
- result.addAll(getModifyColumnTokens(encryptTable.get(), alterTableStatementContext.getSqlStatement().getModifyColumnDefinitions()));
- result.addAll(getChangeColumnTokens(encryptTable.get(), alterTableStatementContext.getSqlStatement().getChangeColumnDefinitions()));
- List<SQLToken> dropColumnTokens = getDropColumnTokens(encryptTable.get(), alterTableStatementContext.getSqlStatement().getDropColumnDefinitions());
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
+ Collection<SQLToken> result = new LinkedList<>(getAddColumnTokens(encryptTable, alterTableStatementContext.getSqlStatement().getAddColumnDefinitions()));
+ result.addAll(getModifyColumnTokens(encryptTable, alterTableStatementContext.getSqlStatement().getModifyColumnDefinitions()));
+ result.addAll(getChangeColumnTokens(encryptTable, alterTableStatementContext.getSqlStatement().getChangeColumnDefinitions()));
+ List<SQLToken> dropColumnTokens = getDropColumnTokens(encryptTable, alterTableStatementContext.getSqlStatement().getDropColumnDefinitions());
String databaseName = alterTableStatementContext.getDatabaseType().getType();
if ("SQLServer".equals(databaseName)) {
result.addAll(mergeDropColumnStatement(dropColumnTokens, "", ""));
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
index 9ea9c6cee09..fbd05c961b2 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAssignmentTokenGenerator.java
@@ -67,14 +67,11 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken
public Collection<SQLToken> generateSQLTokens(final SQLStatementContext sqlStatementContext) {
Collection<SQLToken> result = new LinkedList<>();
String tableName = ((TableAvailable) sqlStatementContext).getAllTables().iterator().next().getTableName().getIdentifier().getValue();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return Collections.emptyList();
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
String schemaName = sqlStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), databaseName));
for (AssignmentSegment each : getSetAssignmentSegment(sqlStatementContext.getSqlStatement()).getAssignments()) {
if (encryptRule.findStandardEncryptor(tableName, each.getColumns().get(0).getIdentifier().getValue()).isPresent()) {
- generateSQLToken(schemaName, encryptTable.get(), each).ifPresent(result::add);
+ generateSQLToken(schemaName, encryptTable, each).ifPresent(result::add);
}
}
return result;
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
index 499f4b94946..c228b6bb21b 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptCreateTableTokenGenerator.java
@@ -58,17 +58,14 @@ public final class EncryptCreateTableTokenGenerator implements CollectionSQLToke
public Collection<SQLToken> generateSQLTokens(final CreateTableStatementContext createTableStatementContext) {
Collection<SQLToken> result = new LinkedList<>();
String tableName = createTableStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return Collections.emptyList();
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
List<ColumnDefinitionSegment> columns = new ArrayList<>(createTableStatementContext.getSqlStatement().getColumnDefinitions());
for (int index = 0; index < columns.size(); index++) {
ColumnDefinitionSegment each = columns.get(index);
String columnName = each.getColumnName().getIdentifier().getValue();
Optional<StandardEncryptAlgorithm> encryptor = encryptRule.findStandardEncryptor(tableName, columnName);
if (encryptor.isPresent()) {
- result.addAll(getColumnTokens(encryptTable.get(), columnName, each, columns, index));
+ result.addAll(getColumnTokens(encryptTable, columnName, each, columns, index));
}
}
return result;
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
index 7f115e215cc..05c497b8b5b 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptForUseDefaultInsertColumnsTokenGenerator.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
@@ -29,7 +28,6 @@ import org.apache.shardingsphere.infra.rewrite.sql.token.generator.OptionalSQLTo
import org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.PreviousSQLTokensAware;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.UseDefaultInsertColumnsToken;
-import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.InsertColumnsSegment;
import java.util.Iterator;
@@ -73,9 +71,7 @@ public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
}
private void processPreviousSQLToken(final UseDefaultInsertColumnsToken previousSQLToken, final InsertStatementContext insertStatementContext, final String tableName) {
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> new EncryptTableNotFoundException(tableName));
- List<String> columnNames = getColumnNames(insertStatementContext, encryptTable.get(), previousSQLToken.getColumns());
+ List<String> columnNames = getColumnNames(insertStatementContext, encryptRule.getEncryptTable(tableName), previousSQLToken.getColumns());
previousSQLToken.getColumns().clear();
previousSQLToken.getColumns().addAll(columnNames);
}
@@ -83,9 +79,8 @@ public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
private UseDefaultInsertColumnsToken generateNewSQLToken(final InsertStatementContext insertStatementContext, final String tableName) {
Optional<InsertColumnsSegment> insertColumnsSegment = insertStatementContext.getSqlStatement().getInsertColumns();
Preconditions.checkState(insertColumnsSegment.isPresent());
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> new EncryptTableNotFoundException(tableName));
- return new UseDefaultInsertColumnsToken(insertColumnsSegment.get().getStopIndex(), getColumnNames(insertStatementContext, encryptTable.get(), insertStatementContext.getColumnNames()));
+ return new UseDefaultInsertColumnsToken(
+ insertColumnsSegment.get().getStopIndex(), getColumnNames(insertStatementContext, encryptRule.getEncryptTable(tableName), insertStatementContext.getColumnNames()));
}
private List<String> getColumnNames(final InsertStatementContext sqlStatementContext, final EncryptTable encryptTable, final List<String> currentColumnNames) {
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
index 5edab600cf5..63210ac158a 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptIndexColumnTokenGenerator.java
@@ -58,13 +58,10 @@ public final class EncryptIndexColumnTokenGenerator implements CollectionSQLToke
return Collections.emptyList();
}
String tableName = sqlStatementContext.getTablesContext().getTableNames().iterator().next();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return Collections.emptyList();
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
Collection<SQLToken> result = new LinkedList<>();
for (ColumnSegment each : ((IndexAvailable) sqlStatementContext).getIndexColumns()) {
- encryptRule.findStandardEncryptor(tableName, each.getIdentifier().getValue()).flatMap(optional -> getColumnToken(encryptTable.get(), each)).ifPresent(result::add);
+ encryptRule.findStandardEncryptor(tableName, each.getIdentifier().getValue()).flatMap(optional -> getColumnToken(encryptTable, each)).ifPresent(result::add);
}
return result;
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
index 9cd630a7b85..14ca01de1d7 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertOnUpdateTokenGenerator.java
@@ -74,10 +74,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
}
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
String tableName = insertStatement.getTable().getTableName().getIdentifier().getValue();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return Collections.emptyList();
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
Collection<SQLToken> result = new LinkedList<>();
for (AssignmentSegment each : onDuplicateKeyColumnsSegments) {
boolean leftEncryptorPresent = encryptRule.findStandardEncryptor(tableName, each.getColumns().get(0).getIdentifier().getValue()).isPresent();
@@ -91,7 +88,7 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
if (!leftEncryptorPresent) {
continue;
}
- generateSQLToken(schemaName, encryptTable.get(), each).ifPresent(result::add);
+ generateSQLToken(schemaName, encryptTable, each).ifPresent(result::add);
}
return result;
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
index 6b44907ec1a..1348f456a61 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptInsertValuesTokenGenerator.java
@@ -90,14 +90,11 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
private void processPreviousSQLToken(final InsertStatementContext insertStatementContext, final InsertValuesToken insertValuesToken) {
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return;
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
int count = 0;
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
- encryptToken(encryptTable.get(), insertValuesToken.getInsertValues().get(count), schemaName, tableName, insertStatementContext, each);
+ encryptToken(encryptTable, insertValuesToken.getInsertValues().get(count), schemaName, tableName, insertStatementContext, each);
count++;
}
}
@@ -106,14 +103,11 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
String tableName = insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
Collection<InsertValuesSegment> insertValuesSegments = insertStatementContext.getSqlStatement().getValues();
InsertValuesToken result = new EncryptInsertValuesToken(getStartIndex(insertValuesSegments), getStopIndex(insertValuesSegments));
- Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent()) {
- return result;
- }
+ EncryptTable encryptTable = encryptRule.getEncryptTable(tableName);
String schemaName = insertStatementContext.getTablesContext().getSchemaName().orElseGet(() -> DatabaseTypeEngine.getDefaultSchemaName(insertStatementContext.getDatabaseType(), databaseName));
for (InsertValueContext each : insertStatementContext.getInsertValueContexts()) {
InsertValue insertValueToken = new InsertValue(each.getValueExpressions());
- encryptToken(encryptTable.get(), insertValueToken, schemaName, tableName, insertStatementContext, each);
+ encryptToken(encryptTable, insertValueToken, schemaName, tableName, insertStatementContext, each);
result.getInsertValues().add(insertValueToken);
}
return result;
@@ -185,8 +179,7 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
}
private boolean isAddLiteralExpressionSegment(final InsertValueContext insertValueContext, final int columnIndex) {
- return insertValueContext.getParameters().isEmpty()
- || insertValueContext.getValueExpressions().get(columnIndex) instanceof LiteralExpressionSegment;
+ return insertValueContext.getParameters().isEmpty() || insertValueContext.getValueExpressions().get(columnIndex) instanceof LiteralExpressionSegment;
}
private int getParameterIndexCount(final InsertValue insertValueToken) {
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
index 0a3d51b2f2d..d5973e0591e 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGenerator.java
@@ -69,8 +69,8 @@ public final class EncryptOrderByItemTokenGenerator implements CollectionSQLToke
for (OrderByItem each : getOrderByItems(sqlStatementContext)) {
if (each.getSegment() instanceof ColumnOrderByItemSegment) {
ColumnSegment columnSegment = ((ColumnOrderByItemSegment) each.getSegment()).getColumn();
- Map<String, String> columnTableNames = sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Collections.singletonList(columnSegment), schema);
- result.addAll(generateSQLTokensWithColumnSegments(Collections.singletonList(columnSegment), columnTableNames));
+ Map<String, String> columnTableNames = sqlStatementContext.getTablesContext().findTableNamesByColumnSegment(Collections.singleton(columnSegment), schema);
+ result.addAll(generateSQLTokensWithColumnSegments(Collections.singleton(columnSegment), columnTableNames));
}
}
return result;
@@ -126,6 +126,6 @@ public final class EncryptOrderByItemTokenGenerator implements CollectionSQLToke
}
private Collection<Projection> createColumnProjections(final String columnName, final QuoteCharacter quoteCharacter) {
- return Collections.singletonList(new ColumnProjection(null, new IdentifierValue(columnName, quoteCharacter), null));
+ return Collections.singleton(new ColumnProjection(null, new IdentifierValue(columnName, quoteCharacter), null));
}
}
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 b024e90f38f..86a7af3c0c6 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,10 +85,9 @@ 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()) {
- continue;
+ if (encryptTable.isPresent() && encryptTable.get().findEncryptColumn(each.getIdentifier().getValue()).isPresent()) {
+ result.add(buildSubstitutableColumnNameToken(each, whereSegments, encryptTable.get()));
}
- result.add(buildSubstitutableColumnNameToken(each, whereSegments, encryptTable.get()));
}
return result;
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index fa06dbeffef..d16d7847587 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
import org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
+import org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
import org.apache.shardingsphere.encrypt.exception.metadata.MissingEncryptorException;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -124,6 +125,18 @@ public final class EncryptRule implements DatabaseRule, TableContainedRule {
return Optional.ofNullable(tables.get(tableName.toLowerCase()));
}
+ /**
+ * Get encrypt table.
+ *
+ * @param tableName table name
+ * @return encrypt table
+ */
+ public EncryptTable getEncryptTable(final String tableName) {
+ Optional<EncryptTable> encryptTable = findEncryptTable(tableName);
+ ShardingSpherePreconditions.checkState(encryptTable.isPresent(), () -> new EncryptTableNotFoundException(tableName));
+ return encryptTable.get();
+ }
+
/**
* Find standard encryptor.
*
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
index 30fd3511f3a..e4cbdc252c7 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/AssistQueryAndPlainInsertColumnsTokenGeneratorTest.java
@@ -90,7 +90,7 @@ class AssistQueryAndPlainInsertColumnsTokenGeneratorTest {
EncryptRule result = mock(EncryptRule.class);
EncryptTable encryptTable = mock(EncryptTable.class);
when(encryptTable.findAssistedQueryColumn("foo_col")).thenReturn(Optional.of("assisted_query_col"));
- when(result.findEncryptTable("foo_tbl")).thenReturn(Optional.of(encryptTable));
+ when(result.getEncryptTable("foo_tbl")).thenReturn(encryptTable);
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
index f58011c2599..443d244adb0 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/EncryptInsertOnUpdateTokenGeneratorTest.java
@@ -65,7 +65,7 @@ class EncryptInsertOnUpdateTokenGeneratorTest {
private EncryptRule mockEncryptRule() {
EncryptRule result = mock(EncryptRule.class);
EncryptTable encryptTable = mockEncryptTable();
- when(result.findEncryptTable("t_user")).thenReturn(Optional.of(encryptTable));
+ when(result.getEncryptTable("t_user")).thenReturn(encryptTable);
when(result.findStandardEncryptor("t_user", "mobile")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
when(result.findStandardEncryptor("t_user", "cipher_mobile")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
when(result.encrypt(null, "db_test", "t_user", "mobile", Collections.singletonList(0))).thenReturn(Collections.singletonList("encryptValue"));
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
index 29069322d22..dc8834b228d 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGeneratorTest.java
@@ -60,7 +60,7 @@ class EncryptAlterTableTokenGeneratorTest {
private EncryptRule mockEncryptRule() {
EncryptRule result = mock(EncryptRule.class);
EncryptTable encryptTable = mockEncryptTable();
- when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+ when(result.getEncryptTable("t_encrypt")).thenReturn(encryptTable);
StandardEncryptAlgorithm<?, ?> encryptAlgorithm = mock(StandardEncryptAlgorithm.class);
when(result.findStandardEncryptor("t_encrypt", "certificate_number")).thenReturn(Optional.of(encryptAlgorithm));
when(result.findStandardEncryptor("t_encrypt", "certificate_number_new")).thenReturn(Optional.of(encryptAlgorithm));
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 c11bf9ae83d..8f431536737 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
@@ -59,7 +59,7 @@ class EncryptCreateTableTokenGeneratorTest {
EncryptRule result = mock(EncryptRule.class);
when(result.findStandardEncryptor("t_encrypt", "certificate_number")).thenReturn(Optional.of(mock(StandardEncryptAlgorithm.class)));
EncryptTable encryptTable = mockEncryptTable();
- when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
+ when(result.getEncryptTable("t_encrypt")).thenReturn(encryptTable);
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 544d0bfa762..e1077799d6c 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleCo
import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.exception.algorithm.MismatchedEncryptAlgorithmTypeException;
+import org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.database.DefaultDatabase;
import org.junit.jupiter.api.Test;
@@ -54,6 +55,16 @@ class EncryptRuleTest {
assertTrue(new EncryptRule(createEncryptRuleConfiguration()).findEncryptTable("t_encrypt").isPresent());
}
+ @Test
+ void assertGetEncryptTable() {
+ assertThat(new EncryptRule(createEncryptRuleConfiguration()).getEncryptTable("t_encrypt").getTable(), is("t_encrypt"));
+ }
+
+ @Test
+ void assertGetNotExistedEncryptTable() {
+ assertThrows(EncryptTableNotFoundException.class, () -> new EncryptRule(createEncryptRuleConfiguration()).getEncryptTable("not_existed_tbl"));
+ }
+
@Test
void assertFindStandardEncryptor() {
assertTrue(new EncryptRule(createEncryptRuleConfiguration()).findStandardEncryptor("t_encrypt", "pwd").isPresent());