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 <[email protected]>
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")));