This is an automated email from the ASF dual-hosted git repository.

chengzhang 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 f9f175e47d4 Minor refactor for EncryptAssignmentTokenGenerator (#35380)
f9f175e47d4 is described below

commit f9f175e47d4b5b0e688fba890376bc0e2bf67b10
Author: Zhengqiang Duan <duanzhengqi...@apache.org>
AuthorDate: Tue May 13 10:06:14 2025 +0800

    Minor refactor for EncryptAssignmentTokenGenerator (#35380)
    
    * Minor refactor for EncryptAssignmentTokenGenerator
    
    * fix unit test
    
    * fix checkstyle
---
 .../EncryptAssignmentTokenGenerator.java           | 51 +++++++++++++++++-----
 .../EncryptInsertAssignmentTokenGenerator.java     | 12 ++++-
 .../EncryptUpdateAssignmentTokenGenerator.java     | 12 ++++-
 .../EncryptAssignmentTokenGeneratorTest.java       | 16 +++++--
 .../EncryptInsertAssignmentTokenGeneratorTest.java | 11 ++++-
 .../EncryptUpdateAssignmentTokenGeneratorTest.java | 11 ++++-
 .../parser/statement/core/enums/SubqueryType.java  |  2 +-
 .../generic/bound/ColumnSegmentBoundInfo.java      |  2 +-
 8 files changed, 93 insertions(+), 24 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
index 5692d6bc17a..2c9f0fe7f15 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGenerator.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.rewrite.token.generator.assignment;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.encrypt.enums.EncryptDerivedColumnSuffix;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptAssignmentToken;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptLiteralAssignmentToken;
 import 
org.apache.shardingsphere.encrypt.rewrite.token.pojo.EncryptParameterAssignmentToken;
@@ -29,11 +30,15 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContex
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
+import 
org.apache.shardingsphere.sql.parser.statement.core.enums.TableSourceType;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -59,22 +64,33 @@ public final class EncryptAssignmentTokenGenerator {
      * @param tablesContext SQL statement context
      * @param setAssignmentSegment set assignment segment
      * @return generated SQL tokens
+     * @throws UnsupportedSQLOperationException unsupported SQL operation 
exception
      */
     public Collection<SQLToken> generateSQLTokens(final TablesContext 
tablesContext, final SetAssignmentSegment setAssignmentSegment) {
-        String tableName = 
tablesContext.getSimpleTables().iterator().next().getTableName().getIdentifier().getValue();
-        EncryptTable encryptTable = rule.getEncryptTable(tableName);
         Collection<SQLToken> result = new LinkedList<>();
         String schemaName = tablesContext.getSchemaName().orElseGet(() -> new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(databaseName));
         QuoteCharacter quoteCharacter = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getQuoteCharacter();
         for (ColumnAssignmentSegment each : 
setAssignmentSegment.getAssignments()) {
-            String columnName = 
each.getColumns().get(0).getIdentifier().getValue();
-            if (encryptTable.isEncryptColumn(columnName)) {
-                generateSQLToken(schemaName, encryptTable.getTable(), 
encryptTable.getEncryptColumn(columnName), each, 
quoteCharacter).ifPresent(result::add);
+            ColumnSegment columnSegment = each.getColumns().get(0);
+            Optional<EncryptTable> encryptTable = 
findEncryptTable(columnSegment);
+            if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(columnSegment.getIdentifier().getValue())) {
+                generateSQLToken(schemaName, encryptTable.get().getTable(), 
encryptTable.get().getEncryptColumn(columnSegment.getIdentifier().getValue()), 
each, quoteCharacter).ifPresent(result::add);
+            } else if (each.getValue() instanceof ColumnSegment && 
isEncryptColumn((ColumnSegment) each.getValue())) {
+                throw new UnsupportedSQLOperationException(
+                        "Can not use different encryptor for " + 
columnSegment.getColumnBoundInfo() + " and " + ((ColumnSegment) 
each.getValue()).getColumnBoundInfo() + " in set clause");
             }
         }
         return result;
     }
     
+    private boolean isEncryptColumn(final ColumnSegment columnSegment) {
+        ColumnSegmentBoundInfo columnBoundInfo = 
columnSegment.getColumnBoundInfo();
+        String originalTable = columnBoundInfo.getOriginalTable().getValue();
+        String originalColumn = columnBoundInfo.getOriginalColumn().getValue();
+        Optional<EncryptTable> encryptTable = 
rule.findEncryptTable(originalTable);
+        return encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(originalColumn);
+    }
+    
     private Optional<EncryptAssignmentToken> generateSQLToken(final String 
schemaName, final String tableName, final EncryptColumn encryptColumn, final 
ColumnAssignmentSegment segment,
                                                               final 
QuoteCharacter quoteCharacter) {
         if (segment.getValue() instanceof ParameterMarkerExpressionSegment) {
@@ -87,14 +103,21 @@ public final class EncryptAssignmentTokenGenerator {
     }
     
     private EncryptAssignmentToken generateParameterSQLToken(final 
EncryptColumn encryptColumn, final ColumnAssignmentSegment segment, final 
QuoteCharacter quoteCharacter) {
+        ColumnSegment columnSegment = segment.getColumns().get(0);
         EncryptParameterAssignmentToken result =
-                new 
EncryptParameterAssignmentToken(segment.getColumns().get(0).getStartIndex(), 
segment.getStopIndex(), quoteCharacter);
-        result.addColumnName(encryptColumn.getCipher().getName());
-        encryptColumn.getAssistedQuery().ifPresent(optional -> 
result.addColumnName(optional.getName()));
-        encryptColumn.getLikeQuery().ifPresent(optional -> 
result.addColumnName(optional.getName()));
+                new 
EncryptParameterAssignmentToken(columnSegment.getStartIndex(), 
segment.getStopIndex(), quoteCharacter);
+        result.addColumnName(getColumnName(columnSegment, 
EncryptDerivedColumnSuffix.CIPHER, encryptColumn.getCipher().getName()));
+        encryptColumn.getAssistedQuery().ifPresent(optional -> 
result.addColumnName(getColumnName(columnSegment, 
EncryptDerivedColumnSuffix.ASSISTED_QUERY, optional.getName())));
+        encryptColumn.getLikeQuery().ifPresent(optional -> 
result.addColumnName(getColumnName(columnSegment, 
EncryptDerivedColumnSuffix.LIKE_QUERY, optional.getName())));
         return result;
     }
     
+    private String getColumnName(final ColumnSegment columnSegment, final 
EncryptDerivedColumnSuffix derivedColumnSuffix, final String actualColumnName) {
+        return TableSourceType.TEMPORARY_TABLE == 
columnSegment.getColumnBoundInfo().getTableSourceType()
+                ? 
derivedColumnSuffix.getDerivedColumnName(columnSegment.getIdentifier().getValue(),
 databaseType)
+                : actualColumnName;
+    }
+    
     private EncryptAssignmentToken generateLiteralSQLToken(final String 
schemaName, final String tableName, final EncryptColumn encryptColumn, final 
ColumnAssignmentSegment segment,
                                                            final 
QuoteCharacter quoteCharacter) {
         EncryptLiteralAssignmentToken result =
@@ -109,7 +132,7 @@ public final class EncryptAssignmentTokenGenerator {
                                      final EncryptColumn encryptColumn, final 
ColumnAssignmentSegment segment, final EncryptLiteralAssignmentToken token) {
         Object originalValue = ((LiteralExpressionSegment) 
segment.getValue()).getLiterals();
         Object cipherValue = encryptColumn.getCipher().encrypt(databaseName, 
schemaName, tableName, encryptColumn.getName(), 
Collections.singletonList(originalValue)).iterator().next();
-        token.addAssignment(encryptColumn.getCipher().getName(), cipherValue);
+        token.addAssignment(getColumnName(segment.getColumns().get(0), 
EncryptDerivedColumnSuffix.CIPHER, encryptColumn.getCipher().getName()), 
cipherValue);
     }
     
     private void addAssistedQueryAssignment(final String schemaName, final 
String tableName, final EncryptColumn encryptColumn,
@@ -118,7 +141,7 @@ public final class EncryptAssignmentTokenGenerator {
         if (encryptColumn.getAssistedQuery().isPresent()) {
             Object assistedQueryValue = 
encryptColumn.getAssistedQuery().get().encrypt(
                     databaseName, schemaName, tableName, 
encryptColumn.getName(), 
Collections.singletonList(originalValue)).iterator().next();
-            
token.addAssignment(encryptColumn.getAssistedQuery().get().getName(), 
assistedQueryValue);
+            token.addAssignment(getColumnName(segment.getColumns().get(0), 
EncryptDerivedColumnSuffix.ASSISTED_QUERY, 
encryptColumn.getAssistedQuery().get().getName()), assistedQueryValue);
         }
     }
     
@@ -128,7 +151,11 @@ public final class EncryptAssignmentTokenGenerator {
         if (encryptColumn.getLikeQuery().isPresent()) {
             Object assistedQueryValue = 
encryptColumn.getLikeQuery().get().encrypt(databaseName, schemaName,
                     tableName, 
segment.getColumns().get(0).getIdentifier().getValue(), 
Collections.singletonList(originalValue)).iterator().next();
-            token.addAssignment(encryptColumn.getLikeQuery().get().getName(), 
assistedQueryValue);
+            token.addAssignment(getColumnName(segment.getColumns().get(0), 
EncryptDerivedColumnSuffix.LIKE_QUERY, 
encryptColumn.getLikeQuery().get().getName()), assistedQueryValue);
         }
     }
+    
+    private Optional<EncryptTable> findEncryptTable(final ColumnSegment 
columnSegment) {
+        return 
rule.findEncryptTable(columnSegment.getColumnBoundInfo().getOriginalTable().getValue());
+    }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
index 5547fda947c..cc10982bde2 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGenerator.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 
 import java.util.Collection;
 
@@ -45,7 +46,16 @@ public final class EncryptInsertAssignmentTokenGenerator 
implements CollectionSQ
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof InsertStatementContext && 
(((InsertStatementContext) 
sqlStatementContext).getSqlStatement()).getSetAssignment().isPresent()
-                && rule.findEncryptTable(((TableAvailable) 
sqlStatementContext).getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).isPresent();
+                && containsEncryptTable(((TableAvailable) 
sqlStatementContext).getTablesContext().getSimpleTables());
+    }
+    
+    private boolean containsEncryptTable(final Collection<SimpleTableSegment> 
simpleTableSegments) {
+        for (SimpleTableSegment each : simpleTableSegments) {
+            if 
(rule.findEncryptTable(each.getTableName().getIdentifier().getValue()).isPresent())
 {
+                return true;
+            }
+        }
+        return false;
     }
     
     @SuppressWarnings("OptionalGetWithoutIsPresent")
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
index ca41790067d..910f83f7386 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGenerator.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.common.generator.CollectionSQLTokenGenerator;
 import org.apache.shardingsphere.infra.rewrite.sql.token.common.pojo.SQLToken;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 
 import java.util.Collection;
 
@@ -45,7 +46,16 @@ public final class EncryptUpdateAssignmentTokenGenerator 
implements CollectionSQ
     @Override
     public boolean isGenerateSQLToken(final SQLStatementContext 
sqlStatementContext) {
         return sqlStatementContext instanceof UpdateStatementContext
-                && rule.findEncryptTable(((TableAvailable) 
sqlStatementContext).getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).isPresent();
+                && containsEncryptTable(((TableAvailable) 
sqlStatementContext).getTablesContext().getSimpleTables());
+    }
+    
+    private boolean containsEncryptTable(final Collection<SimpleTableSegment> 
simpleTableSegments) {
+        for (SimpleTableSegment each : simpleTableSegments) {
+            if 
(rule.findEncryptTable(each.getTableName().getIdentifier().getValue()).isPresent())
 {
+                return true;
+            }
+        }
+        return false;
     }
     
     @Override
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGeneratorTest.java
index c89e9dd667c..1dfa6bfa06b 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptAssignmentTokenGeneratorTest.java
@@ -21,13 +21,18 @@ import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
 import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import 
org.apache.shardingsphere.sql.parser.statement.core.enums.TableSourceType;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.LiteralExpressionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.simple.ParameterMarkerExpressionSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -39,6 +44,7 @@ import org.mockito.MockedConstruction;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Collections;
+import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -81,9 +87,11 @@ class EncryptAssignmentTokenGeneratorTest {
     @BeforeEach
     void setup() {
         tokenGenerator = new 
EncryptAssignmentTokenGenerator(mockEncryptRule(), null, null);
-        
when(tablesContext.getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).thenReturn("table");
-        
when(assignmentSegment.getColumns().get(0).getIdentifier().getValue()).thenReturn("columns");
         
when(setAssignmentSegment.getAssignments()).thenReturn(Collections.singleton(assignmentSegment));
+        ColumnSegment columnSegment = new ColumnSegment(0, 0, new 
IdentifierValue("columns"));
+        columnSegment.setColumnBoundInfo(new ColumnSegmentBoundInfo(new 
TableSegmentBoundInfo(new IdentifierValue("foo_db"), new 
IdentifierValue("foo_schema")), new IdentifierValue("table"),
+                new IdentifierValue("columns"), 
TableSourceType.PHYSICAL_TABLE));
+        
when(assignmentSegment.getColumns()).thenReturn(Collections.singletonList(columnSegment));
     }
     
     private EncryptRule mockEncryptRule() {
@@ -91,7 +99,7 @@ class EncryptAssignmentTokenGeneratorTest {
         EncryptTable encryptTable = mock(EncryptTable.class);
         when(encryptTable.isEncryptColumn("columns")).thenReturn(true);
         
when(encryptTable.getEncryptColumn("columns")).thenReturn(mock(EncryptColumn.class,
 RETURNS_DEEP_STUBS));
-        when(result.getEncryptTable("table")).thenReturn(encryptTable);
+        
when(result.findEncryptTable("table")).thenReturn(Optional.of(encryptTable));
         return result;
     }
     
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
index b23b7578fee..fd80e6617b4 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptInsertAssignmentTokenGeneratorTest.java
@@ -23,6 +23,10 @@ import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatem
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.SetAssignmentSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -50,8 +54,11 @@ class EncryptInsertAssignmentTokenGeneratorTest {
     
     @BeforeEach
     void setup() {
-        tokenGenerator = new 
EncryptInsertAssignmentTokenGenerator(mockEncryptRule(), 
mock(ShardingSphereDatabase.class));
-        
when(insertStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).thenReturn("table");
+        EncryptRule encryptRule = mockEncryptRule();
+        tokenGenerator = new 
EncryptInsertAssignmentTokenGenerator(encryptRule, 
mock(ShardingSphereDatabase.class));
+        TableNameSegment tableNameSegment = new TableNameSegment(0, 0, new 
IdentifierValue("table"));
+        tableNameSegment.setTableBoundInfo(new TableSegmentBoundInfo(new 
IdentifierValue("foo_db"), new IdentifierValue("foo_db")));
+        
when(insertStatementContext.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(new
 SimpleTableSegment(tableNameSegment)));
         ColumnAssignmentSegment assignmentSegment = 
mock(ColumnAssignmentSegment.class);
         
when(setAssignmentSegment.getAssignments()).thenReturn(Collections.singleton(assignmentSegment));
     }
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
index c8e7efa75c3..1c4ab0ea19b 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/assignment/EncryptUpdateAssignmentTokenGeneratorTest.java
@@ -22,6 +22,10 @@ import 
org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.UpdateStatementContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.assignment.ColumnAssignmentSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.TableSegmentBoundInfo;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.TableNameSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -46,8 +50,11 @@ class EncryptUpdateAssignmentTokenGeneratorTest {
     
     @BeforeEach
     void setup() {
-        tokenGenerator = new 
EncryptUpdateAssignmentTokenGenerator(mockEncryptRule(), 
mock(ShardingSphereDatabase.class));
-        
when(updateStatementContext.getTablesContext().getSimpleTables().iterator().next().getTableName().getIdentifier().getValue()).thenReturn("table");
+        EncryptRule encryptRule = mockEncryptRule();
+        tokenGenerator = new 
EncryptUpdateAssignmentTokenGenerator(encryptRule, 
mock(ShardingSphereDatabase.class));
+        TableNameSegment tableNameSegment = new TableNameSegment(0, 0, new 
IdentifierValue("table"));
+        tableNameSegment.setTableBoundInfo(new TableSegmentBoundInfo(new 
IdentifierValue("foo_db"), new IdentifierValue("foo_db")));
+        
when(updateStatementContext.getTablesContext().getSimpleTables()).thenReturn(Collections.singleton(new
 SimpleTableSegment(tableNameSegment)));
         ColumnAssignmentSegment assignmentSegment = 
mock(ColumnAssignmentSegment.class);
         
when(updateStatementContext.getSqlStatement().getSetAssignment().getAssignments()).thenReturn(Collections.singleton(assignmentSegment));
     }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/enums/SubqueryType.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/enums/SubqueryType.java
index 5a711674575..dfb1fd59ff5 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/enums/SubqueryType.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/enums/SubqueryType.java
@@ -22,5 +22,5 @@ package 
org.apache.shardingsphere.sql.parser.statement.core.enums;
  */
 public enum SubqueryType {
     
-    PROJECTION, TABLE, JOIN, PREDICATE, INSERT_SELECT, EXISTS, WITH, 
VIEW_DEFINITION
+    PROJECTION, TABLE, JOIN, PREDICATE, INSERT_SELECT, EXISTS, WITH, 
VIEW_DEFINITION, UPDATE_JOIN, DELETE_JOIN
 }
diff --git 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentBoundInfo.java
 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentBoundInfo.java
index ec2c66f70d6..dba37e23024 100644
--- 
a/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentBoundInfo.java
+++ 
b/parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/segment/generic/bound/ColumnSegmentBoundInfo.java
@@ -36,7 +36,7 @@ public final class ColumnSegmentBoundInfo {
     private final TableSourceType tableSourceType;
     
     public ColumnSegmentBoundInfo(final IdentifierValue originalColumn) {
-        this(null, null, originalColumn, TableSourceType.TEMPORARY_TABLE);
+        this(null, null, originalColumn, TableSourceType.PHYSICAL_TABLE);
     }
     
     public ColumnSegmentBoundInfo(final TableSegmentBoundInfo tableBoundInfo, 
final IdentifierValue originalTable, final IdentifierValue originalColumn, 
final TableSourceType tableSourceType) {

Reply via email to