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 b3a560295aa support the fuzzyQueryColumn and fuzzyQueryEncryptorName
for distsql and UT, SIT (#21808)
b3a560295aa is described below
commit b3a560295aa7031ff5e31e457a8fc4aa68fec295
Author: gxxiong <[email protected]>
AuthorDate: Tue Nov 1 09:42:10 2022 +0800
support the fuzzyQueryColumn and fuzzyQueryEncryptorName for distsql and
UT, SIT (#21808)
* support the fuzzyQueryColumn and fuzzyQueryEncryptorName for distsql and
UT, SIT
* Reformat Code EncryptRuleTest
* fix Parameter matching of encrypt disql
---
.../template/jdbc/java/config/encrypt.ftl | 2 +-
.../config/local/LocalEncryptConfiguration.java | 2 +-
.../jdbc/config/EncryptDatabasesConfiguration.java | 4 +-
.../jdbc/config/ShadowEncryptConfiguration.java | 4 +-
.../rule/EncryptColumnRuleConfiguration.java | 6 +-
...rovidedEncryptRuleConfigurationCheckerTest.java | 4 +-
.../EncryptRuleConfigurationCheckerTest.java | 4 +-
.../encrypt/rule/EncryptRuleTest.java | 68 +++++++++++++++-------
.../encrypt/rule/EncryptTableTest.java | 18 +++++-
...lEncryptColumnRuleConfigurationSwapperTest.java | 4 +-
...mlEncryptTableRuleConfigurationSwapperTest.java | 6 +-
.../converter/EncryptRuleStatementConverter.java | 14 ++++-
.../EncryptRuleStatementConverterTest.java | 6 +-
.../query/EncryptRuleQueryResultSetTest.java | 2 +-
.../AlterEncryptRuleStatementUpdaterTest.java | 11 ++--
.../CreateEncryptRuleStatementUpdaterTest.java | 13 +++--
.../DropEncryptRuleStatementUpdaterTest.java | 4 +-
.../src/main/antlr4/imports/encrypt/Keyword.g4 | 10 +++-
.../main/antlr4/imports/encrypt/RDLStatement.g4 | 10 +++-
.../core/EncryptDistSQLStatementVisitor.java | 9 ++-
.../parser/segment/EncryptColumnSegment.java | 9 ++-
.../spring/boot/EncryptSpringBootStarterTest.java | 8 ++-
.../test/resources/application-encrypt.properties | 4 ++
.../namespace/EncryptSpringNamespaceTest.java | 24 +++++++-
.../spring/encrypt-application-context.xml | 2 +
25 files changed, 185 insertions(+), 63 deletions(-)
diff --git
a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/encrypt.ftl
b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/encrypt.ftl
index 118a981bbff..49d5831c32e 100644
---
a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/encrypt.ftl
+++
b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/encrypt.ftl
@@ -18,7 +18,7 @@
private EncryptRuleConfiguration createEncryptRuleConfiguration() {
Properties props = new Properties();
props.setProperty("aes-key-value", "123456");
- EncryptColumnRuleConfiguration columnConfigAes = new
EncryptColumnRuleConfiguration("phone", "phone", "", "phone_plain",
"phone_encryptor", null);
+ EncryptColumnRuleConfiguration columnConfigAes = new
EncryptColumnRuleConfiguration("phone", "phone", "", "", "phone_plain",
"phone_encryptor", null);
EncryptColumnRuleConfiguration columnConfigTest = new
EncryptColumnRuleConfiguration("status", "status", "assisted_query_status", "",
"string_encryptor", "string_encryptor", null);
EncryptTableRuleConfiguration orderItemRule = new
EncryptTableRuleConfiguration("t_order_item",
Collections.singleton(columnConfigAes), true);
EncryptTableRuleConfiguration orderRule = new
EncryptTableRuleConfiguration("t_order",
Collections.singleton(columnConfigTest), true);
diff --git
a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalEncryptConfiguration.java
b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalEncryptConfiguration.java
index be68050f8ce..220f85ae415 100644
---
a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalEncryptConfiguration.java
+++
b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalEncryptConfiguration.java
@@ -49,7 +49,7 @@ public final class LocalEncryptConfiguration implements
ExampleConfiguration {
}
private EncryptTableRuleConfiguration
createEncryptTableRuleConfiguration() {
- EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("status", "status", "", "", "status_encryptor",
null);
+ EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("status", "status", "", "", "",
"status_encryptor", null);
return new EncryptTableRuleConfiguration("t_order",
Collections.singleton(encryptColumnRuleConfig), null);
}
diff --git
a/examples/shardingsphere-jdbc-example/single-feature-example/encrypt-example/encrypt-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/encrypt/raw/jdbc/config/EncryptDatabasesConfiguration.java
b/examples/shardingsphere-jdbc-example/single-feature-example/encrypt-example/encrypt-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/encrypt/raw/jdbc/config/EncryptDatabasesConfiguration.java
index 700d870e75b..78ac314902e 100644
---
a/examples/shardingsphere-jdbc-example/single-feature-example/encrypt-example/encrypt-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/encrypt/raw/jdbc/config/EncryptDatabasesConfiguration.java
+++
b/examples/shardingsphere-jdbc-example/single-feature-example/encrypt-example/encrypt-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/encrypt/raw/jdbc/config/EncryptDatabasesConfiguration.java
@@ -39,8 +39,8 @@ public final class EncryptDatabasesConfiguration implements
ExampleConfiguration
public DataSource getDataSource() {
Properties props = new Properties();
props.setProperty("aes-key-value", "123456");
- EncryptColumnRuleConfiguration columnConfigAes = new
EncryptColumnRuleConfiguration("username", "username", "", "username_plain",
"name_encryptor", null);
- EncryptColumnRuleConfiguration columnConfigTest = new
EncryptColumnRuleConfiguration("pwd", "pwd", "assisted_query_pwd", "",
"pwd_encryptor", null);
+ EncryptColumnRuleConfiguration columnConfigAes = new
EncryptColumnRuleConfiguration("username", "username", "", "",
"username_plain", "name_encryptor", null);
+ EncryptColumnRuleConfiguration columnConfigTest = new
EncryptColumnRuleConfiguration("pwd", "pwd", "assisted_query_pwd", "", "",
"pwd_encryptor", null);
EncryptTableRuleConfiguration encryptTableRuleConfig = new
EncryptTableRuleConfiguration("t_user", Arrays.asList(columnConfigAes,
columnConfigTest), null);
Map<String, AlgorithmConfiguration> encryptAlgorithmConfigs = new
LinkedHashMap<>(2, 1);
encryptAlgorithmConfigs.put("name_encryptor", new
AlgorithmConfiguration("AES", props));
diff --git
a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/raw/jdbc/config/ShadowEncryptConfiguration.java
b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/raw/jdbc/config/ShadowEncryptConfiguration.java
index 5e0f455731d..5d5b3e82b40 100644
---
a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/raw/jdbc/config/ShadowEncryptConfiguration.java
+++
b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shadow/raw/jdbc/config/ShadowEncryptConfiguration.java
@@ -80,8 +80,8 @@ public final class ShadowEncryptConfiguration extends
BaseShadowConfiguration {
private Collection<EncryptTableRuleConfiguration>
getEncryptTableRuleConfigurations() {
Collection<EncryptTableRuleConfiguration> result = new LinkedList<>();
Collection<EncryptColumnRuleConfiguration> columns = new
LinkedList<>();
- columns.add(new EncryptColumnRuleConfiguration("username", "username",
"", "username_plain", "name_encryptor", null));
- columns.add(new EncryptColumnRuleConfiguration("pwd", "pwd",
"assisted_query_pwd", "", "pwd_encryptor", null));
+ columns.add(new EncryptColumnRuleConfiguration("username", "username",
"", "", "username_plain", "name_encryptor", null));
+ columns.add(new EncryptColumnRuleConfiguration("pwd", "pwd",
"assisted_query_pwd", "", "", "pwd_encryptor", null));
result.add(new EncryptTableRuleConfiguration("t_user", columns, null));
return result;
}
diff --git
a/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/api/config/rule/EncryptColumnRuleConfiguration.java
b/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/api/config/rule/EncryptColumnRuleConfiguration.java
index 3741f67c015..50bc26729d7 100644
---
a/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/api/config/rule/EncryptColumnRuleConfiguration.java
+++
b/features/encrypt/api/src/main/java/org/apache/shardingsphere/encrypt/api/config/rule/EncryptColumnRuleConfiguration.java
@@ -45,8 +45,8 @@ public final class EncryptColumnRuleConfiguration {
private final Boolean queryWithCipherColumn;
- public EncryptColumnRuleConfiguration(final String logicColumn, final
String cipherColumn, final String assistedQueryColumn, final String plainColumn,
- final String encryptorName, final
Boolean queryWithCipherColumn) {
- this(logicColumn, cipherColumn, assistedQueryColumn, null,
plainColumn, encryptorName, null, null, queryWithCipherColumn);
+ public EncryptColumnRuleConfiguration(final String logicColumn, final
String cipherColumn, final String assistedQueryColumn, final String
fuzzyQueryColumn,
+ final String plainColumn, final
String encryptorName, final Boolean queryWithCipherColumn) {
+ this(logicColumn, cipherColumn, assistedQueryColumn, fuzzyQueryColumn,
plainColumn, encryptorName, null, null, queryWithCipherColumn);
}
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
index cc6d8fa7151..96717b7cb14 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
@@ -51,7 +51,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
private AlgorithmProvidedEncryptRuleConfiguration
createValidConfiguration() {
AlgorithmProvidedEncryptRuleConfiguration result =
mock(AlgorithmProvidedEncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.singletonMap("aes_encryptor",
mock(EncryptAlgorithm.class)));
- Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, null, "user_plain", "aes_encryptor", false));
when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
@@ -69,7 +69,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
private AlgorithmProvidedEncryptRuleConfiguration
createInvalidCipherColumnConfig() {
AlgorithmProvidedEncryptRuleConfiguration result =
mock(AlgorithmProvidedEncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.emptyMap());
- Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, null, "user_plain", "aes_encryptor", false));
when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
index 6af9927ead6..c784dfc7950 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
@@ -50,7 +50,7 @@ public final class EncryptRuleConfigurationCheckerTest {
private EncryptRuleConfiguration createValidConfiguration() {
EncryptRuleConfiguration result = mock(EncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.singletonMap("aes_encryptor",
mock(AlgorithmConfiguration.class)));
- Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, null, "user_plain", "aes_encryptor", false));
when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
@@ -68,7 +68,7 @@ public final class EncryptRuleConfigurationCheckerTest {
private EncryptRuleConfiguration createInvalidCipherColumnConfig() {
EncryptRuleConfiguration result = mock(EncryptRuleConfiguration.class);
when(result.getEncryptors()).thenReturn(Collections.emptyMap());
- Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, "user_plain", "aes_encryptor", false));
+ Collection<EncryptColumnRuleConfiguration> columns =
Collections.singletonList(new EncryptColumnRuleConfiguration("user_id",
"user_cipher", null, null, "user_plain", "aes_encryptor", false));
when(result.getTables()).thenReturn(Collections.singletonList(new
EncryptTableRuleConfiguration("t_encrypt", columns, false)));
return result;
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
index 490f2a6b42c..018b16d4382 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptRuleTest.java
@@ -50,7 +50,7 @@ public final class EncryptRuleTest {
@Test
public void
assertNewInstanceWithAlgorithmProvidedEncryptRuleConfiguration() {
- EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", null);
+ EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "", "",
"test_encryptor", null);
EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), null);
AlgorithmProvidedEncryptRuleConfiguration ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(
Collections.singleton(tableConfig),
Collections.singletonMap("test_encryptor", new CoreEncryptAlgorithmFixture()),
true);
@@ -77,8 +77,8 @@ public final class EncryptRuleTest {
public void assertGetEncryptValues() {
List<Object> encryptAssistedQueryValues = new
EncryptRule(createEncryptRuleConfiguration())
.getEncryptValues(DefaultDatabase.LOGIC_NAME,
DefaultDatabase.LOGIC_NAME, "t_encrypt", "pwd",
Collections.singletonList(null));
- for (final Object value : encryptAssistedQueryValues) {
- assertNull(value);
+ for (Object actual : encryptAssistedQueryValues) {
+ assertNull(actual);
}
}
@@ -106,8 +106,8 @@ public final class EncryptRuleTest {
public void assertGetEncryptAssistedQueryValues() {
List<Object> encryptAssistedQueryValues = new
EncryptRule(createEncryptRuleConfiguration())
.getEncryptAssistedQueryValues(DefaultDatabase.LOGIC_NAME,
DefaultDatabase.LOGIC_NAME, "t_encrypt", "pwd",
Collections.singletonList(null));
- for (final Object value : encryptAssistedQueryValues) {
- assertNull(value);
+ for (Object actual : encryptAssistedQueryValues) {
+ assertNull(actual);
}
}
@@ -123,28 +123,44 @@ public final class EncryptRuleTest {
assertFalse(new
EncryptRule(createEncryptRuleConfiguration()).findPlainColumn("t_encrypt",
"notExistLogicColumn").isPresent());
}
+ @Test
+ public void assertFindFuzzyQueryColumn() {
+ assertFalse(new
EncryptRule(createEncryptRuleConfiguration()).findFuzzyQueryColumn("t_encrypt",
"pwd_cipher").isPresent());
+ }
+
+ @Test
+ public void assertGetEncryptFuzzyQueryValues() {
+ List<Object> encryptFuzzyQueryValues = new
EncryptRule(createEncryptRuleConfiguration())
+ .getEncryptFuzzyQueryValues(DefaultDatabase.LOGIC_NAME,
DefaultDatabase.LOGIC_NAME, "t_encrypt", "pwd",
Collections.singletonList(null));
+ for (Object actual : encryptFuzzyQueryValues) {
+ assertNull(actual);
+ }
+ }
+
+ @Test
+ public void assertGetFuzzyQueryColumns() {
+ assertFalse(new
EncryptRule(createEncryptRuleConfiguration()).getFuzzyQueryColumns("t_encrypt").isEmpty());
+ }
+
@Test
public void assertIsQueryWithCipherColumn() {
- EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", null);
+ EncryptColumnRuleConfiguration encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "", "",
"test_encryptor", null);
EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), null);
AlgorithmProvidedEncryptRuleConfiguration ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(
Collections.singleton(tableConfig),
Collections.singletonMap("test_encryptor", new CoreEncryptAlgorithmFixture()),
true);
EncryptRule actual = new EncryptRule(ruleConfig);
assertTrue(actual.isQueryWithCipherColumn("t_encrypt",
"encrypt_column"));
-
- encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", null);
+ encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "", "",
"test_encryptor", null);
tableConfig = new EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), false);
ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(Collections.singleton(tableConfig),
Collections.singletonMap("test_encryptor", new CoreEncryptAlgorithmFixture()),
true);
actual = new EncryptRule(ruleConfig);
assertFalse(actual.isQueryWithCipherColumn("t_encrypt",
"encrypt_column"));
-
- encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", true);
+ encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "", "",
"test_encryptor", true);
tableConfig = new EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), false);
ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(Collections.singleton(tableConfig),
Collections.singletonMap("test_encryptor", new CoreEncryptAlgorithmFixture()),
true);
actual = new EncryptRule(ruleConfig);
assertTrue(actual.isQueryWithCipherColumn("t_encrypt",
"encrypt_column"));
-
- encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "",
"test_encryptor", false);
+ encryptColumnConfig = new
EncryptColumnRuleConfiguration("encrypt_column", "encrypt_cipher", "", "", "",
"test_encryptor", false);
tableConfig = new EncryptTableRuleConfiguration("t_encrypt",
Collections.singletonList(encryptColumnConfig), null);
ruleConfig = new
AlgorithmProvidedEncryptRuleConfiguration(Collections.singleton(tableConfig),
Collections.singletonMap("test_encryptor", new CoreEncryptAlgorithmFixture()),
true);
actual = new EncryptRule(ruleConfig);
@@ -184,12 +200,14 @@ public final class EncryptRuleTest {
private EncryptRuleConfiguration createEncryptRuleConfiguration() {
AlgorithmConfiguration queryAssistedEncryptConfig = new
AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new Properties());
+ AlgorithmConfiguration queryFuzzyEncryptConfig = new
AlgorithmConfiguration("CORE.QUERY_FUZZY.FIXTURE", new Properties());
AlgorithmConfiguration metaDataAwareEncryptConfig = new
AlgorithmConfiguration("CORE.METADATA_AWARE.FIXTURE", new Properties());
- EncryptColumnRuleConfiguration pwdColumnConfig = new
EncryptColumnRuleConfiguration("pwd", "pwd_cipher", "pwd_assist", "",
"pwd_plain", "test_encryptor", "test_encryptor", null, null);
- EncryptColumnRuleConfiguration creditCardColumnConfig = new
EncryptColumnRuleConfiguration("credit_card", "credit_card_cipher", "",
"credit_card_plain", "test_encryptor", null);
- EncryptColumnRuleConfiguration nameColumnConfig = new
EncryptColumnRuleConfiguration("name", "name_cipher", "", "name_plain",
"customized_encryptor", null);
+ EncryptColumnRuleConfiguration pwdColumnConfig =
+ new EncryptColumnRuleConfiguration("pwd", "pwd_cipher",
"pwd_assist", "pwd_fuzzy", "pwd_plain", "test_encryptor", "test_encryptor",
"fuzzy_encryptor", null);
+ EncryptColumnRuleConfiguration creditCardColumnConfig = new
EncryptColumnRuleConfiguration("credit_card", "credit_card_cipher", "", "",
"credit_card_plain", "test_encryptor", null);
+ EncryptColumnRuleConfiguration nameColumnConfig = new
EncryptColumnRuleConfiguration("name", "name_cipher", "", "", "name_plain",
"customized_encryptor", null);
EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("t_encrypt", Arrays.asList(pwdColumnConfig,
creditCardColumnConfig, nameColumnConfig), null);
- return new
EncryptRuleConfiguration(Collections.singleton(tableConfig),
getEncryptors(queryAssistedEncryptConfig, metaDataAwareEncryptConfig));
+ return new
EncryptRuleConfiguration(Collections.singleton(tableConfig),
getEncryptors(queryAssistedEncryptConfig, queryFuzzyEncryptConfig,
metaDataAwareEncryptConfig));
}
@Test
@@ -199,20 +217,30 @@ public final class EncryptRuleTest {
assertThat(pwdColumnConfig.getAssistedQueryEncryptorName(),
is("assisted_query_test_encryptor"));
}
+ @Test
+ public void assertFuzzyQueryEncryptorNameSpecified() {
+ EncryptColumnRuleConfiguration pwdColumnConfig =
+ new EncryptColumnRuleConfiguration("pwd", "pwd_cipher", "",
"pwd_fuzzy", "pwd_plain", "test_encryptor", "", "fuzzy_query_test_encryptor",
null);
+ assertThat(pwdColumnConfig.getFuzzyQueryEncryptorName(),
is("fuzzy_query_test_encryptor"));
+ }
+
private EncryptRuleConfiguration
createEncryptRuleConfigurationWithUpperCaseLogicTable() {
AlgorithmConfiguration queryAssistedEncryptConfig = new
AlgorithmConfiguration("CORE.QUERY_ASSISTED.FIXTURE", new Properties());
+ AlgorithmConfiguration queryFuzzyEncryptConfig = new
AlgorithmConfiguration("CORE.QUERY_FUZZY.FIXTURE", new Properties());
AlgorithmConfiguration metaDataAwareEncryptConfig = new
AlgorithmConfiguration("CORE.METADATA_AWARE.FIXTURE", new Properties());
- EncryptColumnRuleConfiguration pwdColumnConfig = new
EncryptColumnRuleConfiguration("pwd", "pwd_cipher", "", "pwd_plain",
"test_encryptor", null);
- EncryptColumnRuleConfiguration creditCardColumnConfig = new
EncryptColumnRuleConfiguration("credit_card", "credit_card_cipher", "",
"credit_card_plain", "test_encryptor", null);
- EncryptColumnRuleConfiguration nameColumnConfig = new
EncryptColumnRuleConfiguration("name", "name_cipher", "", "name_plain",
"customized_encryptor", null);
+ EncryptColumnRuleConfiguration pwdColumnConfig = new
EncryptColumnRuleConfiguration("pwd", "pwd_cipher", "", "", "pwd_plain",
"test_encryptor", null);
+ EncryptColumnRuleConfiguration creditCardColumnConfig = new
EncryptColumnRuleConfiguration("credit_card", "credit_card_cipher", "", "",
"credit_card_plain", "test_encryptor", null);
+ EncryptColumnRuleConfiguration nameColumnConfig = new
EncryptColumnRuleConfiguration("name", "name_cipher", "", "", "name_plain",
"customized_encryptor", null);
EncryptTableRuleConfiguration tableConfig = new
EncryptTableRuleConfiguration("T_ENCRYPT", Arrays.asList(pwdColumnConfig,
creditCardColumnConfig, nameColumnConfig), null);
- return new
EncryptRuleConfiguration(Collections.singleton(tableConfig),
getEncryptors(queryAssistedEncryptConfig, metaDataAwareEncryptConfig));
+ return new
EncryptRuleConfiguration(Collections.singleton(tableConfig),
getEncryptors(queryAssistedEncryptConfig, queryFuzzyEncryptConfig,
metaDataAwareEncryptConfig));
}
private Map<String, AlgorithmConfiguration> getEncryptors(final
AlgorithmConfiguration queryAssistedEncryptConfig,
+ final
AlgorithmConfiguration queryFuzzyEncryptConfig,
final
AlgorithmConfiguration metaDataAwareEncryptConfig) {
Map<String, AlgorithmConfiguration> result = new HashMap<>(2, 1);
result.put("test_encryptor", queryAssistedEncryptConfig);
+ result.put("fuzzy_encryptor", queryFuzzyEncryptConfig);
result.put("customized_encryptor", metaDataAwareEncryptConfig);
return result;
}
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
index d5c3610b78e..7d7d789299c 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/rule/EncryptTableTest.java
@@ -39,7 +39,7 @@ public final class EncryptTableTest {
@Before
public void setUp() {
encryptTable = new EncryptTable(new
EncryptTableRuleConfiguration("t_encrypt",
- Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "plainColumn", "myEncryptor", null)), null));
+ Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "fuzzyQueryColumn", "plainColumn", "myEncryptor",
null)), null));
}
@Test
@@ -104,11 +104,23 @@ public final class EncryptTableTest {
assertThat(actual.get(), is("assistedQueryColumn"));
}
+ @Test
+ public void assertFindFuzzyQueryColumn() {
+ Optional<String> actual =
encryptTable.findFuzzyQueryColumn("logicColumn");
+ assertTrue(actual.isPresent());
+ assertThat(actual.get(), is("fuzzyQueryColumn"));
+ }
+
@Test
public void assertNotFindAssistedQueryColumn() {
assertFalse(encryptTable.findAssistedQueryColumn("notExistLogicColumn").isPresent());
}
+ @Test
+ public void assertNotFindFuzzyQueryColumn() {
+
assertFalse(encryptTable.findAssistedQueryColumn("notExistFuzzyQueryColumn").isPresent());
+ }
+
@Test
public void assertGetPlainColumns() {
assertThat(encryptTable.getPlainColumns(),
is(Collections.singletonList("plainColumn")));
@@ -137,13 +149,13 @@ public final class EncryptTableTest {
assertFalse(actual.isPresent());
encryptTable = new EncryptTable(new
EncryptTableRuleConfiguration("t_encrypt",
- Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "plainColumn", "myEncryptor", null)), true));
+ Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "fuzzyQueryColumn", "plainColumn", "myEncryptor",
null)), true));
actual = encryptTable.getQueryWithCipherColumn("logicColumn");
assertTrue(actual.isPresent());
assertTrue(actual.get());
encryptTable = new EncryptTable(new
EncryptTableRuleConfiguration("t_encrypt",
- Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "plainColumn", "myEncryptor", false)), true));
+ Collections.singleton(new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "fuzzyQueryColumn", "plainColumn", "myEncryptor",
false)), true));
actual = encryptTable.getQueryWithCipherColumn("logicColumn");
assertTrue(actual.isPresent());
assertFalse(actual.get());
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptColumnRuleConfigurationSwapperTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptColumnRuleConfigurationSwapperTest.java
index 78fde6ff3a4..d9121b0a166 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptColumnRuleConfigurationSwapperTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptColumnRuleConfigurationSwapperTest.java
@@ -29,11 +29,13 @@ public final class
YamlEncryptColumnRuleConfigurationSwapperTest {
@Test
public void assertSwapToYamlConfiguration() {
YamlEncryptColumnRuleConfigurationSwapper swapper = new
YamlEncryptColumnRuleConfigurationSwapper();
- EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("logicColumn", "cipherColumn",
"assistedQueryColumn", "plainColumn", "encryptorName", true);
+ EncryptColumnRuleConfiguration encryptColumnRuleConfig =
+ new EncryptColumnRuleConfiguration("logicColumn",
"cipherColumn", "assistedQueryColumn", "fuzzyQueryColumn", "plainColumn",
"encryptorName", true);
YamlEncryptColumnRuleConfiguration actual =
swapper.swapToYamlConfiguration(encryptColumnRuleConfig);
assertThat(actual.getLogicColumn(), is("logicColumn"));
assertThat(actual.getCipherColumn(), is("cipherColumn"));
assertThat(actual.getAssistedQueryColumn(), is("assistedQueryColumn"));
+ assertThat(actual.getFuzzyQueryColumn(), is("fuzzyQueryColumn"));
assertThat(actual.getPlainColumn(), is("plainColumn"));
assertThat(actual.getEncryptorName(), is("encryptorName"));
assertThat(actual.getQueryWithCipherColumn(), is(true));
diff --git
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptTableRuleConfigurationSwapperTest.java
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptTableRuleConfigurationSwapperTest.java
index 0f1bf7eeae8..38d749953be 100644
---
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptTableRuleConfigurationSwapperTest.java
+++
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/rule/YamlEncryptTableRuleConfigurationSwapperTest.java
@@ -41,9 +41,9 @@ public final class
YamlEncryptTableRuleConfigurationSwapperTest {
@Test
public void assertSwapToYamlConfiguration() {
Collection<EncryptColumnRuleConfiguration> encryptColumnRuleConfigs =
Arrays.asList(
- new EncryptColumnRuleConfiguration("encrypt_column_1",
"encrypt_cipher_1", "", "", "test_encryptor_1", null),
- new EncryptColumnRuleConfiguration("encrypt_column_2",
"encrypt_cipher_2", "", "", "test_encryptor_2", true),
- new EncryptColumnRuleConfiguration("encrypt_column_3",
"encrypt_cipher_3", "", "", "test_encryptor_3", false));
+ new EncryptColumnRuleConfiguration("encrypt_column_1",
"encrypt_cipher_1", "", "", "", "test_encryptor_1", null),
+ new EncryptColumnRuleConfiguration("encrypt_column_2",
"encrypt_cipher_2", "", "", "", "test_encryptor_2", true),
+ new EncryptColumnRuleConfiguration("encrypt_column_3",
"encrypt_cipher_3", "", "", "", "test_encryptor_3", false));
EncryptTableRuleConfiguration encryptTableRuleConfig = new
EncryptTableRuleConfiguration("test_table", encryptColumnRuleConfigs, true);
YamlEncryptTableRuleConfiguration actualYamlEncryptTableRuleConfig =
swapper.swapToYamlConfiguration(encryptTableRuleConfig);
assertThat(actualYamlEncryptTableRuleConfig.getName(),
is("test_table"));
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 7bfe6054c5d..b8c42e6a405 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
@@ -60,8 +60,9 @@ public final class EncryptRuleStatementConverter {
private static EncryptColumnRuleConfiguration
createEncryptColumnRuleConfiguration(final String tableName, final
EncryptColumnSegment columnSegment) {
String assistedQueryEncryptorName = null ==
columnSegment.getAssistedQueryEncryptor() ? null :
getAssistedQueryEncryptorName(tableName, columnSegment.getName());
+ String fuzzyQueryEncryptorName = null ==
columnSegment.getFuzzyQueryEncryptor() ? null :
getFuzzyQueryEncryptorName(tableName, columnSegment.getName());
return new EncryptColumnRuleConfiguration(columnSegment.getName(),
columnSegment.getCipherColumn(), columnSegment.getAssistedQueryColumn(),
- null, columnSegment.getPlainColumn(),
getEncryptorName(tableName, columnSegment.getName()),
assistedQueryEncryptorName, null, null);
+ columnSegment.getFuzzyQueryColumn(),
columnSegment.getPlainColumn(), getEncryptorName(tableName,
columnSegment.getName()), assistedQueryEncryptorName, fuzzyQueryEncryptorName,
null);
}
private static Map<String, AlgorithmConfiguration>
createEncryptorConfigurations(final EncryptRuleSegment ruleSegment) {
@@ -71,6 +72,9 @@ public final class EncryptRuleStatementConverter {
if (null != each.getAssistedQueryEncryptor()) {
result.put(getAssistedQueryEncryptorName(ruleSegment.getTableName(),
each.getName()), createAssistedQueryEncryptorConfiguration(each));
}
+ if (null != each.getFuzzyQueryEncryptor()) {
+
result.put(getFuzzyQueryEncryptorName(ruleSegment.getTableName(),
each.getName()), createFuzzyQueryEncryptorConfiguration(each));
+ }
}
return result;
}
@@ -83,6 +87,10 @@ public final class EncryptRuleStatementConverter {
return new
AlgorithmConfiguration(columnSegment.getAssistedQueryEncryptor().getName(),
columnSegment.getAssistedQueryEncryptor().getProps());
}
+ private static AlgorithmConfiguration
createFuzzyQueryEncryptorConfiguration(final EncryptColumnSegment
columnSegment) {
+ return new
AlgorithmConfiguration(columnSegment.getFuzzyQueryEncryptor().getName(),
columnSegment.getFuzzyQueryEncryptor().getProps());
+ }
+
private static String getEncryptorName(final String tableName, final
String columnName) {
return String.format("%s_%s", tableName, columnName);
}
@@ -90,4 +98,8 @@ public final class EncryptRuleStatementConverter {
private static String getAssistedQueryEncryptorName(final String
tableName, final String columnName) {
return String.format("assist_%s_%s", tableName, columnName);
}
+
+ private static String getFuzzyQueryEncryptorName(final String tableName,
final String columnName) {
+ return String.format("fuzzy_%s_%s", tableName, columnName);
+ }
}
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 783d12f5907..6e3599a0497 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
@@ -44,8 +44,10 @@ public final class EncryptRuleStatementConverterTest {
}
private Collection<EncryptColumnSegment> createColumns() {
- return Collections.singleton(new EncryptColumnSegment("user_id",
"user_cipher", "user_plain", "assisted_column",
- new AlgorithmSegment("MD5", createProperties()), new
AlgorithmSegment("MD5", createProperties())));
+ return Collections.singleton(new EncryptColumnSegment("user_id",
"user_cipher", "user_plain", "assisted_column", "fuzzy_column",
+ new AlgorithmSegment("MD5", createProperties()),
+ new AlgorithmSegment("MD5", createProperties()),
+ new AlgorithmSegment("CHAR_DIGEST_FUZZY",
createProperties())));
}
private Properties createProperties() {
diff --git
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
index bc77430dc06..9b6c51d6fe7 100644
---
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
+++
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/EncryptRuleQueryResultSetTest.java
@@ -65,7 +65,7 @@ public final class EncryptRuleQueryResultSetTest {
}
private RuleConfiguration getRuleConfiguration() {
- EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", null, "user_plain",
"test", null);
+ EncryptColumnRuleConfiguration encryptColumnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", null, null,
"user_plain", "test", null);
EncryptTableRuleConfiguration encryptTableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(encryptColumnRuleConfig), null);
AlgorithmConfiguration shardingSphereAlgorithmConfig = new
AlgorithmConfiguration("md5", new Properties());
return new
EncryptRuleConfiguration(Collections.singleton(encryptTableRuleConfig),
Collections.singletonMap("test", shardingSphereAlgorithmConfig));
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 d868767ad46..e473ab8d1f7 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
@@ -62,8 +62,9 @@ public final class AlterEncryptRuleStatementUpdaterTest {
@Test(expected = InvalidRuleConfigurationException.class)
public void assertCheckSQLStatementWithIncompleteDataType() {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()),
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
"fuzzy_column",
+ "int varchar(10)", null, null, null, null, new
AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("test", new Properties()),
new AlgorithmSegment("test", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
AlterEncryptRuleStatement statement = new
AlterEncryptRuleStatement(Collections.singleton(ruleSegment));
@@ -71,8 +72,10 @@ public final class AlterEncryptRuleStatementUpdaterTest {
}
private AlterEncryptRuleStatement createSQLStatement(final String
encryptorName) {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- new AlgorithmSegment(encryptorName, new Properties()), new
AlgorithmSegment("test", new Properties()));
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
"fuzzy_column",
+ new AlgorithmSegment(encryptorName, new Properties()),
+ new AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("test", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
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 3cdf181e65f..a4a92827149 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
@@ -56,17 +56,20 @@ public final class CreateEncryptRuleStatementUpdaterTest {
@Test(expected = InvalidRuleConfigurationException.class)
public void assertCheckSQLStatementWithIncompleteDataType() {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- "int varchar(10)", null, null, null, new
AlgorithmSegment("test", new Properties()),
- new AlgorithmSegment("test", new Properties()));
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
"fuzzy_column",
+ "int varchar(10)", null, null, null, null, new
AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("test", new Properties()),
+ new AlgorithmSegment("CHAR_DIGEST_FUZZY", new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
CreateEncryptRuleStatement statement = new
CreateEncryptRuleStatement(Collections.singleton(ruleSegment));
updater.checkSQLStatement(database, statement, null);
}
private CreateEncryptRuleStatement createSQLStatement(final String
encryptorName) {
- EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
- new AlgorithmSegment(encryptorName, new Properties()), new
AlgorithmSegment(encryptorName, new Properties()));
+ EncryptColumnSegment columnSegment = new
EncryptColumnSegment("user_id", "user_cipher", "user_plain", "assisted_column",
"fuzzy_column",
+ new AlgorithmSegment(encryptorName, new Properties()),
+ new AlgorithmSegment(encryptorName, new Properties()),
+ new AlgorithmSegment(encryptorName, new Properties()));
EncryptRuleSegment ruleSegment = new EncryptRuleSegment("t_encrypt",
Collections.singleton(columnSegment), null);
return new
CreateEncryptRuleStatement(Collections.singleton(ruleSegment));
}
diff --git
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
index fc68fd5e10e..8fbce9d4700 100644
---
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
+++
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleStatementUpdaterTest.java
@@ -93,7 +93,7 @@ public final class DropEncryptRuleStatementUpdaterTest {
}
private EncryptRuleConfiguration createCurrentRuleConfiguration() {
- EncryptColumnRuleConfiguration columnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "", "user_plain",
"t_encrypt_user_id_MD5", null);
+ EncryptColumnRuleConfiguration columnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "", "", "user_plain",
"t_encrypt_user_id_MD5", null);
EncryptTableRuleConfiguration tableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(columnRuleConfig), null);
Map<String, AlgorithmConfiguration> encryptors = new HashMap<>(
Collections.singletonMap("t_encrypt_user_id_MD5", new
AlgorithmConfiguration("TEST", new Properties())));
@@ -101,7 +101,7 @@ public final class DropEncryptRuleStatementUpdaterTest {
}
private EncryptRuleConfiguration
createCurrentRuleConfigurationWithMultipleTableRules() {
- EncryptColumnRuleConfiguration columnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "", "user_plain",
"t_encrypt_user_id_MD5", null);
+ EncryptColumnRuleConfiguration columnRuleConfig = new
EncryptColumnRuleConfiguration("user_id", "user_cipher", "", "", "user_plain",
"t_encrypt_user_id_MD5", null);
EncryptTableRuleConfiguration tableRuleConfig = new
EncryptTableRuleConfiguration("t_encrypt",
Collections.singleton(columnRuleConfig), null);
Map<String, AlgorithmConfiguration> encryptors =
Collections.singletonMap("t_encrypt_user_id_MD5", new
AlgorithmConfiguration("TEST", new Properties()));
return new EncryptRuleConfiguration(new
LinkedList<>(Arrays.asList(tableRuleConfig,
diff --git
a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
index 7b03b4413b4..2ab6b2c151a 100644
--- a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
+++ b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
@@ -94,7 +94,11 @@ PLAIN
ASSISTED_QUERY_COLUMN
: A S S I S T E D UL_ Q U E R Y UL_ C O L U M N
;
-
+
+FUZZY_QUERY_COLUMN
+ : F U Z Z Y UL_ Q U E R Y UL_ C O L U M N
+ ;
+
QUERY_WITH_CIPHER_COLUMN
: Q U E R Y UL_ W I T H UL_ C I P H E R UL_ C O L U M N
;
@@ -123,6 +127,10 @@ ASSISTED_QUERY_DATA_TYPE
: A S S I S T E D UL_ Q U E R Y UL_ D A T A UL_ T Y P E
;
+FUZZY_QUERY_DATA_TYPE
+ : F U Z Z Y UL_ Q U E R Y UL_ D A T A UL_ T Y P E
+ ;
+
IF
: I F
;
diff --git
a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
index 11b364953dc..0edd6d55c21 100644
---
a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
+++
b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/RDLStatement.g4
@@ -44,7 +44,7 @@ resourceName
;
encryptColumnDefinition
- : LP columnDefinition (COMMA plainColumnDefinition)? COMMA
cipherColumnDefinition (COMMA assistedQueryColumnDefinition)? COMMA
algorithmDefinition (COMMA algorithmDefinition)? RP
+ : LP columnDefinition (COMMA plainColumnDefinition)? COMMA
cipherColumnDefinition (COMMA assistedQueryColumnDefinition)? (COMMA
fuzzyQueryColumnDefinition)? COMMA algorithmDefinition (COMMA
algorithmDefinition)? (COMMA algorithmDefinition)? RP
;
columnDefinition
@@ -82,6 +82,14 @@ assistedQueryColumnDefinition
assistedQueryColumnName
: IDENTIFIER
;
+
+fuzzyQueryColumnDefinition
+ : FUZZY_QUERY_COLUMN EQ fuzzyQueryColumnName (COMMA FUZZY_QUERY_DATA_TYPE
EQ dataType)?
+ ;
+
+fuzzyQueryColumnName
+ : IDENTIFIER
+ ;
queryWithCipherColumn
: TRUE | FALSE
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 a264c3d8ce4..1cc7850f94f 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
@@ -48,6 +48,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.Identifi
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import java.util.Properties;
import java.util.stream.Collectors;
@@ -95,11 +96,17 @@ public final class EncryptDistSQLStatementVisitor extends
EncryptDistSQLStatemen
getIdentifierValue(ctx.cipherColumnDefinition().cipherColumnName()),
null == ctx.plainColumnDefinition() ? null :
getIdentifierValue(ctx.plainColumnDefinition().plainColumnName()),
null == ctx.assistedQueryColumnDefinition() ? null :
getIdentifierValue(ctx.assistedQueryColumnDefinition().assistedQueryColumnName()),
+ null == ctx.fuzzyQueryColumnDefinition() ? null :
getIdentifierValue(ctx.fuzzyQueryColumnDefinition().fuzzyQueryColumnName()),
getIdentifierValue(ctx.columnDefinition().dataType()),
getIdentifierValue(ctx.cipherColumnDefinition().dataType()),
null == ctx.plainColumnDefinition() ? null :
getIdentifierValue(ctx.plainColumnDefinition().dataType()),
null == ctx.assistedQueryColumnDefinition() ? null :
getIdentifierValue(ctx.assistedQueryColumnDefinition().dataType()),
- algorithmSegments.get(0), 1 == algorithmSegments.size() ? null
: algorithmSegments.get(1));
+ null == ctx.fuzzyQueryColumnDefinition() ? null :
getIdentifierValue(ctx.fuzzyQueryColumnDefinition().dataType()),
+ algorithmSegments.get(0),
+ null == ctx.assistedQueryColumnDefinition() || 1 ==
algorithmSegments.size() ? null : algorithmSegments.get(1),
+ null == ctx.fuzzyQueryColumnDefinition() ? null
+ :
Optional.ofNullable(algorithmSegments).filter(algorithm -> algorithm.size() >
2).map(algorithm -> algorithm.get(2)).orElse(null));
+
}
@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/EncryptColumnSegment.java
index d4cdc140cf3..3f8281bf93b 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
@@ -40,6 +40,8 @@ public final class EncryptColumnSegment implements ASTNode {
private final String assistedQueryColumn;
+ private final String fuzzyQueryColumn;
+
private String dataType;
private String cipherDataType;
@@ -48,10 +50,14 @@ public final class EncryptColumnSegment implements ASTNode {
private String assistedQueryDataType;
+ private String fuzzyQueryDataType;
+
private final AlgorithmSegment encryptor;
private final AlgorithmSegment assistedQueryEncryptor;
+ private final AlgorithmSegment fuzzyQueryEncryptor;
+
/**
* Is the data type correct.
*
@@ -60,7 +66,8 @@ public final class EncryptColumnSegment implements ASTNode {
public boolean isCorrectDataType() {
boolean requireDataType = !Strings.isNullOrEmpty(dataType);
return isCorrectDataType(requireDataType, name, dataType) &&
isCorrectDataType(requireDataType, plainColumn, plainDataType)
- && isCorrectDataType(requireDataType, cipherColumn,
cipherDataType) && isCorrectDataType(requireDataType, assistedQueryColumn,
assistedQueryDataType);
+ && isCorrectDataType(requireDataType, cipherColumn,
cipherDataType) && isCorrectDataType(requireDataType, assistedQueryColumn,
assistedQueryDataType)
+ && isCorrectDataType(requireDataType, fuzzyQueryColumn,
fuzzyQueryDataType);
}
private boolean isCorrectDataType(final boolean requireDataType, final
String field, final String fieldDataType) {
diff --git
a/features/encrypt/spring/spring-boot-starter/src/test/java/org/apache/shardingsphere/encrypt/spring/boot/EncryptSpringBootStarterTest.java
b/features/encrypt/spring/spring-boot-starter/src/test/java/org/apache/shardingsphere/encrypt/spring/boot/EncryptSpringBootStarterTest.java
index e1ed0e448ac..911ab000732 100644
---
a/features/encrypt/spring/spring-boot-starter/src/test/java/org/apache/shardingsphere/encrypt/spring/boot/EncryptSpringBootStarterTest.java
+++
b/features/encrypt/spring/spring-boot-starter/src/test/java/org/apache/shardingsphere/encrypt/spring/boot/EncryptSpringBootStarterTest.java
@@ -17,9 +17,10 @@
package org.apache.shardingsphere.encrypt.spring.boot;
+import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
import org.apache.shardingsphere.encrypt.algorithm.encrypt.AESEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.algorithm.encrypt.MD5EncryptAlgorithm;
-import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.algorithm.fuzzy.CharDigestFuzzyEncryptAlgorithm;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
@@ -65,10 +66,11 @@ public class EncryptSpringBootStarterTest {
}
private void assertEncryptors(final Map<String, EncryptAlgorithm<?, ?>>
encryptors) {
- assertThat(encryptors.size(), is(2));
+ assertThat(encryptors.size(), is(3));
assertThat(encryptors.get("aesEncryptor"),
instanceOf(AESEncryptAlgorithm.class));
assertThat(encryptors.get("aesEncryptor").getProps().getProperty("aes-key-value"),
is("123456"));
assertThat(encryptors.get("md5Encryptor"),
instanceOf(MD5EncryptAlgorithm.class));
+ assertThat(encryptors.get("fuzzyCnEncryptor"),
instanceOf(CharDigestFuzzyEncryptAlgorithm.class));
}
private void assertEncryptTable(final EncryptTableRuleConfiguration
tableRuleConfig) {
@@ -90,7 +92,9 @@ public class EncryptSpringBootStarterTest {
assertThat(columnRuleConfig.getLogicColumn(), is("credit_card"));
assertThat(columnRuleConfig.getCipherColumn(),
is("credit_card_cipher"));
assertThat(columnRuleConfig.getAssistedQueryColumn(),
is("credit_card_assisted_query"));
+ assertThat(columnRuleConfig.getFuzzyQueryColumn(),
is("credit_card_fuzzy_query"));
assertThat(columnRuleConfig.getPlainColumn(), is("credit_card_plain"));
assertThat(columnRuleConfig.getEncryptorName(), is("md5Encryptor"));
+ assertThat(columnRuleConfig.getFuzzyQueryEncryptorName(),
is("fuzzyCnEncryptor"));
}
}
diff --git
a/features/encrypt/spring/spring-boot-starter/src/test/resources/application-encrypt.properties
b/features/encrypt/spring/spring-boot-starter/src/test/resources/application-encrypt.properties
index cd73cbca661..3b5f6c0de76 100644
---
a/features/encrypt/spring/spring-boot-starter/src/test/resources/application-encrypt.properties
+++
b/features/encrypt/spring/spring-boot-starter/src/test/resources/application-encrypt.properties
@@ -20,6 +20,8 @@
spring.shardingsphere.rules.encrypt.encryptors.aesEncryptor.props.aes-key-value=
spring.shardingsphere.rules.encrypt.encryptors.md5Encryptor.type=MD5
+spring.shardingsphere.rules.encrypt.encryptors.fuzzyCnEncryptor.type=CHAR_DIGEST_FUZZY
+
spring.shardingsphere.rules.encrypt.tables.t_order.query-with-cipher-column=false
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.cipher-column=pwd_cipher
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.plain-column=pwd_plain
@@ -28,6 +30,8 @@
spring.shardingsphere.rules.encrypt.tables.t_order.columns.pwd.encryptor-name=ae
spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.cipher-column=credit_card_cipher
spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.plain-column=credit_card_plain
spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.assisted-query-column=credit_card_assisted_query
+spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.fuzzy-query-column=credit_card_fuzzy_query
spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.encryptor-name=md5Encryptor
+spring.shardingsphere.rules.encrypt.tables.t_order.columns.credit_card.fuzzyQueryEncryptorName=fuzzyCnEncryptor
spring.main.banner-mode=off
diff --git
a/features/encrypt/spring/spring-namespace/src/test/java/org/apache/shardingsphere/encrypt/spring/namespace/EncryptSpringNamespaceTest.java
b/features/encrypt/spring/spring-namespace/src/test/java/org/apache/shardingsphere/encrypt/spring/namespace/EncryptSpringNamespaceTest.java
index 2d46eed0da9..655b2dd8563 100644
---
a/features/encrypt/spring/spring-namespace/src/test/java/org/apache/shardingsphere/encrypt/spring/namespace/EncryptSpringNamespaceTest.java
+++
b/features/encrypt/spring/spring-namespace/src/test/java/org/apache/shardingsphere/encrypt/spring/namespace/EncryptSpringNamespaceTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.encrypt.spring.namespace;
import org.apache.shardingsphere.encrypt.algorithm.encrypt.AESEncryptAlgorithm;
import org.apache.shardingsphere.encrypt.algorithm.encrypt.MD5EncryptAlgorithm;
import
org.apache.shardingsphere.encrypt.algorithm.config.AlgorithmProvidedEncryptRuleConfiguration;
+import
org.apache.shardingsphere.encrypt.algorithm.fuzzy.CharDigestFuzzyEncryptAlgorithm;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm;
@@ -46,6 +47,9 @@ public final class EncryptSpringNamespaceTest extends
AbstractJUnit4SpringContex
@Resource
private EncryptAlgorithm<Object, String> md5Encryptor;
+ @Resource
+ private EncryptAlgorithm<Object, String> fuzzyCnEncryptor;
+
@Resource
private AlgorithmProvidedEncryptRuleConfiguration encryptRule;
@@ -60,6 +64,11 @@ public final class EncryptSpringNamespaceTest extends
AbstractJUnit4SpringContex
assertThat(md5Encryptor.getType(), is("MD5"));
}
+ @Test
+ public void assertFuzzyCnEncryptor() {
+ assertThat(fuzzyCnEncryptor.getType(), is("CHAR_DIGEST_FUZZY"));
+ }
+
@Test
public void assertEncryptRuleConfiguration() {
assertEncryptors(encryptRule.getEncryptors());
@@ -68,19 +77,21 @@ public final class EncryptSpringNamespaceTest extends
AbstractJUnit4SpringContex
}
private void assertEncryptors(final Map<String, EncryptAlgorithm<?, ?>>
encryptors) {
- assertThat(encryptors.size(), is(2));
+ assertThat(encryptors.size(), is(3));
assertThat(encryptors.get("aesEncryptor"),
instanceOf(AESEncryptAlgorithm.class));
assertThat(encryptors.get("aesEncryptor").getProps().getProperty("aes-key-value"),
is("123456"));
assertThat(encryptors.get("md5Encryptor"),
instanceOf(MD5EncryptAlgorithm.class));
+ assertThat(encryptors.get("fuzzyCnEncryptor"),
instanceOf(CharDigestFuzzyEncryptAlgorithm.class));
}
private void assertEncryptTable(final EncryptTableRuleConfiguration
tableRuleConfig) {
assertThat(tableRuleConfig.getName(), is("t_order"));
assertFalse(tableRuleConfig.getQueryWithCipherColumn());
- assertThat(tableRuleConfig.getColumns().size(), is(2));
+ assertThat(tableRuleConfig.getColumns().size(), is(3));
Iterator<EncryptColumnRuleConfiguration> columnRuleConfigs =
tableRuleConfig.getColumns().iterator();
assertEncryptColumn1(columnRuleConfigs.next());
assertEncryptColumn2(columnRuleConfigs.next());
+ assertEncryptColumn3(columnRuleConfigs.next());
}
private void assertEncryptColumn1(final EncryptColumnRuleConfiguration
columnRuleConfig) {
@@ -98,4 +109,13 @@ public final class EncryptSpringNamespaceTest extends
AbstractJUnit4SpringContex
assertThat(columnRuleConfig.getEncryptorName(), is("md5Encryptor"));
assertFalse(columnRuleConfig.getQueryWithCipherColumn());
}
+
+ private void assertEncryptColumn3(final EncryptColumnRuleConfiguration
columnRuleConfig) {
+ assertThat(columnRuleConfig.getLogicColumn(), is("credit_card"));
+ assertThat(columnRuleConfig.getCipherColumn(),
is("credit_card_cipher"));
+ assertThat(columnRuleConfig.getFuzzyQueryColumn(),
is("credit_card_fuzzy_query"));
+ assertThat(columnRuleConfig.getPlainColumn(), is("credit_card_plain"));
+ assertThat(columnRuleConfig.getEncryptorName(),
is("fuzzyCnEncryptor"));
+ assertFalse(columnRuleConfig.getQueryWithCipherColumn());
+ }
}
diff --git
a/features/encrypt/spring/spring-namespace/src/test/resources/META-INF/spring/encrypt-application-context.xml
b/features/encrypt/spring/spring-namespace/src/test/resources/META-INF/spring/encrypt-application-context.xml
index 772ae6cd945..04cf5397db8 100644
---
a/features/encrypt/spring/spring-namespace/src/test/resources/META-INF/spring/encrypt-application-context.xml
+++
b/features/encrypt/spring/spring-namespace/src/test/resources/META-INF/spring/encrypt-application-context.xml
@@ -35,11 +35,13 @@
</props>
</encrypt:encrypt-algorithm>
<encrypt:encrypt-algorithm id="md5Encryptor" type="MD5" />
+ <encrypt:encrypt-algorithm id="fuzzyCnEncryptor" type="CHAR_DIGEST_FUZZY"
/>
<encrypt:rule id="encryptRule">
<encrypt:table name="t_order" query-with-cipher-column="false">
<encrypt:column logic-column="pwd" cipher-column="pwd_cipher"
encrypt-algorithm-ref="aesEncryptor" query-with-cipher-column="true" />
<encrypt:column logic-column="credit_card"
cipher-column="credit_card_cipher"
assisted-query-column="credit_card_assisted_query"
plain-column="credit_card_plain" encrypt-algorithm-ref="md5Encryptor"
query-with-cipher-column="false" />
+ <encrypt:column logic-column="credit_card"
cipher-column="credit_card_cipher" fuzzy-query-column="credit_card_fuzzy_query"
plain-column="credit_card_plain" encrypt-algorithm-ref="fuzzyCnEncryptor"
query-with-cipher-column="false" />
</encrypt:table>
</encrypt:rule>
</beans>