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 1adc635edd3 Convert MaskRuleConfiguration to DistSQL via SPI (#27340)
1adc635edd3 is described below

commit 1adc635edd37a3908c7ddf8ba7c68b0c0ca11a2d
Author: yx9o <yangx_s...@163.com>
AuthorDate: Fri Jul 21 10:28:26 2023 +0800

    Convert MaskRuleConfiguration to DistSQL via SPI (#27340)
---
 .../EncryptConvertRuleConfigurationProvider.java   |  3 +-
 .../MaskConvertRuleConfigurationProvider.java}     | 61 ++++++-----------
 ...dler.ral.query.ConvertRuleConfigurationProvider | 18 +++++
 ...eSplittingConvertRuleConfigurationProvider.java |  3 +-
 .../ShadowConvertRuleConfigurationProvider.java    |  3 +-
 .../ConvertYamlConfigurationExecutor.java          | 79 ++--------------------
 6 files changed, 47 insertions(+), 120 deletions(-)

diff --git 
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
 
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
index 0c60d7397a8..19f6ec44d91 100644
--- 
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
+++ 
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/provider/EncryptConvertRuleConfigurationProvider.java
@@ -47,8 +47,7 @@ public final class EncryptConvertRuleConfigurationProvider 
implements ConvertRul
         if (ruleConfig.getTables().isEmpty()) {
             return "";
         }
-        StringBuilder result = new StringBuilder();
-        result.append(DistSQLScriptConstants.CREATE_ENCRYPT);
+        StringBuilder result = new 
StringBuilder(DistSQLScriptConstants.CREATE_ENCRYPT);
         Iterator<EncryptTableRuleConfiguration> iterator = 
ruleConfig.getTables().iterator();
         while (iterator.hasNext()) {
             EncryptTableRuleConfiguration tableRuleConfig = iterator.next();
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
similarity index 53%
copy from 
features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
copy to 
features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
index 0e39866ccd8..aa075a55cb2 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
+++ 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
@@ -15,15 +15,15 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.shadow.distsql.handler.provider;
+package org.apache.shardingsphere.mask.distsql.handler.provider;
 
 import 
org.apache.shardingsphere.distsql.handler.ral.constant.DistSQLScriptConstants;
 import 
org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
-import 
org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
-import 
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
+import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
+import 
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
+import 
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 
 import java.util.Collection;
 import java.util.Iterator;
@@ -32,61 +32,44 @@ import java.util.Properties;
 import java.util.TreeMap;
 
 /**
- * Shadow convert rule configuration provider.
+ * Mask convert rule configuration provider.
  */
-public final class ShadowConvertRuleConfigurationProvider implements 
ConvertRuleConfigurationProvider {
+public final class MaskConvertRuleConfigurationProvider implements 
ConvertRuleConfigurationProvider {
     
     @Override
     public String convert(final RuleConfiguration ruleConfig) {
-        return getShadowDistSQL((ShadowRuleConfiguration) ruleConfig);
+        return getMaskDistSQL((MaskRuleConfiguration) ruleConfig);
     }
     
-    private String getShadowDistSQL(final ShadowRuleConfiguration ruleConfig) {
-        if (ruleConfig.getDataSources().isEmpty()) {
+    private String getMaskDistSQL(final MaskRuleConfiguration ruleConfig) {
+        if (ruleConfig.getTables().isEmpty()) {
             return "";
         }
-        StringBuilder result = new StringBuilder();
-        result.append(DistSQLScriptConstants.CREATE_SHADOW);
-        Iterator<ShadowDataSourceConfiguration> iterator = 
ruleConfig.getDataSources().iterator();
+        StringBuilder result = new 
StringBuilder(DistSQLScriptConstants.CREATE_MASK);
+        Iterator<MaskTableRuleConfiguration> iterator = 
ruleConfig.getTables().iterator();
         while (iterator.hasNext()) {
-            ShadowDataSourceConfiguration dataSourceConfig = iterator.next();
-            String shadowRuleName = dataSourceConfig.getName();
-            String shadowTables = getShadowTables(shadowRuleName, 
ruleConfig.getTables(), ruleConfig.getShadowAlgorithms());
-            result.append(String.format(DistSQLScriptConstants.SHADOW, 
shadowRuleName, dataSourceConfig.getProductionDataSourceName(), 
dataSourceConfig.getShadowDataSourceName(), shadowTables));
+            MaskTableRuleConfiguration tableRuleConfig = iterator.next();
+            result.append(String.format(DistSQLScriptConstants.MASK, 
tableRuleConfig.getName(), getMaskColumns(tableRuleConfig.getColumns(), 
ruleConfig.getMaskAlgorithms())));
             if (iterator.hasNext()) {
-                result.append(DistSQLScriptConstants.COMMA);
+                
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
             }
         }
         
result.append(DistSQLScriptConstants.SEMI).append(System.lineSeparator()).append(System.lineSeparator());
         return result.toString();
     }
     
-    private String getShadowTables(final String shadowRuleName, final 
Map<String, ShadowTableConfiguration> ruleConfig, final Map<String, 
AlgorithmConfiguration> algorithmConfigs) {
+    private String getMaskColumns(final 
Collection<MaskColumnRuleConfiguration> columnRuleConfig, final Map<String, 
AlgorithmConfiguration> maskAlgorithms) {
         StringBuilder result = new StringBuilder();
-        Iterator<Map.Entry<String, ShadowTableConfiguration>> iterator = 
ruleConfig.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry<String, ShadowTableConfiguration> shadowTableConfig = 
iterator.next();
-            if 
(shadowTableConfig.getValue().getDataSourceNames().contains(shadowRuleName)) {
-                String shadowTableTypes = 
getShadowTableTypes(shadowTableConfig.getValue().getShadowAlgorithmNames(), 
algorithmConfigs);
-                
result.append(String.format(DistSQLScriptConstants.SHADOW_TABLE, 
shadowTableConfig.getKey(), shadowTableTypes));
-            }
-            if (iterator.hasNext()) {
-                
result.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
-            }
+        Iterator<MaskColumnRuleConfiguration> iterator = 
columnRuleConfig.iterator();
+        if (iterator.hasNext()) {
+            MaskColumnRuleConfiguration column = iterator.next();
+            result.append(String.format(DistSQLScriptConstants.MASK_COLUMN, 
column.getLogicColumn(), getMaskAlgorithms(column, maskAlgorithms)));
         }
         return result.toString();
     }
     
-    private String getShadowTableTypes(final Collection<String> 
shadowAlgorithmNames, final Map<String, AlgorithmConfiguration> 
algorithmConfigs) {
-        StringBuilder result = new StringBuilder();
-        Iterator<String> iterator = shadowAlgorithmNames.iterator();
-        while (iterator.hasNext()) {
-            
result.append(getAlgorithmType(algorithmConfigs.get(iterator.next())));
-            if (iterator.hasNext()) {
-                result.append(DistSQLScriptConstants.COMMA).append(' ');
-            }
-        }
-        return result.toString();
+    private String getMaskAlgorithms(final MaskColumnRuleConfiguration 
columnRuleConfig, final Map<String, AlgorithmConfiguration> maskAlgorithms) {
+        return 
getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
     }
     
     private String getAlgorithmType(final AlgorithmConfiguration 
algorithmConfig) {
@@ -123,6 +106,6 @@ public final class ShadowConvertRuleConfigurationProvider 
implements ConvertRule
     
     @Override
     public String getType() {
-        return ShadowRuleConfiguration.class.getName();
+        return MaskRuleConfiguration.class.getName();
     }
 }
diff --git 
a/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
 
b/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
new file mode 100644
index 00000000000..3f0ac5166b5
--- /dev/null
+++ 
b/features/mask/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurationProvider
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.mask.distsql.handler.provider.MaskConvertRuleConfigurationProvider
diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
index 806cdbe5a5f..fb7badf6453 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingConvertRuleConfigurationProvider.java
@@ -45,8 +45,7 @@ public final class 
ReadwriteSplittingConvertRuleConfigurationProvider implements
         if (ruleConfig.getDataSources().isEmpty()) {
             return "";
         }
-        StringBuilder result = new StringBuilder();
-        result.append(DistSQLScriptConstants.CREATE_READWRITE_SPLITTING_RULE);
+        StringBuilder result = new 
StringBuilder(DistSQLScriptConstants.CREATE_READWRITE_SPLITTING_RULE);
         Iterator<ReadwriteSplittingDataSourceRuleConfiguration> iterator = 
ruleConfig.getDataSources().iterator();
         while (iterator.hasNext()) {
             appendStaticReadWriteSplittingRule(ruleConfig.getLoadBalancers(), 
iterator.next(), result);
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
index 0e39866ccd8..2af4cd0c61a 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/provider/ShadowConvertRuleConfigurationProvider.java
@@ -45,8 +45,7 @@ public final class ShadowConvertRuleConfigurationProvider 
implements ConvertRule
         if (ruleConfig.getDataSources().isEmpty()) {
             return "";
         }
-        StringBuilder result = new StringBuilder();
-        result.append(DistSQLScriptConstants.CREATE_SHADOW);
+        StringBuilder result = new 
StringBuilder(DistSQLScriptConstants.CREATE_SHADOW);
         Iterator<ShadowDataSourceConfiguration> iterator = 
ruleConfig.getDataSources().iterator();
         while (iterator.hasNext()) {
             ShadowDataSourceConfiguration dataSourceConfig = iterator.next();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
index 0a7977ade98..8132f84489a 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ConvertYamlConfigurationExecutor.java
@@ -25,7 +25,6 @@ import 
org.apache.shardingsphere.distsql.handler.ral.query.ConvertRuleConfigurat
 import 
org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ConvertYamlConfigurationStatement;
 import 
org.apache.shardingsphere.encrypt.api.config.CompatibleEncryptRuleConfiguration;
-import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import 
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
@@ -37,9 +36,6 @@ import 
org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapper;
-import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
-import 
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
-import 
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceConfiguration;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDatabaseConfiguration;
 import 
org.apache.shardingsphere.proxy.backend.config.yaml.swapper.YamlProxyDataSourceConfigurationSwapper;
@@ -53,7 +49,6 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Properties;
 import java.util.TreeMap;
 
 /**
@@ -86,16 +81,12 @@ public final class ConvertYamlConfigurationExecutor 
implements QueryableRALExecu
         StringBuilder result = new StringBuilder();
         appendResourceDistSQL(yamlConfig, result);
         for (RuleConfiguration each : swapToRuleConfigs(yamlConfig).values()) {
+            String type = each.getClass().getName();
             if (each instanceof CompatibleEncryptRuleConfiguration) {
-                ConvertRuleConfigurationProvider convertRuleConfigProvider = 
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class,
-                        ((CompatibleEncryptRuleConfiguration) 
each).convertToEncryptRuleConfiguration().getClass().getName());
-                result.append(convertRuleConfigProvider.convert(each));
-            } else if (each instanceof MaskRuleConfiguration) {
-                appendMaskDistSQL((MaskRuleConfiguration) each, result);
-            } else {
-                ConvertRuleConfigurationProvider convertRuleConfigProvider = 
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class, 
each.getClass().getName());
-                result.append(convertRuleConfigProvider.convert(each));
+                type = ((CompatibleEncryptRuleConfiguration) 
each).convertToEncryptRuleConfiguration().getClass().getName();
             }
+            ConvertRuleConfigurationProvider convertRuleConfigProvider = 
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class, type);
+            result.append(convertRuleConfigProvider.convert(each));
         }
         return result.toString();
     }
@@ -175,68 +166,6 @@ public final class ConvertYamlConfigurationExecutor 
implements QueryableRALExecu
         }
     }
     
-    private void appendMaskDistSQL(final MaskRuleConfiguration ruleConfig, 
final StringBuilder stringBuilder) {
-        if (ruleConfig.getTables().isEmpty()) {
-            return;
-        }
-        stringBuilder.append(DistSQLScriptConstants.CREATE_MASK);
-        Iterator<MaskTableRuleConfiguration> iterator = 
ruleConfig.getTables().iterator();
-        while (iterator.hasNext()) {
-            MaskTableRuleConfiguration tableRuleConfig = iterator.next();
-            stringBuilder.append(String.format(DistSQLScriptConstants.MASK, 
tableRuleConfig.getName(), getMaskColumns(tableRuleConfig.getColumns(), 
ruleConfig.getMaskAlgorithms())));
-            if (iterator.hasNext()) {
-                
stringBuilder.append(DistSQLScriptConstants.COMMA).append(System.lineSeparator());
-            }
-        }
-        
stringBuilder.append(DistSQLScriptConstants.SEMI).append(System.lineSeparator()).append(System.lineSeparator());
-    }
-    
-    private String getMaskColumns(final 
Collection<MaskColumnRuleConfiguration> columnRuleConfig, final Map<String, 
AlgorithmConfiguration> maskAlgorithms) {
-        StringBuilder result = new StringBuilder();
-        Iterator<MaskColumnRuleConfiguration> iterator = 
columnRuleConfig.iterator();
-        if (iterator.hasNext()) {
-            MaskColumnRuleConfiguration column = iterator.next();
-            result.append(String.format(DistSQLScriptConstants.MASK_COLUMN, 
column.getLogicColumn(), getMaskAlgorithms(column, maskAlgorithms)));
-        }
-        return result.toString();
-    }
-    
-    private String getMaskAlgorithms(final MaskColumnRuleConfiguration 
columnRuleConfig, final Map<String, AlgorithmConfiguration> maskAlgorithms) {
-        return 
getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
-    }
-    
-    private String getAlgorithmType(final AlgorithmConfiguration 
algorithmConfig) {
-        StringBuilder result = new StringBuilder();
-        if (null == algorithmConfig) {
-            return result.toString();
-        }
-        String type = algorithmConfig.getType().toLowerCase();
-        if (algorithmConfig.getProps().isEmpty()) {
-            
result.append(String.format(DistSQLScriptConstants.ALGORITHM_TYPE_WITHOUT_PROPS,
 type));
-        } else {
-            result.append(String.format(DistSQLScriptConstants.ALGORITHM_TYPE, 
type, getAlgorithmProperties(algorithmConfig.getProps())));
-        }
-        return result.toString();
-    }
-    
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    private String getAlgorithmProperties(final Properties props) {
-        StringBuilder result = new StringBuilder();
-        Iterator<String> iterator = new TreeMap(props).keySet().iterator();
-        while (iterator.hasNext()) {
-            String key = iterator.next();
-            Object value = props.get(key);
-            if (null == value) {
-                continue;
-            }
-            result.append(String.format(DistSQLScriptConstants.PROPERTY, key, 
value));
-            if (iterator.hasNext()) {
-                result.append(DistSQLScriptConstants.COMMA).append(' ');
-            }
-        }
-        return result.toString();
-    }
-    
     @Override
     public String getType() {
         return ConvertYamlConfigurationStatement.class.getName();

Reply via email to