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/06 06:04:00 UTC

[shardingsphere] branch master updated: Refactor EncryptColumnSegment using EncryptColumnItemSegment (#26052)

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 f5628e1b534 Refactor EncryptColumnSegment using EncryptColumnItemSegment (#26052)
f5628e1b534 is described below

commit f5628e1b534c6667d68b521d5abd443e6dcad992
Author: ChenJiaHao <Pa...@163.com>
AuthorDate: Tue Jun 6 14:03:53 2023 +0800

    Refactor EncryptColumnSegment using EncryptColumnItemSegment (#26052)
    
    * Refactor EncryptColumnSegment using EncryptColumnItemSegment
    
    * Fix code style
    
    * Fix EncryptRuleStatementConverter
    
    * Fix encrypt DistSQL Updater
    
    * Fix code style
---
 .../converter/EncryptRuleStatementConverter.java   | 47 ++++++-----
 .../update/AlterEncryptRuleStatementUpdater.java   | 10 ++-
 .../update/CreateEncryptRuleStatementUpdater.java  | 10 ++-
 .../EncryptRuleStatementConverterTest.java         | 11 ++-
 .../AlterEncryptRuleStatementUpdaterTest.java      |  9 +-
 .../CreateEncryptRuleStatementUpdaterTest.java     | 39 +++++----
 .../core/EncryptDistSQLStatementVisitor.java       | 12 +--
 ...nSegment.java => EncryptColumnItemSegment.java} | 14 +---
 .../parser/segment/EncryptColumnSegment.java       | 13 +--
 .../segment/distsql/rdl/EncryptColumnAssert.java   | 21 ++++-
 .../impl/distsql/rdl/ExpectedEncryptColumn.java    | 17 ++--
 ...tColumn.java => ExpectedEncryptColumnItem.java} | 14 +---
 .../parser/src/main/resources/case/rdl/alter.xml   | 72 ++++++++++------
 .../parser/src/main/resources/case/rdl/create.xml  | 98 ++++++++++++++--------
 14 files changed, 218 insertions(+), 169 deletions(-)

diff --git a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
index 69f644779da..ab105ee0406 100644
--- a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
+++ b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverter.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnItemSegment;
 import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnSegment;
 import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
@@ -63,43 +64,49 @@ public final class EncryptRuleStatementConverter {
     }
     
     private static EncryptColumnRuleConfiguration createEncryptColumnRuleConfiguration(final String tableName, final EncryptColumnSegment columnSegment) {
-        EncryptColumnItemRuleConfiguration cipherColumnConfig = new EncryptColumnItemRuleConfiguration(columnSegment.getCipherColumn(), getEncryptorName(tableName, columnSegment.getName()));
+        EncryptColumnItemRuleConfiguration cipherColumnConfig = new EncryptColumnItemRuleConfiguration(
+                columnSegment.getCipher().getName(), getEncryptorName(tableName, columnSegment.getName()));
         EncryptColumnRuleConfiguration result = new EncryptColumnRuleConfiguration(columnSegment.getName(), cipherColumnConfig);
-        String assistedQueryEncryptorName = null == columnSegment.getAssistedQueryEncryptor() ? null : getAssistedQueryEncryptorName(tableName, columnSegment.getName());
-        EncryptColumnItemRuleConfiguration assistedQueryColumnConfig = new EncryptColumnItemRuleConfiguration(columnSegment.getAssistedQueryColumn(), assistedQueryEncryptorName);
+        if (null != columnSegment.getAssistedQuery()) {
+            setAssistedQuery(tableName, columnSegment, result);
+        }
+        if (null != columnSegment.getLikeQuery()) {
+            setLikeQuery(tableName, columnSegment, result);
+        }
+        return result;
+    }
+    
+    private static void setAssistedQuery(final String tableName, final EncryptColumnSegment columnSegment, final EncryptColumnRuleConfiguration result) {
+        String assistedQueryEncryptorName = null == columnSegment.getAssistedQuery().getEncryptor() ? null
+                : getAssistedQueryEncryptorName(tableName, columnSegment.getName());
+        EncryptColumnItemRuleConfiguration assistedQueryColumnConfig = new EncryptColumnItemRuleConfiguration(columnSegment.getAssistedQuery().getName(), assistedQueryEncryptorName);
         result.setAssistedQuery(assistedQueryColumnConfig);
-        String likeQueryEncryptorName = null == columnSegment.getLikeQueryEncryptor() ? null : getLikeQueryEncryptorName(tableName, columnSegment.getName());
-        EncryptColumnItemRuleConfiguration likeQueryColumnConfig = new EncryptColumnItemRuleConfiguration(columnSegment.getLikeQueryColumn(), likeQueryEncryptorName);
+    }
+    
+    private static void setLikeQuery(final String tableName, final EncryptColumnSegment columnSegment, final EncryptColumnRuleConfiguration result) {
+        String likeQueryEncryptorName = null == columnSegment.getLikeQuery().getEncryptor() ? null : getLikeQueryEncryptorName(tableName, columnSegment.getName());
+        EncryptColumnItemRuleConfiguration likeQueryColumnConfig = new EncryptColumnItemRuleConfiguration(columnSegment.getLikeQuery().getName(), likeQueryEncryptorName);
         result.setLikeQuery(likeQueryColumnConfig);
-        return result;
     }
     
     private static Map<String, AlgorithmConfiguration> createEncryptorConfigurations(final EncryptRuleSegment ruleSegment) {
         Map<String, AlgorithmConfiguration> result = new HashMap<>(ruleSegment.getColumns().size(), 1F);
         for (EncryptColumnSegment each : ruleSegment.getColumns()) {
-            result.put(getEncryptorName(ruleSegment.getTableName(), each.getName()), createEncryptorConfiguration(each));
-            if (null != each.getAssistedQueryEncryptor()) {
-                result.put(getAssistedQueryEncryptorName(ruleSegment.getTableName(), each.getName()), createAssistedQueryEncryptorConfiguration(each));
+            result.put(getEncryptorName(ruleSegment.getTableName(), each.getName()), createEncryptorConfiguration(each.getCipher()));
+            if (null != each.getAssistedQuery() && null != each.getAssistedQuery().getEncryptor()) {
+                result.put(getAssistedQueryEncryptorName(ruleSegment.getTableName(), each.getName()), createEncryptorConfiguration(each.getAssistedQuery()));
             }
-            if (null != each.getLikeQueryEncryptor()) {
-                result.put(getLikeQueryEncryptorName(ruleSegment.getTableName(), each.getName()), createLikeQueryEncryptorConfiguration(each));
+            if (null != each.getLikeQuery() && null != each.getLikeQuery().getEncryptor()) {
+                result.put(getLikeQueryEncryptorName(ruleSegment.getTableName(), each.getName()), createEncryptorConfiguration(each.getLikeQuery()));
             }
         }
         return result;
     }
     
-    private static AlgorithmConfiguration createEncryptorConfiguration(final EncryptColumnSegment columnSegment) {
+    private static AlgorithmConfiguration createEncryptorConfiguration(final EncryptColumnItemSegment columnSegment) {
         return new AlgorithmConfiguration(columnSegment.getEncryptor().getName(), columnSegment.getEncryptor().getProps());
     }
     
-    private static AlgorithmConfiguration createAssistedQueryEncryptorConfiguration(final EncryptColumnSegment columnSegment) {
-        return new AlgorithmConfiguration(columnSegment.getAssistedQueryEncryptor().getName(), columnSegment.getAssistedQueryEncryptor().getProps());
-    }
-    
-    private static AlgorithmConfiguration createLikeQueryEncryptorConfiguration(final EncryptColumnSegment columnSegment) {
-        return new AlgorithmConfiguration(columnSegment.getLikeQueryEncryptor().getName(), columnSegment.getLikeQueryEncryptor().getProps());
-    }
-    
     private static String getEncryptorName(final String tableName, final String columnName) {
         return String.format("%s_%s", tableName, columnName);
     }
diff --git a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdater.java b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdater.java
index 5feafe1afab..e2a22cf2f68 100644
--- a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdater.java
+++ b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdater.java
@@ -70,9 +70,13 @@ public final class AlterEncryptRuleStatementUpdater implements RuleDefinitionAlt
     private void checkToBeAlteredEncryptors(final AlterEncryptRuleStatement sqlStatement) {
         Collection<AlgorithmSegment> encryptors = new LinkedHashSet<>();
         sqlStatement.getRules().forEach(each -> each.getColumns().forEach(column -> {
-            encryptors.add(column.getEncryptor());
-            encryptors.add(column.getAssistedQueryEncryptor());
-            encryptors.add(column.getLikeQueryEncryptor());
+            encryptors.add(column.getCipher().getEncryptor());
+            if (null != column.getAssistedQuery()) {
+                encryptors.add(column.getAssistedQuery().getEncryptor());
+            }
+            if (null != column.getLikeQuery()) {
+                encryptors.add(column.getLikeQuery().getEncryptor());
+            }
         }));
         encryptors.stream().filter(Objects::nonNull).forEach(each -> TypedSPILoader.checkService(EncryptAlgorithm.class, each.getName(), each.getProps()));
     }
diff --git a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdater.java b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdater.java
index 03af2258db5..c653346ee75 100644
--- a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdater.java
+++ b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdater.java
@@ -82,9 +82,13 @@ public final class CreateEncryptRuleStatementUpdater implements RuleDefinitionCr
     private void checkToBeCreatedEncryptors(final CreateEncryptRuleStatement sqlStatement) {
         Collection<AlgorithmSegment> encryptors = new LinkedHashSet<>();
         sqlStatement.getRules().forEach(each -> each.getColumns().forEach(column -> {
-            encryptors.add(column.getEncryptor());
-            encryptors.add(column.getAssistedQueryEncryptor());
-            encryptors.add(column.getLikeQueryEncryptor());
+            encryptors.add(column.getCipher().getEncryptor());
+            if (null != column.getAssistedQuery()) {
+                encryptors.add(column.getAssistedQuery().getEncryptor());
+            }
+            if (null != column.getLikeQuery()) {
+                encryptors.add(column.getLikeQuery().getEncryptor());
+            }
         }));
         encryptors.stream().filter(Objects::nonNull).forEach(each -> TypedSPILoader.checkService(EncryptAlgorithm.class, each.getName(), each.getProps()));
     }
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
index b9a4660ef20..ef1c1549495 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/converter/EncryptRuleStatementConverterTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.encrypt.distsql.handler.converter;
 
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnItemSegment;
 import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnSegment;
 import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
@@ -43,12 +44,14 @@ class EncryptRuleStatementConverterTest {
         assertTrue(actual.getTables().iterator().next().getColumns().iterator().next().getAssistedQuery().isPresent());
         assertThat(actual.getTables().iterator().next().getColumns().iterator().next().getAssistedQuery().get().getName(), is("assisted_column"));
         assertThat(actual.getTables().iterator().next().getColumns().iterator().next().getCipher().getEncryptorName(), is("t_encrypt_user_id"));
+        assertThat(actual.getTables().iterator().next().getColumns().iterator().next().getAssistedQuery().get().getEncryptorName(), is("assist_t_encrypt_user_id"));
+        assertThat(actual.getTables().iterator().next().getColumns().iterator().next().getLikeQuery().get().getEncryptorName(), is("like_t_encrypt_user_id"));
     }
     
     private Collection<EncryptColumnSegment> createColumns() {
-        return Collections.singleton(new EncryptColumnSegment("user_id", "user_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment("MD5", PropertiesBuilder.build(new Property("MD5-key", "MD5-value"))),
-                new AlgorithmSegment("MD5", PropertiesBuilder.build(new Property("MD5-key", "MD5-value"))),
-                new AlgorithmSegment("CHAR_DIGEST_LIKE", PropertiesBuilder.build(new Property("MD5-key", "MD5-value")))));
+        return Collections.singleton(new EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new AlgorithmSegment("MD5", PropertiesBuilder.build(new Property("MD5-key", "MD5-value")))),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment("MD5", PropertiesBuilder.build(new Property("MD5-key", "MD5-value")))),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment("MD5", PropertiesBuilder.build(new Property("MD5-key", "MD5-value"))))));
     }
 }
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
index 4a0afd28b6c..387815c1125 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/AlterEncryptRuleStatementUpdaterTest.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnItemSegment;
 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;
@@ -77,10 +78,10 @@ class AlterEncryptRuleStatementUpdaterTest {
     }
     
     private AlterEncryptRuleStatement createSQLStatement(final String encryptorName) {
-        EncryptColumnSegment columnSegment = new EncryptColumnSegment("user_id", "user_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment(encryptorName, new Properties()),
-                new AlgorithmSegment("test", new Properties()),
-                new AlgorithmSegment("test", new Properties()));
+        EncryptColumnSegment columnSegment = new EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new AlgorithmSegment(encryptorName, new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment("test", new Properties())),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment("test", new Properties())));
         EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt", Collections.singleton(columnSegment));
         return new AlterEncryptRuleStatement(Collections.singleton(ruleSegment));
     }
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
index 1f5d42fd0ed..f94bb8caf2f 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/CreateEncryptRuleStatementUpdaterTest.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.distsql.handler.exception.rule.DuplicateRuleExc
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnItemSegment;
 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.CreateEncryptRuleStatement;
@@ -76,22 +77,24 @@ class CreateEncryptRuleStatementUpdaterTest {
     }
     
     private CreateEncryptRuleStatement createAESEncryptRuleSQLStatement(final boolean ifNotExists) {
-        EncryptColumnSegment encryptColumnSegment = new EncryptColumnSegment("user_id", "user_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment("AES", PropertiesBuilder.build(new Property("aes-key-value", "abc"))), null, null);
+        EncryptColumnSegment encryptColumnSegment = new EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new AlgorithmSegment("AES", PropertiesBuilder.build(new Property("aes-key-value", "abc")))),
+                new EncryptColumnItemSegment("assisted_column", null),
+                new EncryptColumnItemSegment("like_column", null));
         Collection<EncryptRuleSegment> rules = new LinkedList<>();
         rules.add(new EncryptRuleSegment("t_user", Collections.singleton(encryptColumnSegment)));
         return new CreateEncryptRuleStatement(ifNotExists, rules);
     }
     
     private CreateEncryptRuleStatement createSQLStatement(final boolean ifNotExists, final String encryptorName) {
-        EncryptColumnSegment tUserColumnSegment = new EncryptColumnSegment("user_id", "user_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment(encryptorName, new Properties()),
-                new AlgorithmSegment(encryptorName, new Properties()),
-                new AlgorithmSegment(encryptorName, new Properties()));
-        EncryptColumnSegment tOrderColumnSegment = new EncryptColumnSegment("order_id", "order_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment(encryptorName, new Properties()),
-                new AlgorithmSegment(encryptorName, new Properties()),
-                new AlgorithmSegment(encryptorName, new Properties()));
+        EncryptColumnSegment tUserColumnSegment = new EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new AlgorithmSegment(encryptorName, new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment(encryptorName, new Properties())),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment(encryptorName, new Properties())));
+        EncryptColumnSegment tOrderColumnSegment = new EncryptColumnSegment("order_id",
+                new EncryptColumnItemSegment("order_cipher", new AlgorithmSegment(encryptorName, new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment(encryptorName, new Properties())),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment(encryptorName, new Properties())));
         EncryptRuleSegment tUserRuleSegment = new EncryptRuleSegment("t_user", Collections.singleton(tUserColumnSegment));
         EncryptRuleSegment tOrderRuleSegment = new EncryptRuleSegment("t_order", Collections.singleton(tOrderColumnSegment));
         Collection<EncryptRuleSegment> rules = new LinkedList<>();
@@ -115,14 +118,14 @@ class CreateEncryptRuleStatementUpdaterTest {
     }
     
     private CreateEncryptRuleStatement createWrongAESEncryptorSQLStatement() {
-        EncryptColumnSegment tUserColumnSegment = new EncryptColumnSegment("user_id", "user_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment("AES", new Properties()),
-                new AlgorithmSegment("AES", new Properties()),
-                new AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties()));
-        EncryptColumnSegment tOrderColumnSegment = new EncryptColumnSegment("order_id", "order_cipher", "assisted_column", "like_column",
-                new AlgorithmSegment("AES", new Properties()),
-                new AlgorithmSegment("AES", new Properties()),
-                new AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties()));
+        EncryptColumnSegment tUserColumnSegment = new EncryptColumnSegment("user_id",
+                new EncryptColumnItemSegment("user_cipher", new AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
+        EncryptColumnSegment tOrderColumnSegment = new EncryptColumnSegment("order_id",
+                new EncryptColumnItemSegment("order_cipher", new AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("assisted_column", new AlgorithmSegment("AES", new Properties())),
+                new EncryptColumnItemSegment("like_column", new AlgorithmSegment("CHAR_DIGEST_LIKE", new Properties())));
         EncryptRuleSegment tUserRuleSegment = new EncryptRuleSegment("t_user", Collections.singleton(tUserColumnSegment));
         EncryptRuleSegment tOrderRuleSegment = new EncryptRuleSegment("t_order", Collections.singleton(tOrderColumnSegment));
         Collection<EncryptRuleSegment> rules = new LinkedList<>();
diff --git a/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java b/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
index 27a0faed8e9..770cfe9e4ce 100644
--- a/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
+++ b/features/encrypt/distsql/parser/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/core/EncryptDistSQLStatementVisitor.java
@@ -32,6 +32,7 @@ import org.apache.shardingsphere.distsql.parser.autogen.EncryptDistSQLStatementP
 import org.apache.shardingsphere.distsql.parser.autogen.EncryptDistSQLStatementParser.ShowEncryptRulesContext;
 import org.apache.shardingsphere.distsql.parser.autogen.EncryptDistSQLStatementParser.TableNameContext;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptColumnItemSegment;
 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;
@@ -84,12 +85,11 @@ public final class EncryptDistSQLStatementVisitor extends EncryptDistSQLStatemen
     @Override
     public ASTNode visitEncryptColumnDefinition(final EncryptColumnDefinitionContext ctx) {
         return new EncryptColumnSegment(getIdentifierValue(ctx.columnDefinition().columnName()),
-                getIdentifierValue(ctx.cipherColumnDefinition().cipherColumnName()),
-                null == ctx.assistedQueryColumnDefinition() ? null : getIdentifierValue(ctx.assistedQueryColumnDefinition().assistedQueryColumnName()),
-                null == ctx.likeQueryColumnDefinition() ? null : getIdentifierValue(ctx.likeQueryColumnDefinition().likeQueryColumnName()),
-                (AlgorithmSegment) visit(ctx.encryptAlgorithm().algorithmDefinition()),
-                null == ctx.assistedQueryAlgorithm() ? null : (AlgorithmSegment) visit(ctx.assistedQueryAlgorithm().algorithmDefinition()),
-                null == ctx.likeQueryAlgorithm() ? null : (AlgorithmSegment) visit(ctx.likeQueryAlgorithm().algorithmDefinition()));
+                new EncryptColumnItemSegment(getIdentifierValue(ctx.cipherColumnDefinition().cipherColumnName()), (AlgorithmSegment) visit(ctx.encryptAlgorithm().algorithmDefinition())),
+                null == ctx.assistedQueryColumnDefinition() ? null : new EncryptColumnItemSegment(getIdentifierValue(ctx.assistedQueryColumnDefinition().assistedQueryColumnName()),
+                        null == ctx.assistedQueryAlgorithm() ? null : (AlgorithmSegment) visit(ctx.assistedQueryAlgorithm().algorithmDefinition())),
+                null == ctx.likeQueryColumnDefinition() ? null : new EncryptColumnItemSegment(getIdentifierValue(ctx.likeQueryColumnDefinition().likeQueryColumnName()),
+                        null == ctx.likeQueryAlgorithm() ? null : (AlgorithmSegment) visit(ctx.likeQueryAlgorithm().algorithmDefinition())));
     }
     
     @Override
diff --git a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnItemSegment.java
similarity index 77%
copy from features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java
copy to features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnItemSegment.java
index 21360eccd3f..ae60ba3d124 100644
--- a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java
+++ b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnItemSegment.java
@@ -23,23 +23,13 @@ import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 
 /**
- * Encrypt column segment.
+ * Encrypt column item segment.
  */
 @RequiredArgsConstructor
 @Getter
-public final class EncryptColumnSegment implements ASTNode {
+public final class EncryptColumnItemSegment implements ASTNode {
     
     private final String name;
     
-    private final String cipherColumn;
-    
-    private final String assistedQueryColumn;
-    
-    private final String likeQueryColumn;
-    
     private final AlgorithmSegment encryptor;
-    
-    private final AlgorithmSegment assistedQueryEncryptor;
-    
-    private final AlgorithmSegment likeQueryEncryptor;
 }
diff --git a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java
index 21360eccd3f..1c6a3918e9b 100644
--- a/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java
+++ b/features/encrypt/distsql/statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/segment/EncryptColumnSegment.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.encrypt.distsql.parser.segment;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 
 /**
@@ -31,15 +30,9 @@ public final class EncryptColumnSegment implements ASTNode {
     
     private final String name;
     
-    private final String cipherColumn;
+    private final EncryptColumnItemSegment cipher;
     
-    private final String assistedQueryColumn;
+    private final EncryptColumnItemSegment assistedQuery;
     
-    private final String likeQueryColumn;
-    
-    private final AlgorithmSegment encryptor;
-    
-    private final AlgorithmSegment assistedQueryEncryptor;
-    
-    private final AlgorithmSegment likeQueryEncryptor;
+    private final EncryptColumnItemSegment likeQuery;
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java
index 8403ee5257c..47a96317f1c 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/asserts/segment/distsql/rdl/EncryptColumnAssert.java
@@ -48,10 +48,23 @@ public final class EncryptColumnAssert {
         } else {
             assertNotNull(actual, assertContext.getText("Actual encrypt column should exist."));
             assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getName(), is(expected.getName()));
-            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getCipherColumn(), is(expected.getCipherColumn()));
-            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())), actual.getAssistedQueryColumn(), is(expected.getAssistedQueryColumn()));
-            AlgorithmAssert.assertIs(assertContext, actual.getEncryptor(), expected.getEncryptor());
-            AlgorithmAssert.assertIs(assertContext, actual.getAssistedQueryEncryptor(), expected.getAssistedQueryEncryptor());
+            assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())),
+                    actual.getCipher().getName(), is(expected.getCipher().getName()));
+            AlgorithmAssert.assertIs(assertContext, actual.getCipher().getEncryptor(), expected.getCipher().getEncryptor());
+            if (null == expected.getAssistedQuery()) {
+                assertNull(actual.getAssistedQuery(), assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())));
+            } else {
+                assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())),
+                        actual.getAssistedQuery().getName(), is(expected.getAssistedQuery().getName()));
+                AlgorithmAssert.assertIs(assertContext, actual.getAssistedQuery().getEncryptor(), expected.getAssistedQuery().getEncryptor());
+            }
+            if (null == expected.getLikeQuery()) {
+                assertNull(actual.getLikeQuery(), assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())));
+            } else {
+                assertThat(assertContext.getText(String.format("`%s`'s assertion error", actual.getClass().getSimpleName())),
+                        actual.getLikeQuery().getName(), is(expected.getLikeQuery().getName()));
+                AlgorithmAssert.assertIs(assertContext, actual.getLikeQuery().getEncryptor(), expected.getLikeQuery().getEncryptor());
+            } 
         }
     }
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
index b4ca6baadea..85bc635f6d0 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
@@ -20,9 +20,7 @@ package org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
-import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedAlgorithm;
 
-import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
@@ -32,15 +30,12 @@ import javax.xml.bind.annotation.XmlElement;
 @Setter
 public final class ExpectedEncryptColumn extends AbstractExpectedIdentifierSQLSegment {
     
-    @XmlAttribute(name = "cipher-column")
-    private String cipherColumn;
+    @XmlElement(name = "cipher")
+    private ExpectedEncryptColumnItem cipher;
     
-    @XmlAttribute(name = "assisted-query-column")
-    private String assistedQueryColumn;
+    @XmlElement(name = "assisted-query")
+    private ExpectedEncryptColumnItem assistedQuery;
     
-    @XmlElement
-    private ExpectedAlgorithm encryptor;
-    
-    @XmlElement(name = "assisted-query-encryptor")
-    private ExpectedAlgorithm assistedQueryEncryptor;
+    @XmlElement(name = "like-query")
+    private ExpectedEncryptColumnItem likeQuery;
 }
diff --git a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumnItem.java
similarity index 74%
copy from test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
copy to test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumnItem.java
index b4ca6baadea..17818d97105 100644
--- a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumn.java
+++ b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/segment/impl/distsql/rdl/ExpectedEncryptColumnItem.java
@@ -22,25 +22,15 @@ import lombok.Setter;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.AbstractExpectedIdentifierSQLSegment;
 import org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.distsql.ExpectedAlgorithm;
 
-import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 
 /**
- * Expected encrypt column.
+ * Expected encrypt column item.
  */
 @Getter
 @Setter
-public final class ExpectedEncryptColumn extends AbstractExpectedIdentifierSQLSegment {
-    
-    @XmlAttribute(name = "cipher-column")
-    private String cipherColumn;
-    
-    @XmlAttribute(name = "assisted-query-column")
-    private String assistedQueryColumn;
+public final class ExpectedEncryptColumnItem extends AbstractExpectedIdentifierSQLSegment {
     
     @XmlElement
     private ExpectedAlgorithm encryptor;
-    
-    @XmlElement(name = "assisted-query-encryptor")
-    private ExpectedAlgorithm assistedQueryEncryptor;
 }
diff --git a/test/it/parser/src/main/resources/case/rdl/alter.xml b/test/it/parser/src/main/resources/case/rdl/alter.xml
index e69d252e24c..72c25894648 100644
--- a/test/it/parser/src/main/resources/case/rdl/alter.xml
+++ b/test/it/parser/src/main/resources/case/rdl/alter.xml
@@ -200,54 +200,74 @@
     
     <alter-encrypt-rule sql-case-id="alter-encrypt-rule">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </alter-encrypt-rule>
 
     <alter-encrypt-rule sql-case-id="alter-encrypt-rule-with-assisted-query-column">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher" assisted-query-column="assisted_column">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
-                <assisted-query-encryptor algorithm-name="MD5" />
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
+                <assisted-query name="assisted_column">
+                    <encryptor algorithm-name="MD5" />
+                </assisted-query>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </alter-encrypt-rule>
     
     <alter-encrypt-rule sql-case-id="alter-encrypt-rule-with-like-query-column">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher" like-query-column="like_column">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
-                <like-query-encryptor algorithm-name="CHAR_DIGEST_LIKE" />
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
+                <like-query name="like_column">
+                    <encryptor algorithm-name="CHAR_DIGEST_LIKE" />
+                </like-query>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </alter-encrypt-rule>
     
     <alter-encrypt-rule sql-case-id="alter-encrypt-rule-with-query-with-cipher-column">
         <rule name="t_encrypt" query-with-cipher-column="false">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </alter-encrypt-rule>
diff --git a/test/it/parser/src/main/resources/case/rdl/create.xml b/test/it/parser/src/main/resources/case/rdl/create.xml
index d1e44ab7660..377cb397e0a 100644
--- a/test/it/parser/src/main/resources/case/rdl/create.xml
+++ b/test/it/parser/src/main/resources/case/rdl/create.xml
@@ -372,77 +372,103 @@
     
     <create-encrypt-rule sql-case-id="create-encrypt-rule">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>
     
     <create-encrypt-rule sql-case-id="create-encrypt-rule-if-not-exists" if-not-exists="true">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>
 
     <create-encrypt-rule sql-case-id="create-encrypt-rule-with-quota">
         <rule name="encrypt">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>
     
     <create-encrypt-rule sql-case-id="create-encrypt-rule-with-assisted-query-column">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher" assisted-query-column="assisted_column">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
-                <assisted-query-encryptor algorithm-name="MD5" />
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
+                <assisted-query name="assisted_column">
+                    <encryptor algorithm-name="MD5" />
+                </assisted-query>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>
     
     <create-encrypt-rule sql-case-id="create-encrypt-rule-with-like-query-column">
         <rule name="t_encrypt">
-            <column name="user_id" cipher-column="user_cipher" like-query-column="like_column">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
-                <like-query-encryptor algorithm-name="CHAR_DIGEST_LIKE" />
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
+                <like-query name="like_column">
+                    <encryptor algorithm-name="CHAR_DIGEST_LIKE" />
+                </like-query>
             </column>
-            <column name="order_id" cipher-column="order_cipher">
-                <encryptor algorithm-name="MD5" />
+            <column name="order_id">
+                <cipher name="order_cipher">
+                    <encryptor algorithm-name="MD5" />
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>
     
     <create-encrypt-rule sql-case-id="create-encrypt-rule-with-query-with-cipher-column">
         <rule name="encrypt" query-with-cipher-column="false">
-            <column name="user_id" cipher-column="user_cipher">
-                <encryptor algorithm-name="AES">
-                    <property key="aes-key-value" value="123456abc" />
-                </encryptor>
+            <column name="user_id">
+                <cipher name="user_cipher">
+                    <encryptor algorithm-name="AES">
+                        <property key="aes-key-value" value="123456abc" />
+                    </encryptor>
+                </cipher>
             </column>
         </rule>
     </create-encrypt-rule>