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>