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

duanzhengqiang 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 0ea667aed40 Add shorthand projection isNeedRewrite judgement (#33758)
0ea667aed40 is described below

commit 0ea667aed4072ebb5625a02c7330ac9b6b48a8ea
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Nov 21 17:28:24 2024 +0800

    Add shorthand projection isNeedRewrite judgement (#33758)
---
 .../generator/projection/EncryptProjectionTokenGenerator.java    | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
index f1b23f9ed65..dc2dc317113 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/projection/EncryptProjectionTokenGenerator.java
@@ -123,7 +123,7 @@ public final class EncryptProjectionTokenGenerator {
                 ColumnProjection columnProjection = (ColumnProjection) each;
                 boolean newAddedColumn = 
existColumnNames.add(columnProjection.getOriginalTable().getValue() + "." + 
columnProjection.getOriginalColumn().getValue());
                 Optional<EncryptTable> encryptTable = 
encryptRule.findEncryptTable(columnProjection.getOriginalTable().getValue());
-                if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(columnProjection.getOriginalColumn().getValue())
 && !selectStatementContext.containsTableSubquery()) {
+                if (encryptTable.isPresent() && 
encryptTable.get().isEncryptColumn(columnProjection.getOriginalColumn().getValue())
 && isNeedRewrite(selectStatementContext, subqueryType)) {
                     EncryptColumn encryptColumn = 
encryptTable.get().getEncryptColumn(columnProjection.getOriginalColumn().getValue());
                     projections.addAll(generateProjections(encryptColumn, 
columnProjection, subqueryType, newAddedColumn));
                     continue;
@@ -137,6 +137,13 @@ public final class EncryptProjectionTokenGenerator {
         return new SubstitutableColumnNameToken(startIndex, 
segment.getStopIndex(), projections, selectStatementContext.getDatabaseType());
     }
     
+    private boolean isNeedRewrite(final SelectStatementContext 
selectStatementContext, final SubqueryType subqueryType) {
+        if (SubqueryType.TABLE == subqueryType) {
+            return true;
+        }
+        return !selectStatementContext.containsTableSubquery();
+    }
+    
     private boolean isNeedRewrite(final SelectStatementContext 
selectStatementContext, final ColumnProjectionSegment columnSegment) {
         SelectStatement sqlStatement = 
selectStatementContext.getSqlStatement();
         if (sqlStatement.getWithSegment().isPresent() && 
!(sqlStatement.getFrom().isPresent() && sqlStatement.getFrom().get() instanceof 
SubqueryTableSegment)

Reply via email to