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/23 02:52:08 UTC
[shardingsphere] branch master updated: Remove EncryptTable.findAssistedQueryColumn() and findLikeQueryColumn() (#26505)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 b52f2163fda Remove EncryptTable.findAssistedQueryColumn() and findLikeQueryColumn() (#26505)
b52f2163fda is described below
commit b52f2163fda175712698fc0ceaf17543b8e53155
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Jun 23 10:52:01 2023 +0800
Remove EncryptTable.findAssistedQueryColumn() and findLikeQueryColumn() (#26505)
* Remove EncryptTable.getCipherColumn()
* Remove EncryptTable.findAssistedQueryColumn() and findLikeQueryColumn()
---
.../generator/EncryptAlterTableTokenGenerator.java | 52 +++++++++++-----------
.../generator/EncryptAssignmentTokenGenerator.java | 7 +--
.../EncryptCreateTableTokenGenerator.java | 32 ++++++-------
...ptForUseDefaultInsertColumnsTokenGenerator.java | 24 +++++-----
.../EncryptIndexColumnTokenGenerator.java | 11 ++---
.../EncryptOrderByItemTokenGenerator.java | 19 ++++----
.../EncryptPredicateColumnTokenGenerator.java | 16 +++----
.../generator/EncryptProjectionTokenGenerator.java | 46 ++++++++++---------
.../EncryptInsertDerivedColumnsTokenGenerator.java | 11 ++++-
.../EncryptInsertOnUpdateTokenGenerator.java | 27 ++++++-----
.../insert/EncryptInsertValuesTokenGenerator.java | 4 +-
.../shardingsphere/encrypt/rule/EncryptTable.java | 30 -------------
.../EncryptAlterTableTokenGeneratorTest.java | 6 ++-
.../EncryptCreateTableTokenGeneratorTest.java | 7 ++-
.../EncryptOrderByItemTokenGeneratorTest.java | 4 ++
.../EncryptProjectionTokenGeneratorTest.java | 4 ++
...ryptInsertDerivedColumnsTokenGeneratorTest.java | 7 ++-
.../encrypt/rule/EncryptTableTest.java | 25 -----------
18 files changed, 153 insertions(+), 179 deletions(-)
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 b0631a0476b..1e9687cea32 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
@@ -94,23 +94,23 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
for (ColumnDefinitionSegment each : addColumnDefinitionSegment.getColumnDefinitions()) {
String columnName = each.getColumnName().getIdentifier().getValue();
if (encryptTable.isEncryptColumn(columnName)) {
- result.addAll(getAddColumnTokens(encryptTable, columnName, addColumnDefinitionSegment, each));
+ result.addAll(getAddColumnTokens(encryptTable.getEncryptColumn(columnName), addColumnDefinitionSegment, each));
}
}
getAddColumnPositionToken(encryptTable, addColumnDefinitionSegment).ifPresent(result::add);
return result;
}
- private Collection<SQLToken> getAddColumnTokens(final EncryptTable encryptTable, final String columnName,
+ private Collection<SQLToken> getAddColumnTokens(final EncryptColumn encryptColumn,
final AddColumnDefinitionSegment addColumnDefinitionSegment, final ColumnDefinitionSegment columnDefinitionSegment) {
Collection<SQLToken> result = new LinkedList<>();
result.add(new RemoveToken(columnDefinitionSegment.getStartIndex(), columnDefinitionSegment.getColumnName().getStopIndex()));
result.add(new EncryptAlterTableToken(columnDefinitionSegment.getColumnName().getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(),
- encryptTable.getEncryptColumn(columnName).getCipher().getName(), null));
- encryptTable.findAssistedQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(
- addColumnDefinitionSegment.getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(), optional, ", ADD COLUMN")).ifPresent(result::add);
- encryptTable.findLikeQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(
- addColumnDefinitionSegment.getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(), optional, ", ADD COLUMN")).ifPresent(result::add);
+ encryptColumn.getCipher().getName(), null));
+ encryptColumn.getAssistedQuery().map(optional -> new EncryptAlterTableToken(
+ addColumnDefinitionSegment.getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ", ADD COLUMN")).ifPresent(result::add);
+ encryptColumn.getLikeQuery().map(optional -> new EncryptAlterTableToken(
+ addColumnDefinitionSegment.getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ", ADD COLUMN")).ifPresent(result::add);
return result;
}
@@ -130,23 +130,23 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
for (ModifyColumnDefinitionSegment each : columnDefinitionSegments) {
String columnName = each.getColumnDefinition().getColumnName().getIdentifier().getValue();
if (encryptTable.isEncryptColumn(columnName)) {
- result.addAll(getModifyColumnTokens(encryptTable, columnName, each));
+ result.addAll(getModifyColumnTokens(encryptTable.getEncryptColumn(columnName), each));
}
each.getColumnPosition().flatMap(optional -> getColumnPositionToken(encryptTable, optional)).ifPresent(result::add);
}
return result;
}
- private Collection<SQLToken> getModifyColumnTokens(final EncryptTable encryptTable, final String columnName, final ModifyColumnDefinitionSegment modifyColumnDefinitionSegment) {
+ private Collection<SQLToken> getModifyColumnTokens(final EncryptColumn encryptColumn, final ModifyColumnDefinitionSegment modifyColumnDefinitionSegment) {
Collection<SQLToken> result = new LinkedList<>();
ColumnDefinitionSegment columnDefinitionSegment = modifyColumnDefinitionSegment.getColumnDefinition();
result.add(new RemoveToken(columnDefinitionSegment.getColumnName().getStartIndex(), columnDefinitionSegment.getColumnName().getStopIndex()));
result.add(new EncryptAlterTableToken(columnDefinitionSegment.getColumnName().getStopIndex() + 1, columnDefinitionSegment.getColumnName().getStopIndex(),
- encryptTable.getEncryptColumn(columnName).getCipher().getName(), null));
- encryptTable.findAssistedQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
- columnDefinitionSegment.getColumnName().getStopIndex(), optional, ", MODIFY COLUMN")).ifPresent(result::add);
- encryptTable.findLikeQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
- columnDefinitionSegment.getColumnName().getStopIndex(), optional, ", MODIFY COLUMN")).ifPresent(result::add);
+ encryptColumn.getCipher().getName(), null));
+ encryptColumn.getAssistedQuery().map(optional -> new EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
+ columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ", MODIFY COLUMN")).ifPresent(result::add);
+ encryptColumn.getLikeQuery().map(optional -> new EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
+ columnDefinitionSegment.getColumnName().getStopIndex(), optional.getName(), ", MODIFY COLUMN")).ifPresent(result::add);
return result;
}
@@ -210,15 +210,15 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
result.add(new RemoveToken(segment.getColumnDefinition().getColumnName().getStartIndex(), segment.getColumnDefinition().getColumnName().getStopIndex()));
result.add(new EncryptAlterTableToken(segment.getColumnDefinition().getColumnName().getStopIndex() + 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
encryptTable.getEncryptColumn(segment.getColumnDefinition().getColumnName().getIdentifier().getValue()).getCipher().getName(), null));
- String previousColumnName = segment.getPreviousColumn().getIdentifier().getValue();
+ EncryptColumn previousEncryptColumn = encryptTable.getEncryptColumn(segment.getPreviousColumn().getIdentifier().getValue());
EncryptColumn encryptColumn = encryptTable.getEncryptColumn(segment.getColumnDefinition().getColumnName().getIdentifier().getValue());
- encryptTable.findAssistedQueryColumn(previousColumnName)
+ previousEncryptColumn.getAssistedQuery()
.map(optional -> new EncryptAlterTableToken(segment.getStopIndex() + 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
- encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""), ", CHANGE COLUMN " + optional))
+ encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""), ", CHANGE COLUMN " + optional.getName()))
.ifPresent(result::add);
- encryptTable.findLikeQueryColumn(previousColumnName)
+ previousEncryptColumn.getLikeQuery()
.map(optional -> new EncryptAlterTableToken(segment.getStopIndex() + 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
- encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ", CHANGE COLUMN " + optional))
+ encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ", CHANGE COLUMN " + optional.getName()))
.ifPresent(result::add);
return result;
}
@@ -244,21 +244,21 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
for (ColumnSegment each : dropColumnDefinitionSegment.getColumns()) {
String columnName = each.getQualifiedName();
if (encryptTable.isEncryptColumn(columnName)) {
- result.addAll(getDropColumnTokens(encryptTable, columnName, each, dropColumnDefinitionSegment));
+ result.addAll(getDropColumnTokens(encryptTable.getEncryptColumn(columnName), each, dropColumnDefinitionSegment));
}
}
return result;
}
- private Collection<SQLToken> getDropColumnTokens(final EncryptTable encryptTable, final String columnName,
+ private Collection<SQLToken> getDropColumnTokens(final EncryptColumn encryptColumn,
final ColumnSegment columnSegment, final DropColumnDefinitionSegment dropColumnDefinitionSegment) {
Collection<SQLToken> result = new LinkedList<>();
result.add(new RemoveToken(columnSegment.getStartIndex(), columnSegment.getStopIndex()));
- result.add(new EncryptAlterTableToken(columnSegment.getStopIndex() + 1, columnSegment.getStopIndex(), encryptTable.getEncryptColumn(columnName).getCipher().getName(), null));
- encryptTable.findAssistedQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(dropColumnDefinitionSegment.getStopIndex() + 1,
- dropColumnDefinitionSegment.getStopIndex(), optional, ", DROP COLUMN")).ifPresent(result::add);
- encryptTable.findLikeQueryColumn(columnName).map(optional -> new EncryptAlterTableToken(dropColumnDefinitionSegment.getStopIndex() + 1,
- dropColumnDefinitionSegment.getStopIndex(), optional, ", DROP COLUMN")).ifPresent(result::add);
+ result.add(new EncryptAlterTableToken(columnSegment.getStopIndex() + 1, columnSegment.getStopIndex(), encryptColumn.getCipher().getName(), null));
+ encryptColumn.getAssistedQuery().map(optional -> new EncryptAlterTableToken(dropColumnDefinitionSegment.getStopIndex() + 1,
+ dropColumnDefinitionSegment.getStopIndex(), optional.getName(), ", DROP COLUMN")).ifPresent(result::add);
+ encryptColumn.getLikeQuery().map(optional -> new EncryptAlterTableToken(dropColumnDefinitionSegment.getStopIndex() + 1,
+ dropColumnDefinitionSegment.getStopIndex(), optional.getName(), ", DROP COLUMN")).ifPresent(result::add);
return result;
}
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 211fa41585f..cb2f408644a 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
@@ -102,9 +102,10 @@ public final class EncryptAssignmentTokenGenerator implements CollectionSQLToken
private EncryptAssignmentToken generateParameterSQLToken(final EncryptTable encryptTable, final AssignmentSegment assignmentSegment) {
EncryptParameterAssignmentToken result = new EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(), assignmentSegment.getStopIndex());
String columnName = assignmentSegment.getColumns().get(0).getIdentifier().getValue();
- result.addColumnName(encryptTable.getEncryptColumn(columnName).getCipher().getName());
- encryptTable.findAssistedQueryColumn(columnName).ifPresent(result::addColumnName);
- encryptTable.findLikeQueryColumn(columnName).ifPresent(result::addColumnName);
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnName);
+ result.addColumnName(encryptColumn.getCipher().getName());
+ encryptColumn.getAssistedQuery().ifPresent(optional -> result.addColumnName(optional.getName()));
+ encryptColumn.getLikeQuery().ifPresent(optional -> result.addColumnName(optional.getName()));
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 841541f55c3..ea68f1e3973 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
@@ -21,6 +21,7 @@ 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.rule.column.EncryptColumn;
import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -62,41 +63,36 @@ public final class EncryptCreateTableTokenGenerator implements CollectionSQLToke
ColumnDefinitionSegment each = columns.get(index);
String columnName = each.getColumnName().getIdentifier().getValue();
if (encryptTable.isEncryptColumn(columnName)) {
- result.addAll(getColumnTokens(encryptTable, columnName, each, columns, index));
+ result.addAll(getColumnTokens(encryptTable.getEncryptColumn(columnName), each, columns, index));
}
}
return result;
}
- private Collection<SQLToken> getColumnTokens(final EncryptTable encryptTable, final String columnName, final ColumnDefinitionSegment column,
- final List<ColumnDefinitionSegment> columns, final int index) {
+ private Collection<SQLToken> getColumnTokens(final EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final List<ColumnDefinitionSegment> columns, final int index) {
boolean lastColumn = columns.size() - 1 == index;
int columnStopIndex = lastColumn ? column.getStopIndex() : columns.get(index + 1).getStartIndex() - 1;
Collection<SQLToken> result = new LinkedList<>();
result.add(new RemoveToken(column.getStartIndex(), columnStopIndex));
- result.add(getCipherColumnToken(encryptTable, columnName, column, columnStopIndex));
- getAssistedQueryColumnToken(encryptTable, columnName, column, columnStopIndex, lastColumn).ifPresent(result::add);
- getLikeQueryColumnToken(encryptTable, columnName, column, columnStopIndex, lastColumn).ifPresent(result::add);
+ result.add(getCipherColumnToken(encryptColumn, column, columnStopIndex));
+ getAssistedQueryColumnToken(encryptColumn, column, columnStopIndex, lastColumn).ifPresent(result::add);
+ getLikeQueryColumnToken(encryptColumn, column, columnStopIndex, lastColumn).ifPresent(result::add);
return result;
}
- private SQLToken getCipherColumnToken(final EncryptTable encryptTable, final String columnName, final ColumnDefinitionSegment column, final int stopIndex) {
+ private SQLToken getCipherColumnToken(final EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int stopIndex) {
return new SubstitutableColumnNameToken(stopIndex + 1, column.getColumnName().getStopIndex(),
- getColumnProjections(new IdentifierValue(encryptTable.getEncryptColumn(columnName).getCipher().getName(), column.getColumnName().getIdentifier().getQuoteCharacter())));
+ getColumnProjections(new IdentifierValue(encryptColumn.getCipher().getName(), column.getColumnName().getIdentifier().getQuoteCharacter())));
}
- private Optional<? extends SQLToken> getAssistedQueryColumnToken(final EncryptTable encryptTable, final String columnName, final ColumnDefinitionSegment column,
- final int stopIndex, final boolean lastColumn) {
- Optional<String> assistedQueryColumn = encryptTable.findAssistedQueryColumn(columnName);
- return assistedQueryColumn.map(optional -> new SubstitutableColumnNameToken(stopIndex + 1, column.getColumnName().getStopIndex(),
- getColumnProjections(new IdentifierValue(optional, column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
+ private Optional<? extends SQLToken> getAssistedQueryColumnToken(final EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int stopIndex, final boolean lastColumn) {
+ return encryptColumn.getAssistedQuery().map(optional -> new SubstitutableColumnNameToken(stopIndex + 1, column.getColumnName().getStopIndex(),
+ getColumnProjections(new IdentifierValue(optional.getName(), column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
}
- private Optional<? extends SQLToken> getLikeQueryColumnToken(final EncryptTable encryptTable, final String columnName, final ColumnDefinitionSegment column,
- final int stopIndex, final boolean lastColumn) {
- Optional<String> likeQueryColumn = encryptTable.findLikeQueryColumn(columnName);
- return likeQueryColumn.map(optional -> new SubstitutableColumnNameToken(stopIndex + 1, column.getColumnName().getStopIndex(),
- getColumnProjections(new IdentifierValue(optional, column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
+ private Optional<? extends SQLToken> getLikeQueryColumnToken(final EncryptColumn encryptColumn, final ColumnDefinitionSegment column, final int stopIndex, final boolean lastColumn) {
+ return encryptColumn.getLikeQuery().map(optional -> new SubstitutableColumnNameToken(stopIndex + 1, column.getColumnName().getStopIndex(),
+ getColumnProjections(new IdentifierValue(optional.getName(), column.getColumnName().getIdentifier().getQuoteCharacter())), lastColumn));
}
private Collection<Projection> getColumnProjections(final IdentifierValue columnIdentifier) {
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 6ec287fe551..106aba407ba 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
@@ -22,6 +22,7 @@ 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.rule.column.EncryptColumn;
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.OptionalSQLTokenGenerator;
@@ -91,28 +92,29 @@ public final class EncryptForUseDefaultInsertColumnsTokenGenerator implements Op
if (!encryptTable.isEncryptColumn(columnName)) {
continue;
}
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnName);
int columnIndex = result.indexOf(columnName);
- setCipherColumn(result, encryptTable, columnName, columnIndex);
- if (encryptTable.findAssistedQueryColumn(columnName).isPresent()) {
- addAssistedQueryColumn(result, encryptTable, columnName, columnIndex);
+ setCipherColumn(result, encryptColumn, columnIndex);
+ if (encryptColumn.getAssistedQuery().isPresent()) {
+ addAssistedQueryColumn(result, encryptColumn, columnIndex);
columnIndex++;
}
- if (encryptTable.findLikeQueryColumn(columnName).isPresent()) {
- addLikeQueryColumn(result, encryptTable, columnName, columnIndex);
+ if (encryptColumn.getLikeQuery().isPresent()) {
+ addLikeQueryColumn(result, encryptColumn, columnIndex);
}
}
return result;
}
- private void addAssistedQueryColumn(final List<String> columnNames, final EncryptTable encryptTable, final String columnName, final int columnIndex) {
- encryptTable.findAssistedQueryColumn(columnName).ifPresent(optional -> columnNames.add(columnIndex + 1, optional));
+ private void setCipherColumn(final List<String> columnNames, final EncryptColumn encryptColumn, final int columnIndex) {
+ columnNames.set(columnIndex, encryptColumn.getCipher().getName());
}
- private void addLikeQueryColumn(final List<String> columnNames, final EncryptTable encryptTable, final String columnName, final int columnIndex) {
- encryptTable.findLikeQueryColumn(columnName).ifPresent(optional -> columnNames.add(columnIndex + 1, optional));
+ private void addAssistedQueryColumn(final List<String> columnNames, final EncryptColumn encryptColumn, final int columnIndex) {
+ encryptColumn.getAssistedQuery().ifPresent(optional -> columnNames.add(columnIndex + 1, optional.getName()));
}
- private void setCipherColumn(final List<String> columnNames, final EncryptTable encryptTable, final String columnName, final int columnIndex) {
- columnNames.set(columnIndex, encryptTable.getEncryptColumn(columnName).getCipher().getName());
+ private void addLikeQueryColumn(final List<String> columnNames, final EncryptColumn encryptColumn, final int columnIndex) {
+ encryptColumn.getLikeQuery().ifPresent(optional -> columnNames.add(columnIndex + 1, optional.getName()));
}
}
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 494113fee3c..dae1b62adb9 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
@@ -22,6 +22,7 @@ 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.rule.column.EncryptColumn;
import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -69,12 +70,12 @@ public final class EncryptIndexColumnTokenGenerator implements CollectionSQLToke
}
private Optional<SQLToken> getColumnToken(final EncryptTable encryptTable, final ColumnSegment columnSegment) {
- String columnName = columnSegment.getIdentifier().getValue();
QuoteCharacter quoteCharacter = columnSegment.getIdentifier().getQuoteCharacter();
int startIndex = columnSegment.getStartIndex();
int stopIndex = columnSegment.getStopIndex();
- return encryptTable.findAssistedQueryColumn(columnName).map(optional -> getAssistedQueryColumnToken(startIndex, stopIndex, optional, quoteCharacter))
- .orElseGet(() -> getCipherColumnToken(encryptTable, startIndex, stopIndex, columnName, quoteCharacter));
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnSegment.getIdentifier().getValue());
+ return encryptColumn.getAssistedQuery().map(optional -> getAssistedQueryColumnToken(startIndex, stopIndex, optional.getName(), quoteCharacter))
+ .orElseGet(() -> getCipherColumnToken(encryptColumn, startIndex, stopIndex, quoteCharacter));
}
private Optional<SQLToken> getAssistedQueryColumnToken(final int startIndex, final int stopIndex, final String columnName, final QuoteCharacter quoteCharacter) {
@@ -82,8 +83,8 @@ public final class EncryptIndexColumnTokenGenerator implements CollectionSQLToke
return Optional.of(new SubstitutableColumnNameToken(startIndex, stopIndex, columnProjections, quoteCharacter));
}
- private Optional<SQLToken> getCipherColumnToken(final EncryptTable encryptTable, final int startIndex, final int stopIndex, final String columnName, final QuoteCharacter quoteCharacter) {
- String cipherColumn = encryptTable.getEncryptColumn(columnName).getCipher().getName();
+ private Optional<SQLToken> getCipherColumnToken(final EncryptColumn encryptColumn, final int startIndex, final int stopIndex, final QuoteCharacter quoteCharacter) {
+ String cipherColumn = encryptColumn.getCipher().getName();
Collection<Projection> columnProjections = getColumnProjections(cipherColumn, quoteCharacter);
return Optional.of(new SubstitutableColumnNameToken(startIndex, stopIndex, columnProjections, quoteCharacter));
}
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 1e59c6bf6ed..14795cc360b 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
@@ -78,18 +78,19 @@ public final class EncryptOrderByItemTokenGenerator implements CollectionSQLToke
private Collection<SubstitutableColumnNameToken> generateSQLTokensWithColumnSegments(final Collection<ColumnSegment> columnSegments, final Map<String, String> columnTableNames) {
Collection<SubstitutableColumnNameToken> result = new LinkedList<>();
- for (ColumnSegment column : columnSegments) {
- String tableName = columnTableNames.getOrDefault(column.getExpression(), "");
+ for (ColumnSegment each : columnSegments) {
+ String tableName = columnTableNames.getOrDefault(each.getExpression(), "");
Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
- if (!encryptTable.isPresent() || !encryptTable.get().isEncryptColumn(column.getIdentifier().getValue())) {
+ if (!encryptTable.isPresent() || !encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
continue;
}
- int startIndex = column.getOwner().isPresent() ? column.getOwner().get().getStopIndex() + 2 : column.getStartIndex();
- int stopIndex = column.getStopIndex();
- Optional<String> assistedQueryColumn = encryptTable.get().findAssistedQueryColumn(column.getIdentifier().getValue());
- SubstitutableColumnNameToken encryptColumnNameToken = assistedQueryColumn.map(optional -> new SubstitutableColumnNameToken(startIndex, stopIndex,
- createColumnProjections(optional, column.getIdentifier().getQuoteCharacter()))).orElseGet(() -> new SubstitutableColumnNameToken(startIndex, stopIndex,
- createColumnProjections(encryptTable.get().getEncryptColumn(column.getIdentifier().getValue()).getCipher().getName(), column.getIdentifier().getQuoteCharacter())));
+ int startIndex = each.getOwner().isPresent() ? each.getOwner().get().getStopIndex() + 2 : each.getStartIndex();
+ int stopIndex = each.getStopIndex();
+ SubstitutableColumnNameToken encryptColumnNameToken = encryptTable.get().getEncryptColumn(each.getIdentifier().getValue()).getAssistedQuery()
+ .map(optional -> new SubstitutableColumnNameToken(startIndex, stopIndex,
+ createColumnProjections(optional.getName(), each.getIdentifier().getQuoteCharacter())))
+ .orElseGet(() -> new SubstitutableColumnNameToken(startIndex, stopIndex,
+ createColumnProjections(encryptTable.get().getEncryptColumn(each.getIdentifier().getValue()).getCipher().getName(), each.getIdentifier().getQuoteCharacter())));
result.add(encryptColumnNameToken);
}
return result;
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 907afa35180..393db5a7a26 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
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLE
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.rule.column.EncryptColumn;
import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -86,25 +87,22 @@ public final class EncryptPredicateColumnTokenGenerator implements CollectionSQL
String tableName = Optional.ofNullable(columnExpressionTableNames.get(each.getExpression())).orElse("");
Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
if (encryptTable.isPresent() && encryptTable.get().isEncryptColumn(each.getIdentifier().getValue())) {
- result.add(buildSubstitutableColumnNameToken(each, whereSegments, encryptTable.get()));
+ result.add(buildSubstitutableColumnNameToken(encryptTable.get().getEncryptColumn(each.getIdentifier().getValue()), each, whereSegments));
}
}
return result;
}
- private SubstitutableColumnNameToken buildSubstitutableColumnNameToken(final ColumnSegment columnSegment, final Collection<WhereSegment> whereSegments, final EncryptTable encryptTable) {
+ private SubstitutableColumnNameToken buildSubstitutableColumnNameToken(final EncryptColumn encryptColumn, final ColumnSegment columnSegment, final Collection<WhereSegment> whereSegments) {
int startIndex = columnSegment.getOwner().isPresent() ? columnSegment.getOwner().get().getStopIndex() + 2 : columnSegment.getStartIndex();
int stopIndex = columnSegment.getStopIndex();
- String logicColumn = columnSegment.getIdentifier().getValue();
- // TODO remove foreach loop to improve performance
if (includesLike(whereSegments, columnSegment)) {
- Optional<String> likeQueryColumn = encryptTable.findLikeQueryColumn(logicColumn);
- ShardingSpherePreconditions.checkState(likeQueryColumn.isPresent(), () -> new UnsupportedEncryptSQLException("LIKE"));
- return new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(likeQueryColumn.get(), columnSegment.getIdentifier().getQuoteCharacter()));
+ ShardingSpherePreconditions.checkState(encryptColumn.getLikeQuery().isPresent(), () -> new UnsupportedEncryptSQLException("LIKE"));
+ return new SubstitutableColumnNameToken(startIndex, stopIndex, createColumnProjections(encryptColumn.getLikeQuery().get().getName(), columnSegment.getIdentifier().getQuoteCharacter()));
}
Collection<Projection> columnProjections =
- encryptTable.findAssistedQueryColumn(logicColumn).map(optional -> createColumnProjections(optional, columnSegment.getIdentifier().getQuoteCharacter()))
- .orElseGet(() -> createColumnProjections(encryptTable.getEncryptColumn(logicColumn).getCipher().getName(), columnSegment.getIdentifier().getQuoteCharacter()));
+ encryptColumn.getAssistedQuery().map(optional -> createColumnProjections(optional.getName(), columnSegment.getIdentifier().getQuoteCharacter()))
+ .orElseGet(() -> createColumnProjections(encryptColumn.getCipher().getName(), columnSegment.getIdentifier().getQuoteCharacter()));
return new SubstitutableColumnNameToken(startIndex, stopIndex, columnProjections);
}
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 21e1041d936..f8e98de83f7 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
@@ -22,6 +22,8 @@ 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.rule.column.EncryptColumn;
+import org.apache.shardingsphere.encrypt.rule.column.item.AssistedQueryColumnItem;
import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
import org.apache.shardingsphere.infra.binder.segment.select.projection.ProjectionsContext;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
@@ -94,7 +96,7 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
}
Optional<EncryptTable> encryptTable = encryptRule.findEncryptTable(tableName);
if (encryptTable.isPresent() && encryptTable.get().isEncryptColumn(columnProjection.getName())) {
- sqlTokens.add(generateSQLToken(encryptTable.get(), columnSegment, columnProjection, subqueryType));
+ sqlTokens.add(generateSQLToken(encryptTable.get().getEncryptColumn(columnProjection.getName()), columnSegment, columnProjection, subqueryType));
}
}
if (each instanceof ShorthandProjectionSegment) {
@@ -107,9 +109,9 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
}
}
- private SubstitutableColumnNameToken generateSQLToken(final EncryptTable encryptTable, final ColumnProjectionSegment columnSegment,
+ private SubstitutableColumnNameToken generateSQLToken(final EncryptColumn encryptColumn, final ColumnProjectionSegment columnSegment,
final ColumnProjection columnProjection, final SubqueryType subqueryType) {
- Collection<Projection> projections = generateProjections(encryptTable, columnProjection, subqueryType, false, null);
+ Collection<Projection> projections = generateProjections(encryptColumn, columnProjection, subqueryType, false, null);
int startIndex = columnSegment.getColumn().getOwner().isPresent() ? columnSegment.getColumn().getOwner().get().getStopIndex() + 2 : columnSegment.getColumn().getStartIndex();
int stopIndex = columnSegment.getStopIndex();
return new SubstitutableColumnNameToken(startIndex, stopIndex, projections);
@@ -124,7 +126,7 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
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) {
- projections.addAll(generateProjections(encryptTable.get(), (ColumnProjection) each, subqueryType, true, segment));
+ projections.addAll(generateProjections(encryptTable.get().getEncryptColumn(((ColumnProjection) each).getName()), (ColumnProjection) each, subqueryType, true, segment));
}
}
int startIndex = segment.getOwner().isPresent() ? segment.getOwner().get().getStartIndex() : segment.getStartIndex();
@@ -152,17 +154,17 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
return selectStatementContext.getTablesContext().findTableNamesByColumnProjection(columns, schema);
}
- private Collection<Projection> generateProjections(final EncryptTable encryptTable, final ColumnProjection column, final SubqueryType subqueryType, final boolean shorthand,
- final ShorthandProjectionSegment segment) {
+ private Collection<Projection> generateProjections(final EncryptColumn encryptColumn, final ColumnProjection column,
+ final SubqueryType subqueryType, final boolean shorthand, final ShorthandProjectionSegment segment) {
Collection<Projection> result = new LinkedList<>();
if (SubqueryType.PREDICATE_SUBQUERY == subqueryType) {
- result.add(distinctOwner(generatePredicateSubqueryProjection(encryptTable, column), shorthand));
+ result.add(distinctOwner(generatePredicateSubqueryProjection(encryptColumn, column), shorthand));
} else if (SubqueryType.TABLE_SUBQUERY == subqueryType) {
- result.addAll(generateTableSubqueryProjections(encryptTable, column, shorthand));
+ result.addAll(generateTableSubqueryProjections(encryptColumn, column, shorthand));
} else if (SubqueryType.EXISTS_SUBQUERY == subqueryType) {
- result.addAll(generateExistsSubqueryProjections(encryptTable, column, shorthand));
+ result.addAll(generateExistsSubqueryProjections(encryptColumn, column, shorthand));
} else {
- result.add(distinctOwner(generateCommonProjection(encryptTable, column, segment), shorthand));
+ result.add(distinctOwner(generateCommonProjection(encryptColumn, column, segment), shorthand));
}
return result;
}
@@ -174,33 +176,33 @@ public final class EncryptProjectionTokenGenerator implements CollectionSQLToken
return new ColumnProjection(null, column.getNameIdentifier(), column.getAlias().isPresent() ? column.getAliasIdentifier() : null);
}
- private ColumnProjection generatePredicateSubqueryProjection(final EncryptTable encryptTable, final ColumnProjection column) {
- Optional<String> assistedQueryColumn = encryptTable.findAssistedQueryColumn(column.getName());
+ private ColumnProjection generatePredicateSubqueryProjection(final EncryptColumn encryptColumn, final ColumnProjection column) {
+ Optional<AssistedQueryColumnItem> assistedQueryColumn = encryptColumn.getAssistedQuery();
if (assistedQueryColumn.isPresent()) {
- return new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(assistedQueryColumn.get(), column.getNameIdentifier().getQuoteCharacter()), null);
+ return new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(assistedQueryColumn.get().getName(), column.getNameIdentifier().getQuoteCharacter()), null);
}
- String cipherColumn = encryptTable.getEncryptColumn(column.getName()).getCipher().getName();
+ String cipherColumn = encryptColumn.getCipher().getName();
return new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(cipherColumn, column.getNameIdentifier().getQuoteCharacter()), null);
}
- private Collection<ColumnProjection> generateTableSubqueryProjections(final EncryptTable encryptTable, final ColumnProjection column, final boolean shorthand) {
+ private Collection<ColumnProjection> generateTableSubqueryProjections(final EncryptColumn encryptColumn, final ColumnProjection column, final boolean shorthand) {
Collection<ColumnProjection> result = new LinkedList<>();
- result.add(distinctOwner(new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(encryptTable.getEncryptColumn(column.getName()).getCipher().getName(),
+ result.add(distinctOwner(new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(encryptColumn.getCipher().getName(),
column.getNameIdentifier().getQuoteCharacter()), null), shorthand));
- Optional<String> assistedQueryColumn = encryptTable.findAssistedQueryColumn(column.getName());
- assistedQueryColumn.ifPresent(optional -> result.add(new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(optional, column.getNameIdentifier().getQuoteCharacter()), null)));
+ encryptColumn.getAssistedQuery().ifPresent(optional -> result.add(
+ new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(optional.getName(), column.getNameIdentifier().getQuoteCharacter()), null)));
return result;
}
- private Collection<ColumnProjection> generateExistsSubqueryProjections(final EncryptTable encryptTable, final ColumnProjection column, final boolean shorthand) {
+ private Collection<ColumnProjection> generateExistsSubqueryProjections(final EncryptColumn encryptColumn, final ColumnProjection column, final boolean shorthand) {
Collection<ColumnProjection> result = new LinkedList<>();
- result.add(distinctOwner(new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(encryptTable.getEncryptColumn(column.getName()).getCipher().getName(),
+ result.add(distinctOwner(new ColumnProjection(column.getOwnerIdentifier(), new IdentifierValue(encryptColumn.getCipher().getName(),
column.getNameIdentifier().getQuoteCharacter()), null), shorthand));
return result;
}
- private ColumnProjection generateCommonProjection(final EncryptTable encryptTable, final ColumnProjection column, final ShorthandProjectionSegment segment) {
- String encryptColumnName = encryptTable.getEncryptColumn(column.getName()).getCipher().getName();
+ private ColumnProjection generateCommonProjection(final EncryptColumn encryptColumn, final ColumnProjection column, final ShorthandProjectionSegment segment) {
+ String encryptColumnName = encryptColumn.getCipher().getName();
IdentifierValue owner = (null == segment || !segment.getOwner().isPresent()) ? column.getOwnerIdentifier() : segment.getOwner().get().getIdentifier();
return new ColumnProjection(owner, new IdentifierValue(encryptColumnName, column.getNameIdentifier().getQuoteCharacter()), column.getAlias().isPresent()
? column.getAliasIdentifier()
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
index 52ff05bab28..aa4a1fef99a 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGenerator.java
@@ -21,6 +21,7 @@ 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.rule.column.EncryptColumn;
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;
@@ -29,6 +30,7 @@ import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.InsertColu
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -59,9 +61,14 @@ public final class EncryptInsertDerivedColumnsTokenGenerator implements Collecti
}
private List<String> getDerivedColumnNames(final EncryptTable encryptTable, final ColumnSegment columnSegment) {
+ String columnName = columnSegment.getIdentifier().getValue();
+ if (!encryptTable.isEncryptColumn(columnName)) {
+ return Collections.emptyList();
+ }
List<String> result = new LinkedList<>();
- encryptTable.findAssistedQueryColumn(columnSegment.getIdentifier().getValue()).ifPresent(result::add);
- encryptTable.findLikeQueryColumn(columnSegment.getIdentifier().getValue()).ifPresent(result::add);
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnName);
+ encryptColumn.getAssistedQuery().ifPresent(optional -> result.add(optional.getName()));
+ encryptColumn.getLikeQuery().ifPresent(optional -> result.add(optional.getName()));
return result;
}
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
index 73fa050dc66..ad966be309a 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertOnUpdateTokenGenerator.java
@@ -29,6 +29,8 @@ import org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptParameterAssi
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
+import org.apache.shardingsphere.encrypt.rule.column.item.AssistedQueryColumnItem;
+import org.apache.shardingsphere.encrypt.rule.column.item.LikeQueryColumnItem;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
@@ -111,9 +113,10 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
private EncryptAssignmentToken generateParameterSQLToken(final EncryptTable encryptTable, final AssignmentSegment assignmentSegment) {
EncryptParameterAssignmentToken result = new EncryptParameterAssignmentToken(assignmentSegment.getColumns().get(0).getStartIndex(), assignmentSegment.getStopIndex());
String columnName = assignmentSegment.getColumns().get(0).getIdentifier().getValue();
- result.addColumnName(encryptTable.getEncryptColumn(columnName).getCipher().getName());
- encryptTable.findAssistedQueryColumn(columnName).ifPresent(result::addColumnName);
- encryptTable.findLikeQueryColumn(columnName).ifPresent(result::addColumnName);
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(columnName);
+ result.addColumnName(encryptColumn.getCipher().getName());
+ encryptColumn.getAssistedQuery().ifPresent(optional -> result.addColumnName(optional.getName()));
+ encryptColumn.getLikeQuery().ifPresent(optional -> result.addColumnName(optional.getName()));
return result;
}
@@ -134,24 +137,26 @@ public final class EncryptInsertOnUpdateTokenGenerator implements CollectionSQLT
EncryptFunctionAssignmentToken result = new EncryptFunctionAssignmentToken(columnSegment.getStartIndex(), assignmentSegment.getStopIndex());
boolean isEncryptColumn = encryptTable.isEncryptColumn(column);
boolean isEncryptValueColumn = encryptTable.isEncryptColumn(valueColumn);
+ EncryptColumn encryptColumn = encryptTable.getEncryptColumn(column);
+ EncryptColumn encryptValueColumn = encryptTable.getEncryptColumn(column);
if (isEncryptColumn && isEncryptValueColumn) {
- String cipherColumn = encryptTable.getEncryptColumn(column).getCipher().getName();
- String cipherValueColumn = encryptTable.getEncryptColumn(valueColumn).getCipher().getName();
+ String cipherColumn = encryptColumn.getCipher().getName();
+ String cipherValueColumn = encryptValueColumn.getCipher().getName();
result.addAssignment(cipherColumn, "VALUES(" + cipherValueColumn + ")");
} else if (isEncryptColumn != isEncryptValueColumn) {
throw new UnsupportedEncryptSQLException(String.format("%s=VALUES(%s)", column, valueColumn));
}
- Optional<String> assistedQueryColumn = encryptTable.findAssistedQueryColumn(column);
- Optional<String> valueAssistedQueryColumn = encryptTable.findAssistedQueryColumn(valueColumn);
+ Optional<AssistedQueryColumnItem> assistedQueryColumn = encryptColumn.getAssistedQuery();
+ Optional<AssistedQueryColumnItem> valueAssistedQueryColumn = encryptValueColumn.getAssistedQuery();
if (assistedQueryColumn.isPresent() && valueAssistedQueryColumn.isPresent()) {
- result.addAssignment(assistedQueryColumn.get(), "VALUES(" + valueAssistedQueryColumn.get() + ")");
+ result.addAssignment(assistedQueryColumn.get().getName(), "VALUES(" + valueAssistedQueryColumn.get().getName() + ")");
} else if (assistedQueryColumn.isPresent() != valueAssistedQueryColumn.isPresent()) {
throw new UnsupportedEncryptSQLException(String.format("%s=VALUES(%s)", column, valueColumn));
}
- Optional<String> likeQueryColumn = encryptTable.findLikeQueryColumn(column);
- Optional<String> valueLikeQueryColumn = encryptTable.findLikeQueryColumn(valueColumn);
+ Optional<LikeQueryColumnItem> likeQueryColumn = encryptColumn.getLikeQuery();
+ Optional<LikeQueryColumnItem> valueLikeQueryColumn = encryptValueColumn.getLikeQuery();
if (likeQueryColumn.isPresent() && valueLikeQueryColumn.isPresent()) {
- result.addAssignment(likeQueryColumn.get(), "VALUES(" + valueLikeQueryColumn.get() + ")");
+ result.addAssignment(likeQueryColumn.get().getName(), "VALUES(" + valueLikeQueryColumn.get().getName() + ")");
} else if (likeQueryColumn.isPresent() != valueLikeQueryColumn.isPresent()) {
throw new UnsupportedEncryptSQLException(String.format("%s=VALUES(%s)", column, valueColumn));
}
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
index ccd5ad42ac7..d8b71be3f57 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertValuesTokenGenerator.java
@@ -143,11 +143,11 @@ public final class EncryptInsertValuesTokenGenerator implements OptionalSQLToken
Object originalValue = insertValueContext.getLiteralValue(columnIndex).orElse(null);
setCipherColumn(schemaName, tableName, encryptColumn, insertValueToken, insertValueContext.getValueExpressions().get(columnIndex), columnIndex, originalValue);
int indexDelta = 1;
- if (encryptTable.findAssistedQueryColumn(columnName).isPresent()) {
+ if (encryptColumn.getAssistedQuery().isPresent()) {
addAssistedQueryColumn(schemaName, tableName, encryptColumn, insertValueContext, insertValueToken, columnIndex, indexDelta, originalValue);
indexDelta++;
}
- if (encryptTable.findLikeQueryColumn(columnName).isPresent()) {
+ if (encryptColumn.getLikeQuery().isPresent()) {
addLikeQueryColumn(schemaName, tableName, encryptColumn, insertValueContext, insertValueToken, columnIndex, indexDelta, originalValue);
}
}
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 c2db7735e18..1b54bb96e6b 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
@@ -123,16 +123,6 @@ public final class EncryptTable {
return columns.values().stream().anyMatch(each -> each.getCipher().getName().equalsIgnoreCase(logicColumnName));
}
- /**
- * Get cipher column.
- *
- * @param logicColumnName logic column name
- * @return cipher column
- */
- public String getCipherColumn(final String logicColumnName) {
- return columns.get(logicColumnName).getCipher().getName();
- }
-
/**
* Get assisted query columns.
*
@@ -163,26 +153,6 @@ public final class EncryptTable {
return result;
}
- /**
- * Find assisted query column.
- *
- * @param logicColumnName logic column name
- * @return assisted query column
- */
- public Optional<String> findAssistedQueryColumn(final String logicColumnName) {
- return columns.containsKey(logicColumnName) ? columns.get(logicColumnName).getAssistedQuery().map(AssistedQueryColumnItem::getName) : Optional.empty();
- }
-
- /**
- * Find like query column.
- *
- * @param logicColumnName logic column name
- * @return like query column
- */
- public Optional<String> findLikeQueryColumn(final String logicColumnName) {
- return columns.containsKey(logicColumnName) ? columns.get(logicColumnName).getLikeQuery().map(LikeQueryColumnItem::getName) : Optional.empty();
- }
-
/**
* Get logic and cipher columns.
*
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 df5a963b5b2..e9cb159b336 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
@@ -73,8 +73,10 @@ class EncryptAlterTableTokenGeneratorTest {
when(result.getTable()).thenReturn("t_encrypt");
when(result.isEncryptColumn("certificate_number")).thenReturn(true);
when(result.getEncryptColumn("certificate_number").getCipher().getName()).thenReturn("cipher_certificate_number");
- when(result.findAssistedQueryColumn("certificate_number")).thenReturn(Optional.of("assisted_certificate_number"));
- when(result.findLikeQueryColumn("certificate_number")).thenReturn(Optional.of("like_certificate_number"));
+ when(result.getEncryptColumn("certificate_number").getAssistedQuery())
+ .thenReturn(Optional.of(new AssistedQueryColumnItem("assisted_certificate_number", mock(AssistedEncryptAlgorithm.class))));
+ when(result.getEncryptColumn("certificate_number").getLikeQuery())
+ .thenReturn(Optional.of(new LikeQueryColumnItem("like_certificate_number", mock(LikeEncryptAlgorithm.class))));
when(result.getLogicColumns()).thenReturn(Collections.singleton("t_encrypt"));
when(result.getEncryptColumn("certificate_number")).thenReturn(mockEncryptColumn());
when(result.isEncryptColumn("certificate_number_new")).thenReturn(true);
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 8b49c9ea50b..4eebd699206 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
@@ -41,6 +41,7 @@ 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;
@@ -70,8 +71,10 @@ class EncryptCreateTableTokenGeneratorTest {
EncryptColumn column = mockEncryptColumn();
when(result.isEncryptColumn("certificate_number")).thenReturn(true);
when(result.getEncryptColumn("certificate_number").getCipher().getName()).thenReturn(column.getCipher().getName());
- when(result.findAssistedQueryColumn("certificate_number")).thenReturn(column.getAssistedQuery().map(AssistedQueryColumnItem::getName));
- when(result.findLikeQueryColumn("certificate_number")).thenReturn(column.getLikeQuery().map(LikeQueryColumnItem::getName));
+ when(result.getEncryptColumn("certificate_number").getAssistedQuery())
+ .thenReturn(Optional.of(new AssistedQueryColumnItem(column.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(null), mock(AssistedEncryptAlgorithm.class))));
+ when(result.getEncryptColumn("certificate_number").getLikeQuery())
+ .thenReturn(Optional.of(new LikeQueryColumnItem(column.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(null), mock(LikeEncryptAlgorithm.class))));
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGeneratorTest.java
index 4b08bc70fc9..9c402b1787b 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptOrderByItemTokenGeneratorTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
import org.apache.shardingsphere.infra.binder.segment.select.orderby.OrderByItem;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
@@ -60,6 +61,9 @@ class EncryptOrderByItemTokenGeneratorTest {
EncryptRule result = mock(EncryptRule.class);
EncryptTable encryptTable = mock(EncryptTable.class);
when(encryptTable.isEncryptColumn("certificate_number")).thenReturn(true);
+ EncryptColumn encryptColumn = mock(EncryptColumn.class, RETURNS_DEEP_STUBS);
+ when(encryptColumn.getAssistedQuery()).thenReturn(Optional.empty());
+ when(encryptTable.getEncryptColumn("certificate_number")).thenReturn(encryptColumn);
when(result.findEncryptTable("t_encrypt")).thenReturn(Optional.of(encryptTable));
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGeneratorTest.java
index 5eba82c04d3..644c13afe61 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGeneratorTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.encrypt.rewrite.token.generator;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
@@ -67,6 +68,9 @@ class EncryptProjectionTokenGeneratorTest {
when(result.findEncryptTable("doctor")).thenReturn(Optional.of(encryptTable1));
when(result.findEncryptTable("doctor1")).thenReturn(Optional.of(encryptTable2));
when(encryptTable1.isEncryptColumn("mobile")).thenReturn(true);
+ EncryptColumn encryptColumn = mock(EncryptColumn.class, RETURNS_DEEP_STUBS);
+ when(encryptColumn.getAssistedQuery()).thenReturn(Optional.empty());
+ when(encryptTable1.getEncryptColumn("mobile")).thenReturn(encryptColumn);
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGeneratorTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGeneratorTest.java
index 5f686052779..ab0156efc08 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGeneratorTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDerivedColumnsTokenGeneratorTest.java
@@ -17,8 +17,10 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator.insert;
+import org.apache.shardingsphere.encrypt.api.encrypt.assisted.AssistedEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.rule.EncryptRule;
import org.apache.shardingsphere.encrypt.rule.EncryptTable;
+import org.apache.shardingsphere.encrypt.rule.column.item.AssistedQueryColumnItem;
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.pojo.SQLToken;
@@ -87,8 +89,9 @@ class EncryptInsertDerivedColumnsTokenGeneratorTest {
private EncryptRule mockEncryptRule() {
EncryptRule result = mock(EncryptRule.class);
- EncryptTable encryptTable = mock(EncryptTable.class);
- when(encryptTable.findAssistedQueryColumn("foo_col")).thenReturn(Optional.of("assisted_query_col"));
+ EncryptTable encryptTable = mock(EncryptTable.class, RETURNS_DEEP_STUBS);
+ when(encryptTable.isEncryptColumn("foo_col")).thenReturn(true);
+ when(encryptTable.getEncryptColumn("foo_col").getAssistedQuery()).thenReturn(Optional.of(new AssistedQueryColumnItem("assisted_query_col", mock(AssistedEncryptAlgorithm.class))));
when(result.getEncryptTable("foo_tbl")).thenReturn(encryptTable);
return result;
}
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
index 4305f4a47b4..2ef886e9c67 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
@@ -26,7 +26,6 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Collections;
-import java.util.Optional;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -89,30 +88,6 @@ class EncryptTableTest {
assertThat(encryptTable.getAssistedQueryColumns(), is(Collections.singletonList("assistedQueryColumn")));
}
- @Test
- void assertFindAssistedQueryColumn() {
- Optional<String> actual = encryptTable.findAssistedQueryColumn("logicColumn");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("assistedQueryColumn"));
- }
-
- @Test
- void assertFindLikeQueryColumn() {
- Optional<String> actual = encryptTable.findLikeQueryColumn("logicColumn");
- assertTrue(actual.isPresent());
- assertThat(actual.get(), is("likeQueryColumn"));
- }
-
- @Test
- void assertNotFindAssistedQueryColumn() {
- assertFalse(encryptTable.findAssistedQueryColumn("notExistLogicColumn").isPresent());
- }
-
- @Test
- void assertNotFindLikeQueryColumn() {
- assertFalse(encryptTable.findAssistedQueryColumn("notExistLikeQueryColumn").isPresent());
- }
-
@Test
void assertGetLogicAndCipherColumns() {
assertThat(encryptTable.getLogicAndCipherColumns(), is(Collections.singletonMap("logicColumn", "cipherColumn")));