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)