You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/02/23 15:13:50 UTC

[shardingsphere] branch master updated: Fix `hint` sharding strategy in DistSQL (#24325)

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 c1faad00299 Fix `hint` sharding strategy in DistSQL (#24325)
c1faad00299 is described below

commit c1faad0029950846c2f383dd35683164b577b381
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Thu Feb 23 23:13:41 2023 +0800

    Fix `hint` sharding strategy in DistSQL (#24325)
    
    * Fix `hint` sharding strategy in DistSQL
    
    * Fix `hint` sharding strategy in DistSQL
---
 .../parser/src/main/antlr4/imports/sharding/RDLStatement.g4      | 2 +-
 .../distsql/parser/core/ShardingDistSQLStatementVisitor.java     | 9 +++++----
 .../distsql/ral/queryable/ConvertYamlConfigurationExecutor.java  | 2 +-
 .../core/src/test/resources/conf/convert/config-sharding.yaml    | 7 +++++++
 .../core/src/test/resources/expected/convert-sharding.yaml       | 1 +
 5 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4 b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
index 5dfdf6974b6..cd7bc8c25aa 100644
--- a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
+++ b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RDLStatement.g4
@@ -136,7 +136,7 @@ shardingAlgorithm
     ;
 
 shardingStrategy
-    : TYPE EQ_ strategyType (COMMA_ shardingColumnDefinition COMMA_ shardingAlgorithm)?
+    : TYPE EQ_ strategyType ((COMMA_ shardingColumnDefinition)? COMMA_ shardingAlgorithm)?
     ;
 
 databaseStrategy
diff --git a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 73d3093311a..0f74dd2b062 100644
--- a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -181,14 +181,14 @@ public final class ShardingDistSQLStatementVisitor extends ShardingDistSQLStatem
     public ASTNode visitCreateDefaultShardingStrategy(final CreateDefaultShardingStrategyContext ctx) {
         ShardingStrategyContext shardingStrategyContext = ctx.shardingStrategy();
         String strategyType = getIdentifierValue(shardingStrategyContext.strategyType());
+        String defaultType = new IdentifierValue(ctx.type.getText()).getValue();
         if ("none".equalsIgnoreCase(strategyType)) {
-            return new CreateDefaultShardingStrategyStatement(null != ctx.ifNotExists(), new IdentifierValue(ctx.type.getText()).getValue(), "none", null, null);
+            return new CreateDefaultShardingStrategyStatement(null != ctx.ifNotExists(), defaultType, "none", null, null);
         }
         AlgorithmSegment algorithmSegment = null != shardingStrategyContext.shardingAlgorithm().algorithmDefinition()
                 ? (AlgorithmSegment) visitAlgorithmDefinition(shardingStrategyContext.shardingAlgorithm().algorithmDefinition())
                 : null;
-        String defaultType = new IdentifierValue(ctx.type.getText()).getValue();
-        String shardingColumn = buildShardingColumn(ctx.shardingStrategy().shardingColumnDefinition());
+        String shardingColumn = null != ctx.shardingStrategy().shardingColumnDefinition() ? buildShardingColumn(ctx.shardingStrategy().shardingColumnDefinition()) : null;
         return new CreateDefaultShardingStrategyStatement(null != ctx.ifNotExists(), defaultType, strategyType, shardingColumn, algorithmSegment);
     }
     
@@ -297,7 +297,8 @@ public final class ShardingDistSQLStatementVisitor extends ShardingDistSQLStatem
             return new ShardingStrategySegment(strategyType, null, null);
         }
         AlgorithmSegment algorithmSegment = null != ctx.shardingAlgorithm().algorithmDefinition() ? (AlgorithmSegment) visitAlgorithmDefinition(ctx.shardingAlgorithm().algorithmDefinition()) : null;
-        return new ShardingStrategySegment(strategyType, buildShardingColumn(ctx.shardingColumnDefinition()), algorithmSegment);
+        String shardingColumn = null != ctx.shardingColumnDefinition() ? buildShardingColumn(ctx.shardingColumnDefinition()) : null;
+        return new ShardingStrategySegment(strategyType, shardingColumn, algorithmSegment);
     }
     
     private Collection<String> getResources(final StorageUnitsContext ctx) {
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 88d7bb5a71b..f2e56e6ff55 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
@@ -343,7 +343,7 @@ public final class ConvertYamlConfigurationExecutor implements QueryableRALExecu
                 result.append(String.format(DistSQLScriptConstants.SHARDING_STRATEGY_COMPLEX, strategyType, type, complexShardingStrategyConfig.getShardingColumns(), algorithmDefinition));
                 break;
             case DistSQLScriptConstants.HINT:
-                result.append(String.format(DistSQLScriptConstants.SHARDING_STRATEGY_HINT, type, algorithmDefinition));
+                result.append(String.format(DistSQLScriptConstants.SHARDING_STRATEGY_HINT, strategyType, type, algorithmDefinition));
                 break;
             case DistSQLScriptConstants.NONE:
                 result.append(String.format(DistSQLScriptConstants.SHARDING_STRATEGY_NONE, strategyType, "none"));
diff --git a/proxy/backend/core/src/test/resources/conf/convert/config-sharding.yaml b/proxy/backend/core/src/test/resources/conf/convert/config-sharding.yaml
index 01959619a0a..5d10544a5a9 100644
--- a/proxy/backend/core/src/test/resources/conf/convert/config-sharding.yaml
+++ b/proxy/backend/core/src/test/resources/conf/convert/config-sharding.yaml
@@ -61,6 +61,9 @@ rules:
        complex:
          shardingColumns: order_id, user_id
          shardingAlgorithmName: t_order_item_inline
+     databaseStrategy:
+       hint:
+         shardingAlgorithmName: t_order_item_hint_inline
      keyGenerateStrategy:
        column: order_item_id
        keyGeneratorName: snowflake
@@ -93,6 +96,10 @@ rules:
      props:
        algorithm-expression: t_order_item_${order_id % 2}
        datetime-lower: "2022-01-01 00:00:00"
+   t_order_item_hint_inline:
+     type: HINT_INLINE
+     props:
+       algorithm-expression: ds_${Integer.valueOf(value) % 2}
 
  keyGenerators:
    snowflake:
diff --git a/proxy/backend/core/src/test/resources/expected/convert-sharding.yaml b/proxy/backend/core/src/test/resources/expected/convert-sharding.yaml
index 0cfec0b4545..609752323a4 100644
--- a/proxy/backend/core/src/test/resources/expected/convert-sharding.yaml
+++ b/proxy/backend/core/src/test/resources/expected/convert-sharding.yaml
@@ -37,6 +37,7 @@ KEY_GENERATE_STRATEGY(COLUMN=order_id, TYPE(NAME='snowflake')),
 AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)
 ), t_order_item (
 DATANODES('ds_${0..1}.t_order_item_${0..1}'),
+DATABASE_STRATEGY(TYPE='hint', SHARDING_ALGORITHM(TYPE(NAME='hint_inline', PROPERTIES('algorithm-expression'='ds_${Integer.valueOf(value) % 2}')))),
 TABLE_STRATEGY(TYPE='complex', SHARDING_COLUMNS=order_id, user_id, SHARDING_ALGORITHM(TYPE(NAME='inline', PROPERTIES('algorithm-expression'='t_order_item_${order_id % 2}', 'datetime-lower'='2022-01-01 00:00:00')))),
 KEY_GENERATE_STRATEGY(COLUMN=order_item_id, TYPE(NAME='snowflake')),
 AUDIT_STRATEGY(TYPE(NAME='dml_sharding_conditions'), ALLOW_HINT_DISABLE=true)