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

sunnianjun 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 c7d5e37fbf3 Refactor EncryptProjectionTokenGenerator (#32277)
c7d5e37fbf3 is described below

commit c7d5e37fbf32415bd5d3bf51b29d729d6b288fe2
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Fri Jul 26 11:37:30 2024 +0800

    Refactor EncryptProjectionTokenGenerator (#32277)
    
    * Remove useless codes on EncryptAlgorithmMetaData
    
    * Refactor EncryptProjectionTokenGenerator
---
 .../generator/EncryptProjectionTokenGenerator.java | 36 ++++++++++-
 .../token/util/EncryptTokenGeneratorUtils.java     | 75 ----------------------
 2 files changed, 33 insertions(+), 78 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
index db1521ec783..deef748d8e6 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptProjectionTokenGenerator.java
@@ -20,10 +20,10 @@ package 
org.apache.shardingsphere.encrypt.rewrite.token.generator;
 import lombok.Setter;
 import org.apache.shardingsphere.encrypt.rewrite.aware.DatabaseTypeAware;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.util.EncryptTokenGeneratorUtils;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import org.apache.shardingsphere.encrypt.rule.column.EncryptColumn;
+import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
+import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.DerivedColumn;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.ProjectionsContext;
@@ -41,10 +41,12 @@ import 
org.apache.shardingsphere.infra.rewrite.sql.token.generator.aware.Previou
 import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
 import 
org.apache.shardingsphere.infra.rewrite.sql.token.pojo.generic.SubstitutableColumnNameToken;
 import org.apache.shardingsphere.sql.parser.statement.core.enums.SubqueryType;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ColumnProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ShorthandProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.OwnerSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
 import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
 
 import java.util.Collection;
@@ -92,7 +94,7 @@ public final class EncryptProjectionTokenGenerator implements 
CollectionSQLToken
     
     private void addGenerateSQLTokens(final Collection<SQLToken> sqlTokens, 
final SelectStatementContext selectStatementContext) {
         ShardingSpherePreconditions.checkState(
-                !selectStatementContext.isContainsCombine() || 
!EncryptTokenGeneratorUtils.containsEncryptProjectionInCombineStatement(selectStatementContext,
 encryptRule),
+                !selectStatementContext.isContainsCombine() || 
!containsEncryptProjectionInCombineStatement(selectStatementContext),
                 () -> new UnsupportedSQLOperationException("Can not support 
encrypt projection in combine statement"));
         for (ProjectionSegment each : 
selectStatementContext.getSqlStatement().getProjections().getProjections()) {
             SubqueryType subqueryType = 
selectStatementContext.getSubqueryType();
@@ -117,6 +119,34 @@ public final class EncryptProjectionTokenGenerator 
implements CollectionSQLToken
         }
     }
     
+    private boolean containsEncryptProjectionInCombineStatement(final 
SelectStatementContext selectStatementContext) {
+        if 
(!selectStatementContext.getSqlStatement().getCombine().isPresent()) {
+            return false;
+        }
+        CombineSegment combineSegment = 
selectStatementContext.getSqlStatement().getCombine().get();
+        List<Projection> leftProjections = 
selectStatementContext.getSubqueryContexts().get(combineSegment.getLeft().getStartIndex()).getProjectionsContext().getExpandProjections();
+        List<Projection> rightProjections = 
selectStatementContext.getSubqueryContexts().get(combineSegment.getRight().getStartIndex()).getProjectionsContext().getExpandProjections();
+        ShardingSpherePreconditions.checkState(leftProjections.size() == 
rightProjections.size(), () -> new UnsupportedSQLOperationException("Column 
projections must be same for combine statement"));
+        for (int i = 0; i < leftProjections.size(); i++) {
+            Projection leftProjection = leftProjections.get(i);
+            Projection rightProjection = rightProjections.get(i);
+            ColumnSegmentBoundInfo leftColumnInfo = 
getColumnSegmentBoundInfo(leftProjection);
+            EncryptAlgorithm leftColumnEncryptor = 
encryptRule.findQueryEncryptor(leftColumnInfo.getOriginalTable().getValue(), 
leftColumnInfo.getOriginalColumn().getValue()).orElse(null);
+            ColumnSegmentBoundInfo rightColumnInfo = 
getColumnSegmentBoundInfo(rightProjection);
+            EncryptAlgorithm rightColumnEncryptor = 
encryptRule.findQueryEncryptor(rightColumnInfo.getOriginalTable().getValue(), 
rightColumnInfo.getOriginalColumn().getValue()).orElse(null);
+            if (null != leftColumnEncryptor || null != rightColumnEncryptor) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    private ColumnSegmentBoundInfo getColumnSegmentBoundInfo(final Projection 
projection) {
+        return projection instanceof ColumnProjection
+                ? new ColumnSegmentBoundInfo(null, null, ((ColumnProjection) 
projection).getOriginalTable(), ((ColumnProjection) 
projection).getOriginalColumn())
+                : new ColumnSegmentBoundInfo(new 
IdentifierValue(projection.getColumnLabel()));
+    }
+    
     private ColumnProjection buildColumnProjection(final 
ColumnProjectionSegment segment) {
         IdentifierValue owner = 
segment.getColumn().getOwner().map(OwnerSegment::getIdentifier).orElse(null);
         ColumnProjection result = new ColumnProjection(owner, 
segment.getColumn().getIdentifier(), segment.getAliasName().isPresent() ? 
segment.getAlias().orElse(null) : null, databaseType);
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/util/EncryptTokenGeneratorUtils.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/util/EncryptTokenGeneratorUtils.java
deleted file mode 100644
index 41ea106b846..00000000000
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/util/EncryptTokenGeneratorUtils.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.encrypt.rewrite.token.util;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.encrypt.rule.EncryptRule;
-import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
-import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
-import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.impl.ColumnProjection;
-import 
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
-import 
org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue;
-
-import java.util.List;
-
-/**
- * Encrypt token generator utils.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class EncryptTokenGeneratorUtils {
-    
-    /**
-     * Judge whether contains encrypt projection in combine statement or not.
-     *
-     * @param selectStatementContext select statement context
-     * @param encryptRule encrypt rule
-     * @return whether contains encrypt projection in combine statement or not
-     */
-    public static boolean containsEncryptProjectionInCombineStatement(final 
SelectStatementContext selectStatementContext, final EncryptRule encryptRule) {
-        if 
(!selectStatementContext.getSqlStatement().getCombine().isPresent()) {
-            return false;
-        }
-        CombineSegment combineSegment = 
selectStatementContext.getSqlStatement().getCombine().get();
-        List<Projection> leftProjections = 
selectStatementContext.getSubqueryContexts().get(combineSegment.getLeft().getStartIndex()).getProjectionsContext().getExpandProjections();
-        List<Projection> rightProjections = 
selectStatementContext.getSubqueryContexts().get(combineSegment.getRight().getStartIndex()).getProjectionsContext().getExpandProjections();
-        ShardingSpherePreconditions.checkState(leftProjections.size() == 
rightProjections.size(), () -> new UnsupportedSQLOperationException("Column 
projections must be same for combine statement"));
-        for (int i = 0; i < leftProjections.size(); i++) {
-            Projection leftProjection = leftProjections.get(i);
-            Projection rightProjection = rightProjections.get(i);
-            ColumnSegmentBoundInfo leftColumnInfo = 
getColumnSegmentBoundInfo(leftProjection);
-            EncryptAlgorithm leftColumnEncryptor = 
encryptRule.findQueryEncryptor(leftColumnInfo.getOriginalTable().getValue(), 
leftColumnInfo.getOriginalColumn().getValue()).orElse(null);
-            ColumnSegmentBoundInfo rightColumnInfo = 
getColumnSegmentBoundInfo(rightProjection);
-            EncryptAlgorithm rightColumnEncryptor = 
encryptRule.findQueryEncryptor(rightColumnInfo.getOriginalTable().getValue(), 
rightColumnInfo.getOriginalColumn().getValue()).orElse(null);
-            if (null != leftColumnEncryptor || null != rightColumnEncryptor) {
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    private static ColumnSegmentBoundInfo getColumnSegmentBoundInfo(final 
Projection projection) {
-        return projection instanceof ColumnProjection
-                ? new ColumnSegmentBoundInfo(null, null, ((ColumnProjection) 
projection).getOriginalTable(), ((ColumnProjection) 
projection).getOriginalColumn())
-                : new ColumnSegmentBoundInfo(new 
IdentifierValue(projection.getColumnLabel()));
-    }
-}

Reply via email to