You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/06/23 15:49:14 UTC

[shardingsphere] branch master updated: Refactor EncryptTable.getLogicAndCipherColumns() (#26511)

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

jianglongtao 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 ac1ea9d976e Refactor EncryptTable.getLogicAndCipherColumns() (#26511)
ac1ea9d976e is described below

commit ac1ea9d976eb68bdc327a992b213e29f3a4df09d
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Fri Jun 23 23:49:07 2023 +0800

    Refactor EncryptTable.getLogicAndCipherColumns() (#26511)
    
    * Refactor EncryptTable.getLogicAndCipherColumns()
    
    * Fix EncryptAlterTableTokenGenerator
---
 .../token/generator/EncryptAlterTableTokenGenerator.java    |  2 +-
 .../insert/EncryptInsertCipherNameTokenGenerator.java       | 10 +++++-----
 .../apache/shardingsphere/encrypt/rule/EncryptTable.java    | 13 -------------
 .../shardingsphere/encrypt/rule/EncryptTableTest.java       |  6 ------
 4 files changed, 6 insertions(+), 25 deletions(-)

diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
index a85c902184d..493666cdb47 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rewrite/token/generator/EncryptAlterTableTokenGenerator.java
@@ -173,7 +173,7 @@ public final class EncryptAlterTableTokenGenerator implements CollectionSQLToken
     private Collection<? extends SQLToken> getChangeColumnTokens(final EncryptTable encryptTable, final ChangeColumnDefinitionSegment segment) {
         isSameEncryptColumn(encryptTable, segment);
         String columnName = segment.getColumnDefinition().getColumnName().getIdentifier().getValue();
-        String previousColumnName = segment.getColumnDefinition().getColumnName().getIdentifier().getValue();
+        String previousColumnName = segment.getPreviousColumn().getIdentifier().getValue();
         if (!encryptTable.isEncryptColumn(columnName) || !encryptTable.isEncryptColumn(previousColumnName)) {
             return Collections.emptyList();
         }
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 0eb879bfb1e..684073a6ce0 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
@@ -21,6 +21,7 @@ import com.google.common.base.Preconditions;
 import lombok.Setter;
 import org.apache.shardingsphere.encrypt.rewrite.aware.EncryptRuleAware;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
+import org.apache.shardingsphere.encrypt.rule.EncryptTable;
 import org.apache.shardingsphere.infra.binder.segment.select.projection.Projection;
 import org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -34,7 +35,6 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.Insert
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.Optional;
 
 /**
@@ -58,12 +58,12 @@ public final class EncryptInsertCipherNameTokenGenerator implements CollectionSQ
     public Collection<SQLToken> generateSQLTokens(final InsertStatementContext insertStatementContext) {
         Optional<InsertColumnsSegment> insertColumnsSegment = insertStatementContext.getSqlStatement().getInsertColumns();
         Preconditions.checkState(insertColumnsSegment.isPresent());
-        Map<String, String> logicAndCipherColumns = encryptRule.getEncryptTable(
-                insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue()).getLogicAndCipherColumns();
+        EncryptTable encryptTable = encryptRule.getEncryptTable(insertStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue());
         Collection<SQLToken> result = new LinkedList<>();
         for (ColumnSegment each : insertColumnsSegment.get().getColumns()) {
-            if (logicAndCipherColumns.containsKey(each.getIdentifier().getValue())) {
-                Collection<Projection> projections = Collections.singleton(new ColumnProjection(null, logicAndCipherColumns.get(each.getIdentifier().getValue()), null));
+            String columnName = each.getIdentifier().getValue();
+            if (encryptTable.isEncryptColumn(columnName)) {
+                Collection<Projection> projections = Collections.singleton(new ColumnProjection(null, encryptTable.getEncryptColumn(columnName).getCipher().getName(), null));
                 result.add(new SubstitutableColumnNameToken(each.getStartIndex(), each.getStopIndex(), projections));
             }
         }
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
index 1b54bb96e6b..5cb8471f7d3 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptTable.java
@@ -153,19 +153,6 @@ public final class EncryptTable {
         return result;
     }
     
-    /**
-     * Get logic and cipher columns.
-     *
-     * @return logic and cipher columns
-     */
-    public Map<String, String> getLogicAndCipherColumns() {
-        Map<String, String> result = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-        for (Entry<String, EncryptColumn> entry : columns.entrySet()) {
-            result.put(entry.getKey(), entry.getValue().getCipher().getName());
-        }
-        return result;
-    }
-    
     /**
      * Is encrypt column or not.
      *
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
index 2ef886e9c67..66ce1c232af 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
@@ -87,10 +87,4 @@ class EncryptTableTest {
     void assertGetAssistedQueryColumns() {
         assertThat(encryptTable.getAssistedQueryColumns(), is(Collections.singletonList("assistedQueryColumn")));
     }
-    
-    @Test
-    void assertGetLogicAndCipherColumns() {
-        assertThat(encryptTable.getLogicAndCipherColumns(), is(Collections.singletonMap("logicColumn", "cipherColumn")));
-        assertTrue(encryptTable.getLogicAndCipherColumns().containsKey("LOGICCOLUMN"));
-    }
 }