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 <[email protected]>
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>