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/15 16:10:51 UTC
[shardingsphere] branch master updated: Refactor EncryptInsertValuesTokenGenerator (#26377)
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 <zh...@apache.org>
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) {