This is an automated email from the ASF dual-hosted git repository.
zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 590f12a0fcb Refactor EncryptInsertValuesTokenGenerator (#26377)
590f12a0fcb is described below
commit 590f12a0fcbf2d822dc5bbdc5dc9f0fbf1d63b3f
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 16 00:10:44 2023 +0800
Refactor EncryptInsertValuesTokenGenerator (#26377)
---
.../insert/EncryptInsertValuesTokenGenerator.java | 66 +++++++++-------------
1 file changed, 27 insertions(+), 39 deletions(-)
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 345df6c002c..2fdeb338b1f 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
@@ -17,13 +17,7 @@
package org.apache.shardingsphere.encrypt.rewrite.token.generator.insert;
-import com.google.common.base.Preconditions;
import lombok.Setter;
-import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
-import
org.apache.shardingsphere.encrypt.api.encrypt.assisted.AssistedEncryptAlgorithm;
-import org.apache.shardingsphere.encrypt.api.encrypt.like.LikeEncryptAlgorithm;
-import
org.apache.shardingsphere.encrypt.api.encrypt.standard.StandardEncryptAlgorithm;
-import org.apache.shardingsphere.encrypt.context.EncryptContextBuilder;
import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseNameAware;
import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
import
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptInsertValuesToken;
@@ -55,7 +49,6 @@ import java.util.Optional;
/**
* Insert values token generator for encrypt.
*/
-@SuppressWarnings({"unchecked", "rawtypes"})
@Setter
public final class EncryptInsertValuesTokenGenerator implements
OptionalSQLTokenGenerator<InsertStatementContext>, PreviousSQLTokensAware,
EncryptRuleAware, DatabaseNameAware {
@@ -132,6 +125,7 @@ public final class EncryptInsertValuesTokenGenerator
implements OptionalSQLToken
private void encryptToken(final InsertValue insertValueToken, final String
schemaName, final EncryptTable encryptTable,
final InsertStatementContext
insertStatementContext, final InsertValueContext insertValueContext) {
+ String tableName = encryptTable.getTable();
Optional<SQLToken> useDefaultInsertColumnsToken =
findPreviousSQLToken(UseDefaultInsertColumnsToken.class);
Iterator<String> descendingColumnNames =
insertStatementContext.getDescendingColumnNames();
while (descendingColumnNames.hasNext()) {
@@ -139,52 +133,46 @@ public final class EncryptInsertValuesTokenGenerator
implements OptionalSQLToken
if (!encryptTable.isEncryptColumn(columnName)) {
continue;
}
- int columnIndex = useDefaultInsertColumnsToken.map(optional ->
((UseDefaultInsertColumnsToken) optional).getColumns().indexOf(columnName))
- .orElseGet(() ->
insertStatementContext.getColumnNames().indexOf(columnName));
+ int columnIndex = useDefaultInsertColumnsToken
+ .map(optional -> ((UseDefaultInsertColumnsToken)
optional).getColumns().indexOf(columnName)).orElseGet(() ->
insertStatementContext.getColumnNames().indexOf(columnName));
Object originalValue =
insertValueContext.getLiteralValue(columnIndex).orElse(null);
- EncryptContext encryptContext =
EncryptContextBuilder.build(databaseName, schemaName, encryptTable.getTable(),
columnName);
- Optional<StandardEncryptAlgorithm> encryptor =
encryptRule.findStandardEncryptor(encryptTable.getTable(), columnName);
- Preconditions.checkState(encryptor.isPresent());
- setCipherColumn(insertValueToken, encryptor.get(), columnIndex,
encryptContext, insertValueContext.getValueExpressions().get(columnIndex),
originalValue);
+ setCipherColumn(schemaName, tableName, columnName,
insertValueToken, insertValueContext.getValueExpressions().get(columnIndex),
columnIndex, originalValue);
int indexDelta = 1;
- if
(encryptRule.findAssistedQueryEncryptor(encryptTable.getTable(),
columnName).isPresent()) {
- addAssistedQueryColumn(encryptTable, insertValueToken,
-
encryptRule.findAssistedQueryEncryptor(encryptTable.getTable(),
columnName).get(), columnIndex, encryptContext, insertValueContext,
originalValue, indexDelta);
+ if (encryptTable.findAssistedQueryColumn(columnName).isPresent()) {
+ addAssistedQueryColumn(schemaName, tableName, columnName,
insertValueContext, insertValueToken, columnIndex, indexDelta, originalValue);
indexDelta++;
}
- if (encryptRule.findLikeQueryEncryptor(encryptTable.getTable(),
columnName).isPresent()) {
- addLikeQueryColumn(encryptTable, insertValueToken,
-
encryptRule.findLikeQueryEncryptor(encryptTable.getTable(), columnName).get(),
columnIndex, encryptContext, insertValueContext, originalValue, indexDelta);
+ if (encryptTable.findLikeQueryColumn(columnName).isPresent()) {
+ addLikeQueryColumn(schemaName, tableName, columnName,
insertValueContext, insertValueToken, columnIndex, indexDelta, originalValue);
}
}
}
- private void setCipherColumn(final InsertValue insertValueToken, final
StandardEncryptAlgorithm encryptAlgorithm, final int columnIndex,
- final EncryptContext encryptContext, final
ExpressionSegment valueExpression, final Object originalValue) {
+ private void setCipherColumn(final String schemaName, final String
tableName, final String columnName,
+ final InsertValue insertValueToken, final
ExpressionSegment valueExpression, final int columnIndex, final Object
originalValue) {
if (valueExpression instanceof LiteralExpressionSegment) {
- insertValueToken.getValues().set(columnIndex,
- new
LiteralExpressionSegment(valueExpression.getStartIndex(),
valueExpression.getStopIndex(), encryptAlgorithm.encrypt(originalValue,
encryptContext)));
+ insertValueToken.getValues().set(columnIndex, new
LiteralExpressionSegment(
+ valueExpression.getStartIndex(),
valueExpression.getStopIndex(), encryptRule.encrypt(databaseName, schemaName,
tableName, columnName, originalValue)));
}
}
- private void addAssistedQueryColumn(final EncryptTable encryptTable, final
InsertValue insertValueToken, final AssistedEncryptAlgorithm
assistQueryEncryptor, final int columnIndex,
- final EncryptContext encryptContext,
final InsertValueContext insertValueContext, final Object originalValue, final
int indexDelta) {
- if
(encryptTable.findAssistedQueryColumn(encryptContext.getColumnName()).isPresent())
{
- DerivedSimpleExpressionSegment derivedExpressionSegment =
isAddLiteralExpressionSegment(insertValueContext, columnIndex)
- ? new
DerivedLiteralExpressionSegment(assistQueryEncryptor.encrypt(originalValue,
encryptContext))
- : new
DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken));
- insertValueToken.getValues().add(columnIndex + indexDelta,
derivedExpressionSegment);
- }
+ private void addAssistedQueryColumn(final String schemaName, final String
tableName, final String columnName,
+ final InsertValueContext
insertValueContext, final InsertValue insertValueToken, final int columnIndex,
final int indexDelta, final Object originalValue) {
+ Object derivedValue =
encryptRule.getEncryptAssistedQueryValue(databaseName, schemaName, tableName,
columnName, originalValue);
+ addDerivedColumn(insertValueContext, insertValueToken, columnIndex,
indexDelta, derivedValue);
}
- private void addLikeQueryColumn(final EncryptTable encryptTable, final
InsertValue insertValueToken, final LikeEncryptAlgorithm likeQueryEncryptor,
final int columnIndex,
- final EncryptContext encryptContext, final
InsertValueContext insertValueContext, final Object originalValue, final int
indexDelta) {
- if
(encryptTable.findLikeQueryColumn(encryptContext.getColumnName()).isPresent()) {
- DerivedSimpleExpressionSegment derivedExpressionSegment =
isAddLiteralExpressionSegment(insertValueContext, columnIndex)
- ? new
DerivedLiteralExpressionSegment(likeQueryEncryptor.encrypt(originalValue,
encryptContext))
- : new
DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken));
- insertValueToken.getValues().add(columnIndex + indexDelta,
derivedExpressionSegment);
- }
+ private void addLikeQueryColumn(final String schemaName, final String
tableName, final String columnName,
+ final InsertValueContext
insertValueContext, final InsertValue insertValueToken, final int columnIndex,
final int indexDelta, final Object originalValue) {
+ Object derivedValue =
encryptRule.getEncryptLikeQueryValue(databaseName, schemaName, tableName,
columnName, originalValue);
+ addDerivedColumn(insertValueContext, insertValueToken, columnIndex,
indexDelta, derivedValue);
+ }
+
+ private void addDerivedColumn(final InsertValueContext insertValueContext,
final InsertValue insertValueToken, final int columnIndex, final int
indexDelta, final Object derivedValue) {
+ DerivedSimpleExpressionSegment derivedExpressionSegment =
isAddLiteralExpressionSegment(insertValueContext, columnIndex)
+ ? new DerivedLiteralExpressionSegment(derivedValue)
+ : new
DerivedParameterMarkerExpressionSegment(getParameterIndexCount(insertValueToken));
+ insertValueToken.getValues().add(columnIndex + indexDelta,
derivedExpressionSegment);
}
private boolean isAddLiteralExpressionSegment(final InsertValueContext
insertValueContext, final int columnIndex) {