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

zhangliang 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 a2c022db9a1 Fix ShardingSphereDataSource creation ignoring other rules 
(#17875)
a2c022db9a1 is described below

commit a2c022db9a1f8f125b7e2f2261f406a8ab783062
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Mon May 23 23:20:22 2022 +0800

    Fix ShardingSphereDataSource creation ignoring other rules (#17875)
---
 .../yaml/swapper/ShardingRuleConfigurationConverter.java | 13 ++++++++++++-
 .../creator/ShardingSpherePipelineDataSourceCreator.java | 16 +++++++++-------
 2 files changed, 21 insertions(+), 8 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
index 2171a02f206..8bed02aeb2e 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationConverter.java
@@ -38,8 +38,19 @@ public final class ShardingRuleConfigurationConverter {
      * @throws IllegalStateException if there is no available sharding rule
      */
     public static ShardingRuleConfiguration 
findAndConvertShardingRuleConfiguration(final Collection<YamlRuleConfiguration> 
yamlRuleConfigs) {
+        return new 
ShardingRuleConfigurationYamlSwapper().swapToObject(findYamlShardingRuleConfiguration(yamlRuleConfigs));
+    }
+    
+    /**
+     * Find YAML sharding rule configuration.
+     *
+     * @param yamlRuleConfigs YAML rule configurations
+     * @return YAML sharding rule configuration
+     * @throws IllegalStateException if there is no available sharding rule
+     */
+    public static YamlShardingRuleConfiguration 
findYamlShardingRuleConfiguration(final Collection<YamlRuleConfiguration> 
yamlRuleConfigs) {
         Optional<YamlRuleConfiguration> ruleConfig = 
yamlRuleConfigs.stream().filter(each -> each instanceof 
YamlShardingRuleConfiguration).findFirst();
         Preconditions.checkState(ruleConfig.isPresent(), "No available 
sharding rule.");
-        return new 
ShardingRuleConfigurationYamlSwapper().swapToObject((YamlShardingRuleConfiguration)
 ruleConfig.get());
+        return (YamlShardingRuleConfiguration) ruleConfig.get();
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
index 02a7b6824f6..7cdad2284ff 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/data/pipeline/datasource/creator/ShardingSpherePipelineDataSourceCreator.java
@@ -20,17 +20,18 @@ package 
org.apache.shardingsphere.driver.data.pipeline.datasource.creator;
 import 
org.apache.shardingsphere.data.pipeline.api.datasource.config.impl.ShardingSpherePipelineDataSourceConfiguration;
 import 
org.apache.shardingsphere.data.pipeline.core.datasource.creator.PipelineDataSourceCreator;
 import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
-import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlShardingSphereAlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.YamlDataSourceConfigurationSwapper;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperEngine;
+import 
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationConverter;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 
 /**
@@ -41,11 +42,12 @@ public final class ShardingSpherePipelineDataSourceCreator 
implements PipelineDa
     @Override
     public DataSource createPipelineDataSource(final Object 
pipelineDataSourceConfig) throws SQLException {
         YamlRootConfiguration rootConfig = (YamlRootConfiguration) 
pipelineDataSourceConfig;
-        ShardingRuleConfiguration shardingRuleConfig = 
ShardingRuleConfigurationConverter.findAndConvertShardingRuleConfiguration(rootConfig.getRules());
+        YamlShardingRuleConfiguration shardingRuleConfig = 
ShardingRuleConfigurationConverter.findYamlShardingRuleConfiguration(rootConfig.getRules());
         enableRangeQueryForInline(shardingRuleConfig);
         Map<String, DataSource> dataSourceMap = new 
YamlDataSourceConfigurationSwapper().swapToDataSources(rootConfig.getDataSources());
+        Collection<RuleConfiguration> ruleConfigs = new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(rootConfig.getRules());
         try {
-            return 
ShardingSphereDataSourceFactory.createDataSource(rootConfig.getDatabaseName(), 
dataSourceMap, Collections.singletonList(shardingRuleConfig), null);
+            return 
ShardingSphereDataSourceFactory.createDataSource(rootConfig.getDatabaseName(), 
dataSourceMap, ruleConfigs, null);
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
             // CHECKSTYLE:ON
@@ -54,8 +56,8 @@ public final class ShardingSpherePipelineDataSourceCreator 
implements PipelineDa
         }
     }
     
-    private void enableRangeQueryForInline(final ShardingRuleConfiguration 
shardingRuleConfig) {
-        for (ShardingSphereAlgorithmConfiguration each : 
shardingRuleConfig.getShardingAlgorithms().values()) {
+    private void enableRangeQueryForInline(final YamlShardingRuleConfiguration 
shardingRuleConfig) {
+        for (YamlShardingSphereAlgorithmConfiguration each : 
shardingRuleConfig.getShardingAlgorithms().values()) {
             if ("INLINE".equalsIgnoreCase(each.getType())) {
                 each.getProps().put("allow-range-query-with-inline-sharding", 
Boolean.TRUE.toString());
             }

Reply via email to