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

zhangliang 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 b71b5839693 Add SameEncryptorComparator (#32268)
b71b5839693 is described below

commit b71b58396930d018cca0be21761168c5cf717804
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 25 20:25:53 2024 +0800

    Add SameEncryptorComparator (#32268)
    
    * Add SameEncryptorComparator
    
    * Add SameEncryptorComparator
    
    * Add SameEncryptorComparator
---
 ...sertSelectColumnsSameEncryptorUsageChecker.java | 69 ++++++++++++++++++++
 .../JoinConditionsSameEncryptorUsageChecker.java   | 58 +++++++++++++++++
 .../token/acrosstable/SameEncryptorComparator.java | 46 ++++++++++++++
 .../EncryptPredicateColumnTokenGenerator.java      |  6 +-
 .../EncryptInsertCipherNameTokenGenerator.java     |  4 +-
 .../EncryptInsertDefaultColumnsTokenGenerator.java |  6 +-
 .../token/util/EncryptTokenGeneratorUtils.java     | 74 ++--------------------
 7 files changed, 187 insertions(+), 76 deletions(-)

diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/InsertSelectColumnsSameEncryptorUsageChecker.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/InsertSelectColumnsSameEncryptorUsageChecker.java
new file mode 100644
index 00000000000..a5ebc696f30
--- /dev/null
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/InsertSelectColumnsSameEncryptorUsageChecker.java
@@ -0,0 +1,69 @@
+/*
+ * 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.acrosstable;
+
+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.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+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;
+import java.util.Iterator;
+
+/**
+ * Insert select columns same encryptor usage checker.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class InsertSelectColumnsSameEncryptorUsageChecker {
+    
+    /**
+     * Judge whether all insert select columns use same encryptor or not.
+     *
+     * @param insertColumns insert columns
+     * @param projections projections
+     * @param encryptRule encrypt rule
+     * @return same or different encryptors are using 
+     */
+    public static boolean isSame(final Collection<ColumnSegment> 
insertColumns, final Collection<Projection> projections, final EncryptRule 
encryptRule) {
+        Iterator<ColumnSegment> insertColumnsIterator = 
insertColumns.iterator();
+        Iterator<Projection> projectionIterator = projections.iterator();
+        while (insertColumnsIterator.hasNext()) {
+            ColumnSegment columnSegment = insertColumnsIterator.next();
+            EncryptAlgorithm columnEncryptor = encryptRule.findQueryEncryptor(
+                    
columnSegment.getColumnBoundInfo().getOriginalTable().getValue(), 
columnSegment.getColumnBoundInfo().getOriginalColumn().getValue()).orElse(null);
+            Projection projection = projectionIterator.next();
+            ColumnSegmentBoundInfo columnBoundInfo = 
getColumnSegmentBoundInfo(projection);
+            EncryptAlgorithm projectionEncryptor = 
encryptRule.findQueryEncryptor(columnBoundInfo.getOriginalTable().getValue(), 
columnBoundInfo.getOriginalColumn().getValue()).orElse(null);
+            if (!SameEncryptorComparator.isSame(columnEncryptor, 
projectionEncryptor)) {
+                return false;
+            }
+        }
+        return true;
+    }
+    
+    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()));
+    }
+}
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/JoinConditionsSameEncryptorUsageChecker.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/JoinConditionsSameEncryptorUsageChecker.java
new file mode 100644
index 00000000000..15eda02e0fb
--- /dev/null
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/JoinConditionsSameEncryptorUsageChecker.java
@@ -0,0 +1,58 @@
+/*
+ * 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.acrosstable;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.column.ColumnSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
+import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.bound.ColumnSegmentBoundInfo;
+
+import java.util.Collection;
+
+/**
+ * Join conditions same encryptor usage checker.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class JoinConditionsSameEncryptorUsageChecker {
+    
+    /**
+     * Judge whether all join conditions use same encryptor or not.
+     *
+     * @param joinConditions join conditions
+     * @param encryptRule encrypt rule
+     * @return same or different encryptors are using
+     */
+    public static boolean isSame(final Collection<BinaryOperationExpression> 
joinConditions, final EncryptRule encryptRule) {
+        for (BinaryOperationExpression each : joinConditions) {
+            if (!(each.getLeft() instanceof ColumnSegment) || 
!(each.getRight() instanceof ColumnSegment)) {
+                continue;
+            }
+            ColumnSegmentBoundInfo leftColumnInfo = ((ColumnSegment) 
each.getLeft()).getColumnBoundInfo();
+            EncryptAlgorithm leftColumnEncryptor = 
encryptRule.findQueryEncryptor(leftColumnInfo.getOriginalTable().getValue(), 
leftColumnInfo.getOriginalColumn().getValue()).orElse(null);
+            ColumnSegmentBoundInfo rightColumnInfo = ((ColumnSegment) 
each.getRight()).getColumnBoundInfo();
+            EncryptAlgorithm rightColumnEncryptor = 
encryptRule.findQueryEncryptor(rightColumnInfo.getOriginalTable().getValue(), 
rightColumnInfo.getOriginalColumn().getValue()).orElse(null);
+            if (!SameEncryptorComparator.isSame(leftColumnEncryptor, 
rightColumnEncryptor)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/SameEncryptorComparator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/SameEncryptorComparator.java
new file mode 100644
index 00000000000..3d50ad0553c
--- /dev/null
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/acrosstable/SameEncryptorComparator.java
@@ -0,0 +1,46 @@
+/*
+ * 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.acrosstable;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
+
+/**
+ * Same encryptor comparator.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SameEncryptorComparator {
+    
+    /**
+     * Compare whether to same encryptor.
+     *
+     * @param encryptor1 encryptor 1 to be compared
+     * @param encryptor2 encryptor 2 to be compared
+     * @return same or different encryptors
+     */
+    public static boolean isSame(final EncryptAlgorithm encryptor1, final 
EncryptAlgorithm encryptor2) {
+        if (null == encryptor1 && null == encryptor2) {
+            return true;
+        }
+        if (null != encryptor1 && null != encryptor2) {
+            return encryptor1.getType().equals(encryptor2.getType()) && 
encryptor1.equals(encryptor2);
+        }
+        return false;
+    }
+}
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
index a4bd16903bb..c16c27734c2 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptPredicateColumnTokenGenerator.java
@@ -21,11 +21,11 @@ import lombok.Setter;
 import 
org.apache.shardingsphere.encrypt.exception.syntax.UnsupportedEncryptSQLException;
 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.rewrite.token.acrosstable.JoinConditionsSameEncryptorUsageChecker;
 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.column.item.LikeQueryColumnItem;
+import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 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.SQLStatementContext;
@@ -84,7 +84,7 @@ public final class EncryptPredicateColumnTokenGenerator 
implements CollectionSQL
             whereSegments = ((WhereAvailable) 
sqlStatementContext).getWhereSegments();
             joinConditions = ((WhereAvailable) 
sqlStatementContext).getJoinConditions();
         }
-        
ShardingSpherePreconditions.checkState(EncryptTokenGeneratorUtils.isUseSameEncryptor(joinConditions,
 encryptRule),
+        
ShardingSpherePreconditions.checkState(JoinConditionsSameEncryptorUsageChecker.isSame(joinConditions,
 encryptRule),
                 () -> new UnsupportedSQLOperationException("Can not use 
different encryptor in join condition"));
         String defaultSchema = new 
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(databaseName);
         ShardingSphereSchema schema = ((TableAvailable) 
sqlStatementContext).getTablesContext().getSchemaName().map(schemas::get).orElseGet(()
 -> schemas.get(defaultSchema));
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
index bcf849aa34f..5cfb725118c 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertCipherNameTokenGenerator.java
@@ -20,7 +20,7 @@ package 
org.apache.shardingsphere.encrypt.rewrite.token.generator.insert;
 import com.google.common.base.Preconditions;
 import lombok.Setter;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.util.EncryptTokenGeneratorUtils;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.acrosstable.InsertSelectColumnsSameEncryptorUsageChecker;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.encrypt.rule.table.EncryptTable;
 import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.Projection;
@@ -65,7 +65,7 @@ public final class EncryptInsertCipherNameTokenGenerator 
implements CollectionSQ
         if (null != insertStatementContext.getInsertSelectContext()) {
             Collection<Projection> projections = 
insertStatementContext.getInsertSelectContext().getSelectStatementContext().getProjectionsContext().getExpandProjections();
             ShardingSpherePreconditions.checkState(insertColumns.size() == 
projections.size(), () -> new UnsupportedSQLOperationException("Column count 
doesn't match value count."));
-            
ShardingSpherePreconditions.checkState(EncryptTokenGeneratorUtils.isUseSameEncryptor(insertColumns,
 projections, encryptRule),
+            
ShardingSpherePreconditions.checkState(InsertSelectColumnsSameEncryptorUsageChecker.isSame(insertColumns,
 projections, encryptRule),
                     () -> new UnsupportedSQLOperationException("Can not use 
different encryptor in insert select columns"));
         }
         EncryptTable encryptTable = 
encryptRule.getEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
index b3ed7c58837..454659e6f34 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/insert/EncryptInsertDefaultColumnsTokenGenerator.java
@@ -20,10 +20,10 @@ package 
org.apache.shardingsphere.encrypt.rewrite.token.generator.insert;
 import com.google.common.base.Preconditions;
 import lombok.Setter;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
-import 
org.apache.shardingsphere.encrypt.rewrite.token.util.EncryptTokenGeneratorUtils;
+import 
org.apache.shardingsphere.encrypt.rewrite.token.acrosstable.InsertSelectColumnsSameEncryptorUsageChecker;
 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.infra.binder.context.segment.select.projection.Projection;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
@@ -90,7 +90,7 @@ public final class EncryptInsertDefaultColumnsTokenGenerator 
implements Optional
             Collection<ColumnSegment> derivedInsertColumns = 
insertStatementContext.getSqlStatement().getDerivedInsertColumns();
             Collection<Projection> projections = 
insertStatementContext.getInsertSelectContext().getSelectStatementContext().getProjectionsContext().getExpandProjections();
             ShardingSpherePreconditions.checkState(derivedInsertColumns.size() 
== projections.size(), () -> new UnsupportedSQLOperationException("Column count 
doesn't match value count."));
-            
ShardingSpherePreconditions.checkState(EncryptTokenGeneratorUtils.isUseSameEncryptor(derivedInsertColumns,
 projections, encryptRule),
+            
ShardingSpherePreconditions.checkState(InsertSelectColumnsSameEncryptorUsageChecker.isSame(derivedInsertColumns,
 projections, encryptRule),
                     () -> new UnsupportedSQLOperationException("Can not use 
different encryptor in insert select columns"));
         }
         return new UseDefaultInsertColumnsToken(
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
index 8174619be75..41ea106b846 100644
--- 
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
@@ -26,14 +26,10 @@ import 
org.apache.shardingsphere.infra.binder.context.segment.select.projection.
 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.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.combine.CombineSegment;
-import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.expr.BinaryOperationExpression;
 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;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -42,70 +38,6 @@ import java.util.List;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class EncryptTokenGeneratorUtils {
     
-    /**
-     * Judge whether all join conditions use same encryptor or not.
-     *
-     * @param joinConditions join conditions
-     * @param encryptRule encrypt rule
-     * @return whether all join conditions use same encryptor or not
-     */
-    public static boolean isUseSameEncryptor(final 
Collection<BinaryOperationExpression> joinConditions, final EncryptRule 
encryptRule) {
-        for (BinaryOperationExpression each : joinConditions) {
-            if (!(each.getLeft() instanceof ColumnSegment) || 
!(each.getRight() instanceof ColumnSegment)) {
-                continue;
-            }
-            ColumnSegmentBoundInfo leftColumnInfo = ((ColumnSegment) 
each.getLeft()).getColumnBoundInfo();
-            EncryptAlgorithm leftColumnEncryptor = 
encryptRule.findQueryEncryptor(leftColumnInfo.getOriginalTable().getValue(), 
leftColumnInfo.getOriginalColumn().getValue()).orElse(null);
-            ColumnSegmentBoundInfo rightColumnInfo = ((ColumnSegment) 
each.getRight()).getColumnBoundInfo();
-            EncryptAlgorithm rightColumnEncryptor = 
encryptRule.findQueryEncryptor(rightColumnInfo.getOriginalTable().getValue(), 
rightColumnInfo.getOriginalColumn().getValue()).orElse(null);
-            if (isDifferentEncryptor(leftColumnEncryptor, 
rightColumnEncryptor)) {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    /**
-     * Judge whether all insert select columns use same encryptor or not.
-     *
-     * @param insertColumns insert columns
-     * @param projections projections
-     * @param encryptRule encrypt rule
-     * @return whether all insert select columns use same encryptor or not 
-     */
-    public static boolean isUseSameEncryptor(final Collection<ColumnSegment> 
insertColumns, final Collection<Projection> projections, final EncryptRule 
encryptRule) {
-        Iterator<ColumnSegment> insertColumnsIterator = 
insertColumns.iterator();
-        Iterator<Projection> projectionIterator = projections.iterator();
-        while (insertColumnsIterator.hasNext()) {
-            ColumnSegment columnSegment = insertColumnsIterator.next();
-            EncryptAlgorithm leftColumnEncryptor = 
encryptRule.findQueryEncryptor(
-                    
columnSegment.getColumnBoundInfo().getOriginalTable().getValue(), 
columnSegment.getColumnBoundInfo().getOriginalColumn().getValue()).orElse(null);
-            Projection projection = projectionIterator.next();
-            ColumnSegmentBoundInfo columnBoundInfo = 
getColumnSegmentBoundInfo(projection);
-            EncryptAlgorithm rightColumnEncryptor = 
encryptRule.findQueryEncryptor(columnBoundInfo.getOriginalTable().getValue(), 
columnBoundInfo.getOriginalColumn().getValue()).orElse(null);
-            if (isDifferentEncryptor(leftColumnEncryptor, 
rightColumnEncryptor)) {
-                return false;
-            }
-        }
-        return true;
-    }
-    
-    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()));
-    }
-    
-    private static boolean isDifferentEncryptor(final EncryptAlgorithm 
leftColumnEncryptor, final EncryptAlgorithm rightColumnEncryptor) {
-        if (null != leftColumnEncryptor && null != rightColumnEncryptor) {
-            if 
(!leftColumnEncryptor.getType().equals(rightColumnEncryptor.getType())) {
-                return true;
-            }
-            return !leftColumnEncryptor.equals(rightColumnEncryptor);
-        }
-        return null != leftColumnEncryptor || null != rightColumnEncryptor;
-    }
-    
     /**
      * Judge whether contains encrypt projection in combine statement or not.
      *
@@ -134,4 +66,10 @@ public final class EncryptTokenGeneratorUtils {
         }
         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