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 391e860152e Refactor parameter definition of DistSQL for feature 
encrypt (#20145)
391e860152e is described below

commit 391e860152e8f57b585133136ff2707d0e84b3f8
Author: skai <[email protected]>
AuthorDate: Sun Aug 14 16:43:58 2022 +0800

    Refactor parameter definition of DistSQL for feature encrypt (#20145)
    
    * Create EncryptDistSqlTest.java
    
    * fix check-style error
    
    * Refactor parameter definition of encrypt DistSQL
    
    * fix test
    
    * add test case of AlterEncryptRule
    
    * fix checkstyle
    
    * Updated syntax and usage documentation for  feature encrypt
---
 .../syntax/rdl/rule-definition/encrypt.cn.md       | 24 ++++--
 .../syntax/rdl/rule-definition/encrypt.en.md       | 24 ++++--
 .../distsql/usage/encrypt-rule.cn.md               |  6 +-
 .../distsql/usage/encrypt-rule.en.md               |  6 +-
 .../distsql/feature/encrypt/EncryptExecutor.java   | 12 +--
 .../src/main/antlr4/imports/encrypt/Literals.g4    |  5 +-
 .../main/antlr4/imports/encrypt/RDLStatement.g4    |  2 +-
 .../encrypt/distsql/parser/EncryptDistSqlTest.java | 94 ++++++++++++++++++++++
 .../cases/rdl/rdl-integration-test-cases.xml       |  8 +-
 .../src/main/resources/sql/supported/rdl/alter.xml |  6 +-
 .../main/resources/sql/supported/rdl/create.xml    |  8 +-
 11 files changed, 156 insertions(+), 39 deletions(-)

diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.cn.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.cn.md
index f86030ba2da..1df86b41c85 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.cn.md
@@ -27,6 +27,18 @@ algorithmProperties:
 algorithmProperty:
     key=value                          
 ```
+
+### 参数解释
+| 名称                   | 数据类型       | 说明       |
+|:---------------------|:-----------|:---------|
+| tableName            | IDENTIFIER | 表名称      |
+| columnName           | IDENTIFIER | 逻辑数据列名称  |
+| plainColumnName      | IDENTIFIER | 明文数据列名称  |
+| cipherColumnName     | IDENTIFIER | 加密数据列名称  |
+| encryptAlgorithmType | STRING     | 加密算法类型名称 |
+
+### 注意事项
+
 - `PLAIN` 指定明文数据列,`CIPHER` 指定密文数据列;
 - `encryptAlgorithmType` 指定加密算法类型,请参考 
[加密算法](/cn/user-manual/shardingsphere-jdbc/builtin-algorithm/encrypt/);
 - 重复的 `tableName` 将无法被创建;
@@ -37,19 +49,19 @@ algorithmProperty:
 ```sql
 CREATE ENCRYPT RULE t_encrypt (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))
 ),QUERY_WITH_CIPHER_COLUMN=true),
 t_encrypt_2 (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id, CIPHER=order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id, CIPHER=order_cipher,TYPE(NAME='MD5'))
 ), QUERY_WITH_CIPHER_COLUMN=FALSE);
 
 ALTER ENCRYPT RULE t_encrypt (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id,CIPHER=order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id,CIPHER=order_cipher,TYPE(NAME='MD5'))
 ), QUERY_WITH_CIPHER_COLUMN=TRUE);
 
 DROP ENCRYPT RULE t_encrypt,t_encrypt_2;
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.en.md
index 647ba30bd52..bfa1716ed83 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rdl/rule-definition/encrypt.en.md
@@ -27,6 +27,18 @@ algorithmProperties:
 algorithmProperty:
     key=value                          
 ```
+
+### Parameters Explained
+| name                 | DateType   | Description                    |
+|:---------------------|:-----------|:-------------------------------|
+| tableName            | IDENTIFIER | Table name                     |
+| columnName           | IDENTIFIER | Logic column name              |
+| plainColumnName      | IDENTIFIER | Plain column name              |
+| cipherColumnName     | IDENTIFIER | Cipher column name             |
+| encryptAlgorithmType | STRING     | Encryption algorithm type name |
+
+### Notes 
+
 - `PLAIN` specifies the plain column, `CIPHER` specifies the cipher column
 - `encryptAlgorithmType` specifies the encryption algorithm type, please refer 
to [Encryption 
Algorithm](/en/user-manual/shardingsphere-jdbc/builtin-algorithm/encrypt/)
 - Duplicate `tableName` will not be created
@@ -37,19 +49,19 @@ algorithmProperty:
 ```sql
 CREATE ENCRYPT RULE t_encrypt (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))
 ), QUERY_WITH_CIPHER_COLUMN=true),
 t_encrypt_2 (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id, CIPHER=order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id, CIPHER=order_cipher,TYPE(NAME='MD5'))
 ), QUERY_WITH_CIPHER_COLUMN=FALSE);
 
 ALTER ENCRYPT RULE t_encrypt (
 COLUMNS(
-(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-(NAME=order_id,CIPHER=order_cipher,TYPE(NAME=MD5))
+(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+(NAME=order_id,CIPHER=order_cipher,TYPE(NAME='MD5'))
 ), QUERY_WITH_CIPHER_COLUMN=TRUE);
 
 DROP ENCRYPT RULE t_encrypt,t_encrypt_2;
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.cn.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.cn.md
index faea4822218..6ec4f35020e 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.cn.md
@@ -22,8 +22,8 @@ ADD RESOURCE ds_0 (
 ```sql
 CREATE ENCRYPT RULE t_encrypt (
     COLUMNS(
-        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-        (NAME=order_id,PLAIN=order_plain,CIPHER 
=order_cipher,TYPE(NAME=RC4,PROPERTIES('rc4-key-value'='123456abc')))
+        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+        (NAME=order_id,PLAIN=order_plain,CIPHER 
=order_cipher,TYPE(NAME='RC4',PROPERTIES('rc4-key-value'='123456abc')))
 ));
 ```
 
@@ -43,7 +43,7 @@ CREATE TABLE `t_encrypt` (
 ```sql
 ALTER ENCRYPT RULE t_encrypt (
     COLUMNS(
-        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')))
+        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))
 ));
 ```
 
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.en.md
index a654f863555..6023c9544ff 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/usage/encrypt-rule.en.md
@@ -22,8 +22,8 @@ ADD RESOURCE ds_0 (
 ```sql
 CREATE ENCRYPT RULE t_encrypt (
     COLUMNS(
-        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
-        (NAME=order_id,PLAIN=order_plain,CIPHER 
=order_cipher,TYPE(NAME=RC4,PROPERTIES('rc4-key-value'='123456abc')))
+        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
+        (NAME=order_id,PLAIN=order_plain,CIPHER 
=order_cipher,TYPE(NAME='RC4',PROPERTIES('rc4-key-value'='123456abc')))
 ));
 ```
 
@@ -43,7 +43,7 @@ CREATE TABLE `t_encrypt` (
 ```sql
 ALTER ENCRYPT RULE t_encrypt (
     COLUMNS(
-        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')))
+        
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))
 ));
 ```
 
diff --git 
a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/encrypt/EncryptExecutor.java
 
b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/encrypt/EncryptExecutor.java
index e61ef16508c..e4e3a0339ae 100644
--- 
a/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/encrypt/EncryptExecutor.java
+++ 
b/examples/shardingsphere-proxy-example/shardingsphere-proxy-distsql-example/src/main/java/org/apache/shardingsphere/example/proxy/distsql/feature/encrypt/EncryptExecutor.java
@@ -33,19 +33,19 @@ public final class EncryptExecutor extends 
AbstractFeatureExecutor {
     
     private static final String ADD_RULE = "CREATE ENCRYPT RULE t_encrypt (\n" 
+
             "COLUMNS(\n" +
-            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
-            "(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))\n" +
+            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
+            "(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))\n" +
             ")),\n" +
             "t_encrypt_2 (\n" +
             "COLUMNS(\n" +
-            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
-            "(NAME=order_id, CIPHER=order_cipher,TYPE(NAME=MD5))\n" +
+            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
+            "(NAME=order_id, CIPHER=order_cipher,TYPE(NAME='MD5'))\n" +
             "))";
     
     private static final String ALTER_RULE = "ALTER ENCRYPT RULE t_encrypt 
(\n" +
             "COLUMNS(\n" +
-            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
-            "(NAME=order_id,CIPHER=order_cipher,TYPE(NAME=MD5))\n" +
+            
"(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),\n"
 +
+            "(NAME=order_id,CIPHER=order_cipher,TYPE(NAME='MD5'))\n" +
             "))";
     
     private static final String DROP_RULE = "DROP ENCRYPT RULE 
t_encrypt,t_encrypt_2";
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/Literals.g4
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/Literals.g4
index e5f807b1104..99f85324c79 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/Literals.g4
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/Literals.g4
@@ -22,12 +22,11 @@ import Alphabet, Symbol;
 IDENTIFIER
     : [A-Za-z_$0-9]*?[A-Za-z_$]+?[A-Za-z_$0-9]*
     | BQ ~'`'+ BQ
-    | (DQ ( '\\'. | '""' | ~('"'| '\\') )* DQ)
     ;
     
 STRING
-    : (DQ ('""' | ~('"'| '\\') )* DQ)
-    | (SQ ('\'\'' | ~('\'' | '\\'))* SQ)
+    : (DQ ('\\'. | '""' | ~('"' | '\\'))* DQ)
+    | (SQ ('\\'. | '\'\'' | ~('\'' | '\\'))* SQ)
     ;
 
 INT
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
index b2cd1f0ea03..d251ae3ec27 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
@@ -88,7 +88,7 @@ algorithmDefinition
     ;
 
 algorithmName
-    : IDENTIFIER
+    : STRING
     ;
 
 algorithmProperties
diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/test/java/org/apache/shardingsphere/encrypt/distsql/parser/EncryptDistSqlTest.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/test/java/org/apache/shardingsphere/encrypt/distsql/parser/EncryptDistSqlTest.java
new file mode 100644
index 00000000000..f351cce9cb8
--- /dev/null
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-parser/src/test/java/org/apache/shardingsphere/encrypt/distsql/parser/EncryptDistSqlTest.java
@@ -0,0 +1,94 @@
+/*
+ * 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.distsql.parser;
+
+import lombok.SneakyThrows;
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+import 
org.apache.shardingsphere.distsql.parser.core.featured.FeaturedDistSQLStatementParserFacadeFactory;
+import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
+import 
org.apache.shardingsphere.encrypt.distsql.parser.facade.EncryptDistSQLStatementParserFacade;
+import 
org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnSegment;
+import 
org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
+import 
org.apache.shardingsphere.encrypt.distsql.parser.statement.AlterEncryptRuleStatement;
+import 
org.apache.shardingsphere.encrypt.distsql.parser.statement.CreateEncryptRuleStatement;
+import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
+import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.SQLParserFactory;
+import org.junit.Test;
+
+import java.util.Iterator;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+public final class EncryptDistSqlTest {
+    
+    @Test
+    public void assertCreateEncryptRule() {
+        String sql = "CREATE ENCRYPT RULE t_encrypt (COLUMNS("
+                + " 
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))"
+                + ",(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5')))"
+                + ",QUERY_WITH_CIPHER_COLUMN=true)";
+        CreateEncryptRuleStatement createEncryptRuleStatement = 
(CreateEncryptRuleStatement) getEncryptDistSQLStatement(sql);
+        assertThat(createEncryptRuleStatement.getRules().size(), is(1));
+        
assertEncryptRule(createEncryptRuleStatement.getRules().iterator().next());
+
+    }
+
+    @Test
+    public void assertAlterEncryptRule() {
+        String sql = "ALTER ENCRYPT RULE t_encrypt (COLUMNS("
+                + " 
(NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),"
+                + " (NAME=order_id,CIPHER=order_cipher,TYPE(NAME='MD5'))), 
QUERY_WITH_CIPHER_COLUMN=TRUE)";
+        AlterEncryptRuleStatement alterEncryptRule = 
(AlterEncryptRuleStatement) getEncryptDistSQLStatement(sql);
+        assertThat(alterEncryptRule.getRules().size(), is(1));
+        assertEncryptRule(alterEncryptRule.getRules().iterator().next());
+    }
+
+    private void assertEncryptRule(final EncryptRuleSegment 
encryptRuleSegment) {
+        assertThat(encryptRuleSegment.getTableName(), is("t_encrypt"));
+        assertThat(encryptRuleSegment.getColumns().size(), is(2));
+        assertThat(encryptRuleSegment.getQueryWithCipherColumn(), is(true));
+        Iterator<EncryptColumnSegment> encryptRuleColumns = 
encryptRuleSegment.getColumns().iterator();
+        EncryptColumnSegment userEncryptColumn = encryptRuleColumns.next();
+        assertThat(userEncryptColumn.getName(), is("user_id"));
+        assertThat(userEncryptColumn.getPlainColumn(), is("user_plain"));
+        assertThat(userEncryptColumn.getCipherColumn(), is("user_cipher"));
+        assertThat(userEncryptColumn.getEncryptor().getName(), is("AES"));
+        Properties properties = new Properties();
+        properties.setProperty("aes-key-value", "123456abc");
+        assertThat(userEncryptColumn.getEncryptor().getProps(), 
is(properties));
+        EncryptColumnSegment orderEncryptColumn = encryptRuleColumns.next();
+        assertThat(orderEncryptColumn.getName(), is("order_id"));
+        assertNull(orderEncryptColumn.getPlainColumn());
+        assertThat(orderEncryptColumn.getCipherColumn(), is("order_cipher"));
+        assertThat(orderEncryptColumn.getEncryptor().getName(), is("MD5"));
+        assertThat(orderEncryptColumn.getEncryptor().getProps().size(), is(0));
+    }
+
+    @SneakyThrows(ReflectiveOperationException.class)
+    @SuppressWarnings("rawtypes")
+    private DistSQLStatement getEncryptDistSQLStatement(final String sql) {
+        EncryptDistSQLStatementParserFacade facade = new 
EncryptDistSQLStatementParserFacade();
+        ParseASTNode parseASTNode = (ParseASTNode) 
SQLParserFactory.newInstance(sql, facade.getLexerClass(), 
facade.getParserClass()).parse();
+        SQLVisitor visitor = 
FeaturedDistSQLStatementParserFacadeFactory.getInstance(facade.getType()).getVisitorClass().getDeclaredConstructor().newInstance();
+        return (DistSQLStatement) ((ParseTreeVisitor) 
visitor).visit(parseASTNode.getRootNode());
+    }
+}
diff --git 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/rdl/rdl-integration-test-cases.xml
 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/rdl/rdl-integration-test-cases.xml
index fc281862104..04e6d0d0fff 100644
--- 
a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/rdl/rdl-integration-test-cases.xml
+++ 
b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/cases/rdl/rdl-integration-test-cases.xml
@@ -127,7 +127,7 @@
 <!--    <test-case sql="SHOW ENCRYPT TABLE RULE t_user">-->
 <!--        <assertion expected-data-file="create_encrypt_rule.xml">-->
 <!--            <initial-sql sql="CREATE ENCRYPT RULE t_user (COLUMNS ((-->
-<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME=AES,-->
+<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME="AES",-->
 <!--                PROPERTIES(&quot;aes-key-value&quot;='123456abc')))))"/>-->
 <!--            <destroy-sql sql="DROP ENCRYPT RULE t_user" />-->
 <!--        </assertion>-->
@@ -136,9 +136,9 @@
 <!--    <test-case sql="SHOW ENCRYPT TABLE RULE t_user">-->
 <!--        <assertion expected-data-file="alter_encrypt_rule.xml">-->
 <!--            <initial-sql sql="CREATE ENCRYPT RULE t_user (COLUMNS ((-->
-<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME=AES, PROPERTIES(&quot;aes-key-value&quot;='123456abc')))));-->
+<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME="AES", PROPERTIES(&quot;aes-key-value&quot;='123456abc')))));-->
 <!--                CREATE SHARDING SCALING RULE default_scaling;-->
-<!--                ALTER ENCRYPT RULE t_user (COLUMNS ((NAME=pwd, 
PLAIN=pwd_plain, CIPHER=pwd_cipher, TYPE(NAME=AES,-->
+<!--                ALTER ENCRYPT RULE t_user (COLUMNS ((NAME=pwd, 
PLAIN=pwd_plain, CIPHER=pwd_cipher, TYPE(NAME="AES",-->
 <!--                PROPERTIES(&quot;aes-key-value&quot;='123abc')))))"/>-->
 <!--            <destroy-sql sql="DROP ENCRYPT RULE t_user;DROP SHARDING 
SCALING RULE default_scaling" />-->
 <!--        </assertion>-->
@@ -147,7 +147,7 @@
 <!--    <test-case sql="SHOW ENCRYPT RULES">-->
 <!--        <assertion expected-data-file="drop_encrypt_rule.xml">-->
 <!--            <initial-sql sql="CREATE ENCRYPT RULE t_user (COLUMNS ((-->
-<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME=AES,-->
+<!--                NAME=pwd, PLAIN=pwd_plain, CIPHER=pwd_cipher, 
TYPE(NAME="AES",-->
 <!--                PROPERTIES(&quot;aes-key-value&quot;='123456abc')))));-->
 <!--                DROP ENCRYPT RULE t_user"/>-->
 <!--        </assertion>-->
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
index b40abdd6ec7..eeee5675a00 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/alter.xml
@@ -35,9 +35,9 @@
     <distsql-case id="alter-database-discovery-construction-rule" value="ALTER 
DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1), 
TYPE=ha_group_0_mgr,HEARTBEAT=ha_group_0_heartbeat)" />
     <distsql-case id="alter-database-discovery-heartbeat" value="ALTER 
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * * 
?'))" />
     <distsql-case id="alter-database-discovery-type" value="ALTER DB_DISCOVERY 
TYPE 
primary_replica_ds_mgr(TYPE(NAME=mgr,PROPERTIES('groupName'='92504d5b-6dec'))),primary_replica_ds_mgr_2(TYPE(NAME=mgr))"
 />
-    <distsql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt 
(RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
-    <distsql-case id="alter-encrypt-rule-with-assisted-query-column" 
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME=MD5)), 
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
-    <distsql-case id="alter-encrypt-rule-with-query-with-cipher-column" 
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher, 
TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER 
=order_cipher,TYPE(NAME=MD5))), QUERY_WITH_CIPHER_COLUMN=false)" />
+    <distsql-case id="alter-encrypt-rule" value="ALTER ENCRYPT RULE t_encrypt 
(RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
+    <distsql-case id="alter-encrypt-rule-with-assisted-query-column" 
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME='MD5')), 
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
+    <distsql-case id="alter-encrypt-rule-with-query-with-cipher-column" 
value="ALTER ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher, 
TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, 
CIPHER =order_cipher,TYPE(NAME='MD5'))), QUERY_WITH_CIPHER_COLUMN=false)" />
     <distsql-case id="alter-shadow-algorithm" value="ALTER SHADOW ALGORITHM 
(simple_hint_algorithm, TYPE(NAME=SIMPLE_HINT, PROPERTIES('shadow'='true', 
'foo'='bar')))" />
     <distsql-case id="alter-shadow-rule" value="ALTER SHADOW RULE 
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME=SIMPLE_HINT,PROPERTIES('shadow'='true',foo='bar')))))"
 />
     <distsql-case id="alter-sharding-table-rule" value="ALTER SHARDING TABLE 
RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE = 
`standard`,sharding_column = order_id,sharding_algorithm = 
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column = 
user_id,sharding_algorithm = 
table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME=snowflake)))" />
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
index e6164e73922..5735548580a 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
@@ -36,8 +36,8 @@
     <distsql-case id="create-database-discovery-construction-rule" 
value="CREATE DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1), 
TYPE=ha_group_0_mgr,HEARTBEAT=ha_group_0_heartbeat)" />
     <distsql-case id="create-database-discovery-type" value="CREATE 
DB_DISCOVERY TYPE 
primary_replica_ds_mgr(TYPE(NAME=mgr,PROPERTIES('groupName'='92504d5b-6dec'))),primary_replica_ds_mgr_2(TYPE(NAME=mgr))"
 />
     <distsql-case id="create-database-discovery-heartbeat" value="CREATE 
DB_DISCOVERY HEARTBEAT mgr_heartbeat(PROPERTIES('keepAliveCron'='0/5 * * * * 
?'))" />
-    <distsql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE 
t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
-    <distsql-case id="create-encrypt-rule-with-assisted-query-column" 
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME=MD5)), 
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
+    <distsql-case id="create-encrypt-rule" value="CREATE ENCRYPT RULE 
t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
+    <distsql-case id="create-encrypt-rule-with-assisted-query-column" 
value="CREATE ENCRYPT RULE t_encrypt (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,ASSISTED_QUERY_COLUMN=assisted_column,
 TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')), TYPE(NAME='MD5')), 
(NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
     <distsql-case id="create-shadow-rule" value="CREATE SHADOW RULE 
shadow_rule(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME=SIMPLE_HINT,PROPERTIES('shadow'='true',foo='bar')))))"
 />
     <distsql-case id="create-default-shadow-algorithm" value="CREATE DEFAULT 
SHADOW ALGORITHM NAME = simple_hint_algorithm ;" />
     <distsql-case id="create-sharding-algorithm" value="CREATE SHARDING 
ALGORITHM algorithm_name(TYPE(NAME=hash_mod,PROPERTIES('algorithm-expression' = 
't_order_${order_id % 2}')))" />
@@ -57,8 +57,8 @@
     <distsql-case id="create-sharding-broadcast-table-rule-with-quota" 
value="CREATE SHARDING BROADCAST TABLE RULES(`t_1`,`t_2`)" />
     <distsql-case id="create-readwrite-splitting-rule-with-quota" 
value="CREATE READWRITE_SPLITTING RULE `ms_group_0` (WRITE_RESOURCE=primary_ds, 
READ_RESOURCES(replica_ds_0,replica_ds_1), TYPE(NAME=random)))" />
     <distsql-case id="create-database-discovery-rule-with-quota" value="CREATE 
DB_DISCOVERY RULE ha_group_0 (RESOURCES(resource0,resource1), 
TYPE(NAME=mgr,PROPERTIES(groupName='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/5
 * * * * ?'))), ha_group_1 (RESOURCES(resource2,resource3), 
TYPE(NAME=mgr2,PROPERTIES(groupName='92504d5b-6dec-2')),HEARTBEAT(PROPERTIES('keepAliveCron'='0/6
 * * * * ?')))" />
-    <distsql-case id="create-encrypt-rule-with-quota" value="CREATE ENCRYPT 
RULE `encrypt` (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))))" />
-    <distsql-case id="create-encrypt-rule-with-query-with-cipher-column" 
value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc')))),QUERY_WITH_CIPHER_COLUMN=false)"
 />
+    <distsql-case id="create-encrypt-rule-with-quota" value="CREATE ENCRYPT 
RULE `encrypt` (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc'))),
 (NAME=order_id, CIPHER =order_cipher,TYPE(NAME='MD5'))))" />
+    <distsql-case id="create-encrypt-rule-with-query-with-cipher-column" 
value="CREATE ENCRYPT RULE `encrypt` (RESOURCE=ds_1, 
COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME='AES',PROPERTIES('aes-key-value'='123456abc')))),QUERY_WITH_CIPHER_COLUMN=false)"
 />
     <distsql-case id="create-shadow-rule-with-quota" value="CREATE SHADOW RULE 
`shadow_rule`(SOURCE=demo_ds,SHADOW=demo_ds_shadow,t_order((TYPE(NAME=REGEX_MATCH,PROPERTIES('operation'='insert','column'='user_id','regex'='[1]'))),(simple_hint_algorithm,TYPE(NAME=SIMPLE_HINT,PROPERTIES('shadow'='true',foo='bar')))))"
 />
     <distsql-case id="create-sharding-key-generator" value="CREATE SHARDING 
KEY GENERATOR uuid_key_generator(TYPE(NAME=uuid))" />
     <distsql-case id="create-sharding-auditor" value="CREATE SHARDING AUDITOR 
sharding_key_required_auditor(TYPE(NAME=DML_SHARDING_CONDITIONS))" />

Reply via email to