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

zhaojinchao 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 88fb9c965e4 Refactor EncryptAlterTableTokenGenerator (#26713)
88fb9c965e4 is described below

commit 88fb9c965e46857cbc90f05743cd286e6707a99d
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jun 30 07:18:44 2023 +0800

    Refactor EncryptAlterTableTokenGenerator (#26713)
    
    * Refactor EncryptAlterTableTokenGenerator
    
    * Refactor EncryptAlterTableTokenGenerator
---
 .../generator/EncryptAlterTableTokenGenerator.java | 121 ++++++++++-----------
 1 file changed, 58 insertions(+), 63 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 2f37a6352c7..cc20b84ce05 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
@@ -81,23 +81,23 @@ public final class EncryptAlterTableTokenGenerator 
implements CollectionSQLToken
         return result;
     }
     
-    private Collection<SQLToken> getAddColumnTokens(final EncryptTable 
encryptTable, final Collection<AddColumnDefinitionSegment> 
columnDefinitionSegments) {
+    private Collection<SQLToken> getAddColumnTokens(final EncryptTable 
encryptTable, final Collection<AddColumnDefinitionSegment> segments) {
         Collection<SQLToken> result = new LinkedList<>();
-        for (AddColumnDefinitionSegment each : columnDefinitionSegments) {
+        for (AddColumnDefinitionSegment each : segments) {
             result.addAll(getAddColumnTokens(encryptTable, each));
         }
         return result;
     }
     
-    private Collection<SQLToken> getAddColumnTokens(final EncryptTable 
encryptTable, final AddColumnDefinitionSegment addColumnDefinitionSegment) {
+    private Collection<SQLToken> getAddColumnTokens(final EncryptTable 
encryptTable, final AddColumnDefinitionSegment segment) {
         Collection<SQLToken> result = new LinkedList<>();
-        for (ColumnDefinitionSegment each : 
addColumnDefinitionSegment.getColumnDefinitions()) {
+        for (ColumnDefinitionSegment each : segment.getColumnDefinitions()) {
             String columnName = 
each.getColumnName().getIdentifier().getValue();
             if (encryptTable.isEncryptColumn(columnName)) {
-                
result.addAll(getAddColumnTokens(encryptTable.getEncryptColumn(columnName), 
addColumnDefinitionSegment, each));
+                
result.addAll(getAddColumnTokens(encryptTable.getEncryptColumn(columnName), 
segment, each));
             }
         }
-        getAddColumnPositionToken(encryptTable, 
addColumnDefinitionSegment).ifPresent(result::add);
+        getAddColumnPositionToken(encryptTable, 
segment).ifPresent(result::add);
         return result;
     }
     
@@ -114,24 +114,24 @@ public final class EncryptAlterTableTokenGenerator 
implements CollectionSQLToken
         return result;
     }
     
-    private Optional<SQLToken> getAddColumnPositionToken(final EncryptTable 
encryptTable, final AddColumnDefinitionSegment addColumnDefinitionSegment) {
-        Optional<ColumnPositionSegment> columnPositionSegment = 
addColumnDefinitionSegment.getColumnPosition().filter(optional -> null != 
optional.getColumnName());
+    private Optional<SQLToken> getAddColumnPositionToken(final EncryptTable 
encryptTable, final AddColumnDefinitionSegment segment) {
+        Optional<ColumnPositionSegment> columnPositionSegment = 
segment.getColumnPosition().filter(optional -> null != 
optional.getColumnName());
         if (columnPositionSegment.isPresent()) {
             String columnName = 
columnPositionSegment.get().getColumnName().getIdentifier().getValue();
             if (encryptTable.isEncryptColumn(columnName)) {
-                return 
Optional.of(getPositionColumnToken(encryptTable.getEncryptColumn(columnName), 
addColumnDefinitionSegment.getColumnPosition().get()));
+                return 
Optional.of(getPositionColumnToken(encryptTable.getEncryptColumn(columnName), 
segment.getColumnPosition().get()));
             }
         }
         return Optional.empty();
     }
     
-    private EncryptAlterTableToken getPositionColumnToken(final EncryptColumn 
encryptColumn, final ColumnPositionSegment positionSegment) {
-        return new 
EncryptAlterTableToken(positionSegment.getColumnName().getStartIndex(), 
positionSegment.getStopIndex(), encryptColumn.getCipher().getName(), null);
+    private EncryptAlterTableToken getPositionColumnToken(final EncryptColumn 
encryptColumn, final ColumnPositionSegment segment) {
+        return new 
EncryptAlterTableToken(segment.getColumnName().getStartIndex(), 
segment.getStopIndex(), encryptColumn.getCipher().getName(), null);
     }
     
-    private Collection<SQLToken> getModifyColumnTokens(final EncryptTable 
encryptTable, final Collection<ModifyColumnDefinitionSegment> 
columnDefinitionSegments) {
+    private Collection<SQLToken> getModifyColumnTokens(final EncryptTable 
encryptTable, final Collection<ModifyColumnDefinitionSegment> segments) {
         Collection<SQLToken> result = new LinkedList<>();
-        for (ModifyColumnDefinitionSegment each : columnDefinitionSegments) {
+        for (ModifyColumnDefinitionSegment each : segments) {
             String columnName = 
each.getColumnDefinition().getColumnName().getIdentifier().getValue();
             if (encryptTable.isEncryptColumn(columnName)) {
                 
result.addAll(getModifyColumnTokens(encryptTable.getEncryptColumn(columnName), 
each));
@@ -141,117 +141,112 @@ public final class EncryptAlterTableTokenGenerator 
implements CollectionSQLToken
         return result;
     }
     
-    private Collection<SQLToken> getModifyColumnTokens(final EncryptColumn 
encryptColumn, final ModifyColumnDefinitionSegment 
modifyColumnDefinitionSegment) {
+    private Collection<SQLToken> getModifyColumnTokens(final EncryptColumn 
encryptColumn, final ModifyColumnDefinitionSegment segment) {
         Collection<SQLToken> result = new LinkedList<>();
-        ColumnDefinitionSegment columnDefinitionSegment = 
modifyColumnDefinitionSegment.getColumnDefinition();
+        ColumnDefinitionSegment columnDefinitionSegment = 
segment.getColumnDefinition();
         result.add(new 
RemoveToken(columnDefinitionSegment.getColumnName().getStartIndex(), 
columnDefinitionSegment.getColumnName().getStopIndex()));
         result.add(new 
EncryptAlterTableToken(columnDefinitionSegment.getColumnName().getStopIndex() + 
1, columnDefinitionSegment.getColumnName().getStopIndex(),
                 encryptColumn.getCipher().getName(), null));
-        encryptColumn.getAssistedQuery().map(optional -> new 
EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
+        encryptColumn.getAssistedQuery().map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1,
                 columnDefinitionSegment.getColumnName().getStopIndex(), 
optional.getName(), ", MODIFY COLUMN")).ifPresent(result::add);
-        encryptColumn.getLikeQuery().map(optional -> new 
EncryptAlterTableToken(modifyColumnDefinitionSegment.getStopIndex() + 1,
+        encryptColumn.getLikeQuery().map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1,
                 columnDefinitionSegment.getColumnName().getStopIndex(), 
optional.getName(), ", MODIFY COLUMN")).ifPresent(result::add);
         return result;
     }
     
-    private Optional<SQLToken> getColumnPositionToken(final EncryptTable 
encryptTable, final ColumnPositionSegment columnPositionSegment) {
-        if (null == columnPositionSegment.getColumnName()) {
+    private Optional<SQLToken> getColumnPositionToken(final EncryptTable 
encryptTable, final ColumnPositionSegment segment) {
+        if (null == segment.getColumnName()) {
             return Optional.empty();
         }
-        String columnName = 
columnPositionSegment.getColumnName().getIdentifier().getValue();
-        return encryptTable.isEncryptColumn(columnName) ? 
Optional.of(getPositionColumnToken(encryptTable.getEncryptColumn(columnName), 
columnPositionSegment)) : Optional.empty();
+        String columnName = segment.getColumnName().getIdentifier().getValue();
+        return encryptTable.isEncryptColumn(columnName) ? 
Optional.of(getPositionColumnToken(encryptTable.getEncryptColumn(columnName), 
segment)) : Optional.empty();
     }
     
-    private Collection<SQLToken> getChangeColumnTokens(final EncryptTable 
encryptTable, final Collection<ChangeColumnDefinitionSegment> 
changeColumnDefinitions) {
+    private Collection<SQLToken> getChangeColumnTokens(final EncryptTable 
encryptTable, final Collection<ChangeColumnDefinitionSegment> segments) {
         Collection<SQLToken> result = new LinkedList<>();
-        for (ChangeColumnDefinitionSegment each : changeColumnDefinitions) {
+        for (ChangeColumnDefinitionSegment each : segments) {
             result.addAll(getChangeColumnTokens(encryptTable, each));
             each.getColumnPosition().flatMap(optional -> 
getColumnPositionToken(encryptTable, optional)).ifPresent(result::add);
         }
         return result;
     }
     
-    private Collection<? extends SQLToken> getChangeColumnTokens(final 
EncryptTable encryptTable, final ChangeColumnDefinitionSegment segment) {
-        isSameEncryptColumn(encryptTable, segment);
-        String columnName = 
segment.getColumnDefinition().getColumnName().getIdentifier().getValue();
+    private Collection<SQLToken> getChangeColumnTokens(final EncryptTable 
encryptTable, final ChangeColumnDefinitionSegment segment) {
         String previousColumnName = 
segment.getPreviousColumn().getIdentifier().getValue();
+        String columnName = 
segment.getColumnDefinition().getColumnName().getIdentifier().getValue();
+        isSameEncryptColumn(encryptTable, previousColumnName, columnName);
         if (!encryptTable.isEncryptColumn(columnName) || 
!encryptTable.isEncryptColumn(previousColumnName)) {
             return Collections.emptyList();
         }
         Collection<SQLToken> result = new LinkedList<>();
-        result.addAll(getPreviousColumnTokens(encryptTable, segment));
-        
result.addAll(getColumnTokens(encryptTable.getEncryptColumn(columnName), 
encryptTable.getEncryptColumn(previousColumnName), segment));
+        EncryptColumn previousEncryptColumn = 
encryptTable.getEncryptColumn(previousColumnName);
+        EncryptColumn encryptColumn = 
encryptTable.getEncryptColumn(columnName);
+        result.addAll(getPreviousColumnTokens(previousEncryptColumn, segment));
+        result.addAll(getColumnTokens(previousEncryptColumn, encryptColumn, 
segment));
         return result;
     }
     
-    private void isSameEncryptColumn(final EncryptTable encryptTable, final 
ChangeColumnDefinitionSegment segment) {
-        Optional<StandardEncryptAlgorithm<?, ?>> previousEncryptor = 
encryptTable.findEncryptor(segment.getPreviousColumn().getIdentifier().getValue());
-        Optional<StandardEncryptAlgorithm<?, ?>> currentEncryptor = 
encryptTable.findEncryptor(segment.getColumnDefinition().getColumnName().getIdentifier().getValue());
+    private void isSameEncryptColumn(final EncryptTable encryptTable, final 
String previousColumnName, final String columnName) {
+        Optional<StandardEncryptAlgorithm<?, ?>> previousEncryptor = 
encryptTable.findEncryptor(previousColumnName);
+        Optional<StandardEncryptAlgorithm<?, ?>> currentEncryptor = 
encryptTable.findEncryptor(columnName);
         if (!previousEncryptor.isPresent() && !currentEncryptor.isPresent()) {
             return;
         }
-        
ShardingSpherePreconditions.checkState(previousEncryptor.equals(currentEncryptor)
 && checkPreviousAndAfterHasSameColumnNumber(encryptTable, segment),
-                () -> new EncryptColumnAlterException(
-                        encryptTable.getTable(), 
segment.getColumnDefinition().getColumnName().getIdentifier().getValue(), 
segment.getPreviousColumn().getIdentifier().getValue()));
+        
ShardingSpherePreconditions.checkState(previousEncryptor.equals(currentEncryptor)
 && checkPreviousAndAfterHasSameColumnNumber(encryptTable, previousColumnName, 
columnName),
+                () -> new EncryptColumnAlterException(encryptTable.getTable(), 
columnName, previousColumnName));
     }
     
-    private boolean checkPreviousAndAfterHasSameColumnNumber(final 
EncryptTable encryptTable, final ChangeColumnDefinitionSegment 
changeColumnDefinitionSegment) {
-        EncryptColumn previousColumn = 
encryptTable.getEncryptColumn(changeColumnDefinitionSegment.getPreviousColumn().getIdentifier().getValue());
-        EncryptColumn currentColumn = 
encryptTable.getEncryptColumn(changeColumnDefinitionSegment.getColumnDefinition().getColumnName().getIdentifier().getValue());
-        if (previousColumn.getAssistedQuery().isPresent() && 
!currentColumn.getAssistedQuery().isPresent()) {
+    private boolean checkPreviousAndAfterHasSameColumnNumber(final 
EncryptTable encryptTable, final String previousColumnName, final String 
columnName) {
+        EncryptColumn previousEncryptColumn = 
encryptTable.getEncryptColumn(previousColumnName);
+        EncryptColumn encryptColumn = 
encryptTable.getEncryptColumn(columnName);
+        if (previousEncryptColumn.getAssistedQuery().isPresent() && 
!encryptColumn.getAssistedQuery().isPresent()) {
             return false;
         }
-        if (previousColumn.getLikeQuery().isPresent() && 
!currentColumn.getLikeQuery().isPresent()) {
+        if (previousEncryptColumn.getLikeQuery().isPresent() && 
!encryptColumn.getLikeQuery().isPresent()) {
             return false;
         }
-        return previousColumn.getAssistedQuery().isPresent() || 
!currentColumn.getAssistedQuery().isPresent();
+        return previousEncryptColumn.getAssistedQuery().isPresent() || 
!encryptColumn.getAssistedQuery().isPresent();
     }
     
-    private Collection<? extends SQLToken> getColumnTokens(final EncryptColumn 
encryptColumn, final EncryptColumn previousEncryptColumn, final 
ChangeColumnDefinitionSegment segment) {
+    private Collection<SQLToken> getPreviousColumnTokens(final EncryptColumn 
previousEncryptColumn, final ChangeColumnDefinitionSegment segment) {
         Collection<SQLToken> result = new LinkedList<>();
-        result.add(new 
RemoveToken(segment.getColumnDefinition().getColumnName().getStartIndex(), 
segment.getColumnDefinition().getColumnName().getStopIndex()));
-        result.add(new 
EncryptAlterTableToken(segment.getColumnDefinition().getColumnName().getStopIndex()
 + 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
-                encryptColumn.getCipher().getName(), null));
-        previousEncryptColumn.getAssistedQuery()
-                .map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1, 
segment.getColumnDefinition().getColumnName().getStopIndex(),
-                        
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
 ", CHANGE COLUMN " + optional.getName()))
-                .ifPresent(result::add);
-        previousEncryptColumn.getLikeQuery()
-                .map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1, 
segment.getColumnDefinition().getColumnName().getStopIndex(),
-                        
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ", 
CHANGE COLUMN " + optional.getName()))
-                .ifPresent(result::add);
+        result.add(new 
RemoveToken(segment.getPreviousColumn().getStartIndex(), 
segment.getPreviousColumn().getStopIndex()));
+        result.add(new 
EncryptAlterTableToken(segment.getPreviousColumn().getStopIndex() + 1, 
segment.getPreviousColumn().getStopIndex(), 
previousEncryptColumn.getCipher().getName(), null));
         return result;
     }
     
-    private Collection<? extends SQLToken> getPreviousColumnTokens(final 
EncryptTable encryptTable, final ChangeColumnDefinitionSegment segment) {
+    private Collection<SQLToken> getColumnTokens(final EncryptColumn 
previousEncryptColumn, final EncryptColumn encryptColumn, final 
ChangeColumnDefinitionSegment segment) {
         Collection<SQLToken> result = new LinkedList<>();
-        result.add(new 
RemoveToken(segment.getPreviousColumn().getStartIndex(), 
segment.getPreviousColumn().getStopIndex()));
-        result.add(new 
EncryptAlterTableToken(segment.getPreviousColumn().getStopIndex() + 1, 
segment.getPreviousColumn().getStopIndex(),
-                
encryptTable.getEncryptColumn(segment.getPreviousColumn().getIdentifier().getValue()).getCipher().getName(),
 null));
+        result.add(new 
RemoveToken(segment.getColumnDefinition().getColumnName().getStartIndex(), 
segment.getColumnDefinition().getColumnName().getStopIndex()));
+        result.add(new 
EncryptAlterTableToken(segment.getColumnDefinition().getColumnName().getStopIndex()
 + 1, segment.getColumnDefinition().getColumnName().getStopIndex(),
+                encryptColumn.getCipher().getName(), null));
+        previousEncryptColumn.getAssistedQuery().map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1, 
segment.getColumnDefinition().getColumnName().getStopIndex(),
+                        
encryptColumn.getAssistedQuery().map(AssistedQueryColumnItem::getName).orElse(""),
 ", CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
+        previousEncryptColumn.getLikeQuery().map(optional -> new 
EncryptAlterTableToken(segment.getStopIndex() + 1, 
segment.getColumnDefinition().getColumnName().getStopIndex(),
+                        
encryptColumn.getLikeQuery().map(LikeQueryColumnItem::getName).orElse(""), ", 
CHANGE COLUMN " + optional.getName())).ifPresent(result::add);
         return result;
     }
     
-    private List<SQLToken> getDropColumnTokens(final EncryptTable 
encryptTable, final Collection<DropColumnDefinitionSegment> 
columnDefinitionSegments) {
+    private List<SQLToken> getDropColumnTokens(final EncryptTable 
encryptTable, final Collection<DropColumnDefinitionSegment> segments) {
         List<SQLToken> result = new ArrayList<>();
-        for (DropColumnDefinitionSegment each : columnDefinitionSegments) {
+        for (DropColumnDefinitionSegment each : segments) {
             result.addAll(getDropColumnTokens(encryptTable, each));
         }
         return result;
     }
     
-    private Collection<SQLToken> getDropColumnTokens(final EncryptTable 
encryptTable, final DropColumnDefinitionSegment dropColumnDefinitionSegment) {
+    private Collection<SQLToken> getDropColumnTokens(final EncryptTable 
encryptTable, final DropColumnDefinitionSegment segment) {
         Collection<SQLToken> result = new LinkedList<>();
-        for (ColumnSegment each : dropColumnDefinitionSegment.getColumns()) {
+        for (ColumnSegment each : segment.getColumns()) {
             String columnName = each.getQualifiedName();
             if (encryptTable.isEncryptColumn(columnName)) {
-                
result.addAll(getDropColumnTokens(encryptTable.getEncryptColumn(columnName), 
each, dropColumnDefinitionSegment));
+                
result.addAll(getDropColumnTokens(encryptTable.getEncryptColumn(columnName), 
each, segment));
             }
         }
         return result;
     }
     
-    private Collection<SQLToken> getDropColumnTokens(final EncryptColumn 
encryptColumn,
-                                                     final ColumnSegment 
columnSegment, final DropColumnDefinitionSegment dropColumnDefinitionSegment) {
+    private Collection<SQLToken> getDropColumnTokens(final EncryptColumn 
encryptColumn, final ColumnSegment columnSegment, final 
DropColumnDefinitionSegment dropColumnDefinitionSegment) {
         Collection<SQLToken> result = new LinkedList<>();
         result.add(new RemoveToken(columnSegment.getStartIndex(), 
columnSegment.getStopIndex()));
         result.add(new EncryptAlterTableToken(columnSegment.getStopIndex() + 
1, columnSegment.getStopIndex(), encryptColumn.getCipher().getName(), null));

Reply via email to