This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 84a95460d7c Optimize data mask result decorator logic and code style 
(#23151)
84a95460d7c is described below

commit 84a95460d7cffdb497d11f85667371bde4acf792
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Dec 29 13:39:23 2022 +0800

    Optimize data mask result decorator logic and code style (#23151)
    
    * Optimize data mask result decorator logic and code style
    
    * modify pg default mask config
---
 .../mask/merge/MaskResultDecoratorEngine.java              |  4 ++--
 .../mask/merge/dql/MaskAlgorithmMetaData.java              | 14 +-------------
 .../yaml/swapper/YamlMaskRuleConfigurationSwapper.java     |  5 +++--
 .../rule/YamlMaskTableRuleConfigurationSwapper.java        |  4 ++--
 .../mask/merge/dql/MaskAlgorithmMetaDataTest.java          | 14 +++++++++-----
 proxy/bootstrap/src/main/resources/conf/config-mask.yaml   | 10 ++++++----
 6 files changed, 23 insertions(+), 28 deletions(-)

diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
index 753c10a4377..acc3bc1e414 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/MaskResultDecoratorEngine.java
@@ -35,8 +35,8 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
 public final class MaskResultDecoratorEngine implements 
ResultDecoratorEngine<MaskRule> {
     
     @Override
-    public ResultDecorator<?> newInstance(final ShardingSphereDatabase 
database,
-                                          final MaskRule maskRule, final 
ConfigurationProperties props, final SQLStatementContext<?> 
sqlStatementContext) {
+    public ResultDecorator<?> newInstance(final ShardingSphereDatabase 
database, final MaskRule maskRule,
+                                          final ConfigurationProperties props, 
final SQLStatementContext<?> sqlStatementContext) {
         if (sqlStatementContext instanceof SelectStatementContext) {
             MaskAlgorithmMetaData algorithmMetaData = new 
MaskAlgorithmMetaData(database, maskRule, (SelectStatementContext) 
sqlStatementContext);
             return new MaskDQLResultDecorator(algorithmMetaData);
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
index 4b1ec05b752..3bec741543a 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaData.java
@@ -45,17 +45,6 @@ public final class MaskAlgorithmMetaData {
     
     private final SelectStatementContext selectStatementContext;
     
-    /**
-     * Find mask algorithm.
-     *
-     * @param tableName table name
-     * @param columnName column name
-     * @return maskAlgorithm
-     */
-    public Optional<MaskAlgorithm> findMaskAlgorithm(final String tableName, 
final String columnName) {
-        return maskRule.findMaskAlgorithm(tableName, columnName);
-    }
-    
     /**
      * Find mask algorithm.
      *
@@ -71,8 +60,7 @@ public final class MaskAlgorithmMetaData {
         String schemaName = tablesContext.getSchemaName().orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(selectStatementContext.getDatabaseType(),
 database.getName()));
         Map<String, String> expressionTableNames = 
tablesContext.findTableNamesByColumnProjection(
                 Collections.singletonList(columnProjection.get()), 
database.getSchema(schemaName));
-        Optional<String> tableName = findTableName(columnProjection.get(), 
expressionTableNames);
-        return maskRule.findMaskAlgorithm(tableName.get(), 
columnProjection.get().getName());
+        return findTableName(columnProjection.get(), 
expressionTableNames).flatMap(optional -> maskRule.findMaskAlgorithm(optional, 
columnProjection.get().getName()));
     }
     
     private Optional<ColumnProjection> findColumnProjection(final int 
columnIndex) {
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
index d260927a885..4627808eca4 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/YamlMaskRuleConfigurationSwapper.java
@@ -32,6 +32,7 @@ import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
+import java.util.Map.Entry;
 
 /**
  * YAML mask rule configuration swapper.
@@ -57,7 +58,7 @@ public final class YamlMaskRuleConfigurationSwapper 
implements YamlRuleConfigura
     
     private Collection<MaskTableRuleConfiguration> swapTables(final 
YamlMaskRuleConfiguration yamlConfig) {
         Collection<MaskTableRuleConfiguration> result = new LinkedList<>();
-        for (Map.Entry<String, YamlMaskTableRuleConfiguration> entry : 
yamlConfig.getTables().entrySet()) {
+        for (Entry<String, YamlMaskTableRuleConfiguration> entry : 
yamlConfig.getTables().entrySet()) {
             YamlMaskTableRuleConfiguration yamlMaskTableRuleConfig = 
entry.getValue();
             yamlMaskTableRuleConfig.setName(entry.getKey());
             result.add(tableSwapper.swapToObject(yamlMaskTableRuleConfig));
@@ -67,7 +68,7 @@ public final class YamlMaskRuleConfigurationSwapper 
implements YamlRuleConfigura
     
     private Map<String, AlgorithmConfiguration> swapMaskAlgorithm(final 
YamlMaskRuleConfiguration yamlConfig) {
         Map<String, AlgorithmConfiguration> result = new 
LinkedHashMap<>(yamlConfig.getMaskAlgorithms().size(), 1);
-        for (Map.Entry<String, YamlAlgorithmConfiguration> entry : 
yamlConfig.getMaskAlgorithms().entrySet()) {
+        for (Entry<String, YamlAlgorithmConfiguration> entry : 
yamlConfig.getMaskAlgorithms().entrySet()) {
             result.put(entry.getKey(), 
algorithmSwapper.swapToObject(entry.getValue()));
         }
         return result;
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
index d6502bd9549..c4a0b762e4d 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/rule/YamlMaskTableRuleConfigurationSwapper.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.mask.yaml.config.rule.YamlMaskTableRuleConfigur
 
 import java.util.Collection;
 import java.util.LinkedList;
-import java.util.Map;
+import java.util.Map.Entry;
 
 /**
  * YAML mask table rule configuration swapper.
@@ -47,7 +47,7 @@ public final class YamlMaskTableRuleConfigurationSwapper 
implements YamlConfigur
     @Override
     public MaskTableRuleConfiguration swapToObject(final 
YamlMaskTableRuleConfiguration yamlConfig) {
         Collection<MaskColumnRuleConfiguration> columns = new LinkedList<>();
-        for (Map.Entry<String, YamlMaskColumnRuleConfiguration> entry : 
yamlConfig.getColumns().entrySet()) {
+        for (Entry<String, YamlMaskColumnRuleConfiguration> entry : 
yamlConfig.getColumns().entrySet()) {
             YamlMaskColumnRuleConfiguration yamlMaskColumnRuleConfig = 
entry.getValue();
             yamlMaskColumnRuleConfig.setLogicColumn(entry.getKey());
             columns.add(columnSwapper.swapToObject(yamlMaskColumnRuleConfig));
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
index 98396ca26b1..e78587eea9c 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskAlgorithmMetaDataTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mask.merge.dql;
 
+import 
org.apache.shardingsphere.infra.binder.segment.select.projection.impl.ColumnProjection;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.database.DefaultDatabase;
@@ -32,6 +33,7 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Collections;
 import java.util.Optional;
 import java.util.Properties;
 
@@ -52,7 +54,7 @@ public final class MaskAlgorithmMetaDataTest {
     @Mock
     private MaskRule maskRule;
     
-    @Mock
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private SelectStatementContext selectStatementContext;
     
     private MaskAlgorithm<?, ?> maskAlgorithm;
@@ -60,15 +62,17 @@ public final class MaskAlgorithmMetaDataTest {
     @Before
     public void setUp() {
         
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
-        maskAlgorithm = (MaskAlgorithm<?, ?>) 
MaskAlgorithmFactory.newInstance(new AlgorithmConfiguration("MD5", new 
Properties()));
+        maskAlgorithm = MaskAlgorithmFactory.newInstance(new 
AlgorithmConfiguration("MD5", new Properties()));
     }
     
     @SuppressWarnings("rawtypes")
     @Test
-    public void assertFindMaskAlgorithm() {
-        when(maskRule.findMaskAlgorithm("t_order", 
"id")).thenReturn(Optional.of(maskAlgorithm));
+    public void assertFindMaskAlgorithmByColumnIndex() {
+        when(maskRule.findMaskAlgorithm("t_order", 
"order_id")).thenReturn(Optional.of(maskAlgorithm));
+        
when(selectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Collections.singletonList(new
 ColumnProjection(null, "order_id", null)));
+        
when(selectStatementContext.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("t_order"));
         MaskAlgorithmMetaData maskAlgorithmMetaData = new 
MaskAlgorithmMetaData(database, maskRule, selectStatementContext);
-        Optional<MaskAlgorithm> actual = 
maskAlgorithmMetaData.findMaskAlgorithm("t_order", "id");
+        Optional<MaskAlgorithm> actual = 
maskAlgorithmMetaData.findMaskAlgorithmByColumnIndex(1);
         assertTrue(actual.isPresent());
         assertThat(actual.get().getType(), is("MD5"));
     }
diff --git a/proxy/bootstrap/src/main/resources/conf/config-mask.yaml 
b/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
index d8d36b35622..44ee9ebda64 100644
--- a/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
+++ b/proxy/bootstrap/src/main/resources/conf/config-mask.yaml
@@ -52,22 +52,24 @@
 #        password:
 #          maskAlgorithm: md5_mask
 #        email:
-#          maskAlgorithm: mask_before_special_char_mask
+#          maskAlgorithm: mask_before_special_chars_mask
 #        telephone:
 #          maskAlgorithm: keep_first_n_last_m_mask
 #
 #  maskAlgorithms:
 #    md5_mask:
 #      type: MD5
-#    mask_before_special_char_mask:
-#      type: MASK_BEFORE_SPECIAL_CHAR
+#    mask_before_special_chars_mask:
+#      type: MASK_BEFORE_SPECIAL_CHARS
 #      props:
-#        special-characters: @
+#        special-chars: '@'
+#        replace-char: '*'
 #    keep_first_n_last_m_mask:
 #      type: KEEP_FIRST_N_LAST_M
 #      props:
 #        first-n: 3
 #        last-m: 4
+#        replace-char: '*'
 
 
######################################################################################################
 #

Reply via email to