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

sunnianjun 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 d083faa36be Add AlgorithmDistSQLConverter (#30594)
d083faa36be is described below

commit d083faa36be09e4dba92b28a13b2d21366aee1a8
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 21 23:50:51 2024 +0800

    Add AlgorithmDistSQLConverter (#30594)
    
    * Refactor ConvertYamlConfigurationExecutor
    
    * Add AlgorithmDistSQLConverter
---
 .../EncryptConvertRuleConfigurationProvider.java   |  8 ++--
 .../MaskConvertRuleConfigurationProvider.java      |  3 +-
 ...eSplittingConvertRuleConfigurationProvider.java |  3 +-
 .../ShadowConvertRuleConfigurationProvider.java    |  3 +-
 .../ShardingConvertRuleConfigurationProvider.java  | 10 +++--
 ...rovider.java => AlgorithmDistSQLConverter.java} | 26 ++++--------
 .../convert/ConvertRuleConfigurationProvider.java  | 49 +---------------------
 .../ConvertYamlConfigurationExecutor.java          |  4 +-
 8 files changed, 26 insertions(+), 80 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 ab6a3f5a4e7..ab9621bee64 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
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.encrypt.distsql.handler.provider;
 
 import com.google.common.base.Strings;
+import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.AlgorithmDistSQLConverter;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.ConvertRuleConfigurationProvider;
 import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
@@ -92,14 +93,15 @@ public final class EncryptConvertRuleConfigurationProvider 
implements ConvertRul
         String assistedQueryEncryptorName = 
ruleConfig.getAssistedQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse("");
         String likeQueryEncryptorName = 
ruleConfig.getLikeQuery().map(EncryptColumnItemRuleConfiguration::getEncryptorName).orElse("");
         if (!Strings.isNullOrEmpty(cipherEncryptorName)) {
-            
result.append(String.format(EncryptDistSQLConstants.ENCRYPT_ALGORITHM, 
getAlgorithmType(encryptors.get(cipherEncryptorName))));
+            
result.append(String.format(EncryptDistSQLConstants.ENCRYPT_ALGORITHM, 
AlgorithmDistSQLConverter.getAlgorithmType(encryptors.get(cipherEncryptorName))));
         }
         if (!Strings.isNullOrEmpty(assistedQueryEncryptorName)) {
             result.append(EncryptDistSQLConstants.COMMA).append(' ')
-                    
.append(String.format(EncryptDistSQLConstants.ASSISTED_QUERY_ALGORITHM, 
getAlgorithmType(encryptors.get(assistedQueryEncryptorName))));
+                    
.append(String.format(EncryptDistSQLConstants.ASSISTED_QUERY_ALGORITHM, 
AlgorithmDistSQLConverter.getAlgorithmType(encryptors.get(assistedQueryEncryptorName))));
         }
         if (!Strings.isNullOrEmpty(likeQueryEncryptorName)) {
-            result.append(EncryptDistSQLConstants.COMMA).append(' 
').append(String.format(EncryptDistSQLConstants.LIKE_QUERY_ALGORITHM, 
getAlgorithmType(encryptors.get(likeQueryEncryptorName))));
+            result.append(EncryptDistSQLConstants.COMMA).append(' ')
+                    
.append(String.format(EncryptDistSQLConstants.LIKE_QUERY_ALGORITHM, 
AlgorithmDistSQLConverter.getAlgorithmType(encryptors.get(likeQueryEncryptorName))));
         }
         return result.toString();
     }
diff --git 
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
index 72123421b4a..0c409c383f4 100644
--- 
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
+++ 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/provider/MaskConvertRuleConfigurationProvider.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.mask.distsql.handler.provider;
 
+import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.AlgorithmDistSQLConverter;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.ConvertRuleConfigurationProvider;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -67,7 +68,7 @@ public final class MaskConvertRuleConfigurationProvider 
implements ConvertRuleCo
     }
     
     private String getMaskAlgorithms(final MaskColumnRuleConfiguration 
columnRuleConfig, final Map<String, AlgorithmConfiguration> maskAlgorithms) {
-        return 
getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
+        return 
AlgorithmDistSQLConverter.getAlgorithmType(maskAlgorithms.get(columnRuleConfig.getMaskAlgorithm()));
     }
     
     @Override
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 1c112f5278b..4400a23ddc3 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
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.provider;
 
 import com.google.common.base.Strings;
+import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.AlgorithmDistSQLConverter;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.ConvertRuleConfigurationProvider;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -78,7 +79,7 @@ public final class 
ReadwriteSplittingConvertRuleConfigurationProvider implements
     
     private String getLoadBalancerType(final AlgorithmConfiguration 
algorithmConfig) {
         StringBuilder result = new StringBuilder();
-        String loadBalancerType = getAlgorithmType(algorithmConfig);
+        String loadBalancerType = 
AlgorithmDistSQLConverter.getAlgorithmType(algorithmConfig);
         if (!Strings.isNullOrEmpty(loadBalancerType)) {
             
result.append(ReadwriteSplittingDistSQLConstants.COMMA).append(System.lineSeparator()).append(loadBalancerType);
         }
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 efb81be5d28..e0c39d84e0d 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
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.shadow.distsql.handler.provider;
 
+import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.AlgorithmDistSQLConverter;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.ConvertRuleConfigurationProvider;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -78,7 +79,7 @@ public final class ShadowConvertRuleConfigurationProvider 
implements ConvertRule
         StringBuilder result = new StringBuilder();
         Iterator<String> iterator = shadowAlgorithmNames.iterator();
         while (iterator.hasNext()) {
-            
result.append(getAlgorithmType(algorithmConfigs.get(iterator.next())));
+            
result.append(AlgorithmDistSQLConverter.getAlgorithmType(algorithmConfigs.get(iterator.next())));
             if (iterator.hasNext()) {
                 result.append(ShadowDistSQLConstants.COMMA).append(' ');
             }
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingConvertRuleConfigurationProvider.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingConvertRuleConfigurationProvider.java
index 5376d756f21..6cef8a743f7 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingConvertRuleConfigurationProvider.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/provider/ShardingConvertRuleConfigurationProvider.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.handler.provider;
 
 import com.google.common.base.Strings;
+import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.AlgorithmDistSQLConverter;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.ral.convert.ConvertRuleConfigurationProvider;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
@@ -140,7 +141,8 @@ public final class ShardingConvertRuleConfigurationProvider 
implements ConvertRu
         StringBuilder result = new StringBuilder();
         StandardShardingStrategyConfiguration strategyConfig = 
(StandardShardingStrategyConfiguration) 
autoTableRuleConfig.getShardingStrategy();
         String shardingColumn = 
Strings.isNullOrEmpty(strategyConfig.getShardingColumn()) ? 
ruleConfig.getDefaultShardingColumn() : strategyConfig.getShardingColumn();
-        
result.append(String.format(ShardingDistSQLConstants.AUTO_TABLE_STRATEGY, 
shardingColumn, 
getAlgorithmType(ruleConfig.getShardingAlgorithms().get(strategyConfig.getShardingAlgorithmName()))));
+        
result.append(String.format(ShardingDistSQLConstants.AUTO_TABLE_STRATEGY,
+                shardingColumn, 
AlgorithmDistSQLConverter.getAlgorithmType(ruleConfig.getShardingAlgorithms().get(strategyConfig.getShardingAlgorithmName()))));
         appendKeyGenerateStrategy(ruleConfig.getKeyGenerators(), 
autoTableRuleConfig.getKeyGenerateStrategy(), result);
         appendAuditStrategy(ruleConfig.getAuditors(), null != 
autoTableRuleConfig.getAuditStrategy() ? autoTableRuleConfig.getAuditStrategy() 
: ruleConfig.getDefaultAuditStrategy(), result);
         return result.toString();
@@ -155,7 +157,7 @@ public final class ShardingConvertRuleConfigurationProvider 
implements ConvertRu
             
stringBuilder.append(ShardingDistSQLConstants.COMMA).append(System.lineSeparator());
         }
         String type = strategyConfig.getType().toLowerCase();
-        String algorithmDefinition = 
getAlgorithmType(shardingAlgorithms.get(strategyConfig.getShardingAlgorithmName()));
+        String algorithmDefinition = 
AlgorithmDistSQLConverter.getAlgorithmType(shardingAlgorithms.get(strategyConfig.getShardingAlgorithmName()));
         switch (type) {
             case ShardingDistSQLConstants.STANDARD:
                 StandardShardingStrategyConfiguration 
standardShardingStrategyConfig = (StandardShardingStrategyConfiguration) 
strategyConfig;
@@ -182,7 +184,7 @@ public final class ShardingConvertRuleConfigurationProvider 
implements ConvertRu
             return;
         }
         
stringBuilder.append(ShardingDistSQLConstants.COMMA).append(System.lineSeparator());
-        String algorithmDefinition = 
getAlgorithmType(keyGenerators.get(keyGenerateStrategyConfig.getKeyGeneratorName()));
+        String algorithmDefinition = 
AlgorithmDistSQLConverter.getAlgorithmType(keyGenerators.get(keyGenerateStrategyConfig.getKeyGeneratorName()));
         
stringBuilder.append(String.format(ShardingDistSQLConstants.KEY_GENERATOR_STRATEGY,
 keyGenerateStrategyConfig.getColumn(), algorithmDefinition));
     }
     
@@ -198,7 +200,7 @@ public final class ShardingConvertRuleConfigurationProvider 
implements ConvertRu
         if (!auditorNames.isEmpty()) {
             Iterator<String> iterator = auditorNames.iterator();
             while (iterator.hasNext()) {
-                result.append(getAlgorithmType(auditors.get(iterator.next())));
+                
result.append(AlgorithmDistSQLConverter.getAlgorithmType(auditors.get(iterator.next())));
                 if (iterator.hasNext()) {
                     result.append(ShardingDistSQLConstants.COMMA);
                 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/AlgorithmDistSQLConverter.java
similarity index 76%
copy from 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
copy to 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/AlgorithmDistSQLConverter.java
index ac17398041c..8524b04378e 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/AlgorithmDistSQLConverter.java
@@ -17,28 +17,19 @@
 
 package org.apache.shardingsphere.distsql.handler.engine.query.ral.convert;
 
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
-import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
 
 import java.util.Iterator;
 import java.util.Properties;
 import java.util.TreeMap;
 
 /**
- * Convert rule configuration provider.
+ * Algorithm DistSQL converter.
  */
-@SingletonSPI
-public interface ConvertRuleConfigurationProvider extends TypedSPI {
-    
-    /**
-     * Convert rule configuration to DistSQL.
-     *
-     * @param ruleConfig rule configuration
-     * @return DistSQL script
-     */
-    String convert(RuleConfiguration ruleConfig);
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class AlgorithmDistSQLConverter {
     
     /**
      * Get algorithm type.
@@ -46,7 +37,7 @@ public interface ConvertRuleConfigurationProvider extends 
TypedSPI {
      * @param algorithmConfig algorithm configuration
      * @return algorithm type
      */
-    default String getAlgorithmType(final AlgorithmConfiguration 
algorithmConfig) {
+    public static String getAlgorithmType(final AlgorithmConfiguration 
algorithmConfig) {
         StringBuilder result = new StringBuilder();
         if (null == algorithmConfig) {
             return result.toString();
@@ -65,7 +56,7 @@ public interface ConvertRuleConfigurationProvider extends 
TypedSPI {
      * @return algorithm properties
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
-    default String getAlgorithmProperties(final Properties props) {
+    public static String getAlgorithmProperties(final Properties props) {
         StringBuilder result = new StringBuilder();
         Iterator<String> iterator = new TreeMap(props).keySet().iterator();
         while (iterator.hasNext()) {
@@ -81,7 +72,4 @@ public interface ConvertRuleConfigurationProvider extends 
TypedSPI {
         }
         return result.toString();
     }
-    
-    @Override
-    Class<? extends RuleConfiguration> getType();
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
index ac17398041c..405e33083bf 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/ral/convert/ConvertRuleConfigurationProvider.java
@@ -17,15 +17,10 @@
 
 package org.apache.shardingsphere.distsql.handler.engine.query.ral.convert;
 
-import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
 
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.TreeMap;
-
 /**
  * Convert rule configuration provider.
  */
@@ -36,52 +31,10 @@ public interface ConvertRuleConfigurationProvider extends 
TypedSPI {
      * Convert rule configuration to DistSQL.
      *
      * @param ruleConfig rule configuration
-     * @return DistSQL script
+     * @return DistSQL
      */
     String convert(RuleConfiguration ruleConfig);
     
-    /**
-     * Get algorithm type.
-     *
-     * @param algorithmConfig algorithm configuration
-     * @return algorithm type
-     */
-    default String getAlgorithmType(final AlgorithmConfiguration 
algorithmConfig) {
-        StringBuilder result = new StringBuilder();
-        if (null == algorithmConfig) {
-            return result.toString();
-        }
-        String type = algorithmConfig.getType().toLowerCase();
-        result.append(algorithmConfig.getProps().isEmpty()
-                ? 
String.format(DistSQLScriptConstants.ALGORITHM_TYPE_WITHOUT_PROPS, type)
-                : String.format(DistSQLScriptConstants.ALGORITHM_TYPE, type, 
getAlgorithmProperties(algorithmConfig.getProps())));
-        return result.toString();
-    }
-    
-    /**
-     * Get algorithm properties.
-     *
-     * @param props properties
-     * @return algorithm properties
-     */
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    default 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
     Class<? extends RuleConfiguration> getType();
 }
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 81e7210eabb..ac247905422 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
@@ -81,9 +81,7 @@ public final class ConvertYamlConfigurationExecutor 
implements DistSQLQueryExecu
         StringBuilder result = new StringBuilder();
         appendResourceDistSQL(yamlConfig, result);
         for (RuleConfiguration each : swapToRuleConfigs(yamlConfig).values()) {
-            Class<? extends RuleConfiguration> type = each.getClass();
-            ConvertRuleConfigurationProvider convertRuleConfigProvider = 
TypedSPILoader.getService(ConvertRuleConfigurationProvider.class, type);
-            result.append(convertRuleConfigProvider.convert(each));
+            
result.append(TypedSPILoader.getService(ConvertRuleConfigurationProvider.class, 
each.getClass()).convert(each));
         }
         return result.toString();
     }

Reply via email to