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) {

Reply via email to