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 aaf1773 Fix exception parsing inline expressions. (#15778)
aaf1773 is described below
commit aaf17737e44c489585c3111685c626fc8cab3246
Author: lanchengx <[email protected]>
AuthorDate: Fri Mar 4 18:53:43 2022 +0800
Fix exception parsing inline expressions. (#15778)
* Fix exception parsing inline expressions.
* Fix exception parsing inline expressions.
---
.../parser/core/ShardingDistSQLStatementVisitor.java | 12 ++++++++----
.../src/main/resources/case/rdl/create.xml | 14 ++++++++++++++
.../src/main/resources/sql/supported/rdl/create.xml | 1 +
3 files changed, 23 insertions(+), 4 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index 595595b..474e9c1 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -370,7 +370,7 @@ public final class ShardingDistSQLStatementVisitor extends
ShardingDistSQLStatem
}
private Collection<String> getDataNodes(final DataNodesContext ctx) {
- return ctx.dataNode().stream().map(each ->
getIdentifierValueWithBracketReserved(each)).collect(Collectors.toCollection(LinkedList::new));
+ return ctx.dataNode().stream().map(each ->
getIdentifierValueForDataNodes(each)).collect(Collectors.toCollection(LinkedList::new));
}
@Override
@@ -385,11 +385,15 @@ public final class ShardingDistSQLStatementVisitor
extends ShardingDistSQLStatem
return new IdentifierValue(context.getText()).getValue();
}
- private String getIdentifierValueWithBracketReserved(final ParseTree
context) {
+ private String getIdentifierValueForDataNodes(final ParseTree context) {
if (null == context) {
return null;
}
- return new IdentifierValue(context.getText(), "[]").getValue();
+ String value = new IdentifierValue(context.getText(),
"[]'").getValue();
+ if (value.startsWith("'")) {
+ return value.substring(1, value.length() - 1);
+ }
+ return value.trim();
}
private Properties getAlgorithmProperties(final AlgorithmDefinitionContext
ctx) {
@@ -471,7 +475,7 @@ public final class ShardingDistSQLStatementVisitor extends
ShardingDistSQLStatem
public ASTNode visitShowUnusedShardingKeyGenerators(final
ShowUnusedShardingKeyGeneratorsContext ctx) {
return new
ShowUnusedShardingKeyGeneratorsStatement(Objects.nonNull(ctx.schemaName()) ?
(SchemaSegment) visit(ctx.schemaName()) : null);
}
-
+
@Override
public ASTNode visitShowShardingTableRulesUsedAlgorithm(final
ShowShardingTableRulesUsedAlgorithmContext ctx) {
return new
ShowShardingTableRulesUsedAlgorithmStatement(getIdentifierValue(ctx.algorithmName()),
Objects.nonNull(ctx.schemaName()) ? (SchemaSegment) visit(ctx.schemaName()) :
null);
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
index 24b79d1..9245a9d 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/rdl/create.xml
@@ -119,6 +119,20 @@
</rule>
</create-sharding-table-rule>
+ <create-sharding-table-rule
sql-case-id="create-sharding-table-rule-with-enum-inline-expression">
+ <rule name="t_order" key-generate-strategy-column="another_id">
+ <data-source>ms_group_${['abc','ac']}.table</data-source>
+ <table-strategy type="standard" sharding-column="user_id"
sharding-algorithm-name="table_inline"></table-strategy>
+ <database-strategy type="standard" sharding-column="order_id"
sharding-algorithm-name="database_inline"></database-strategy>
+ <key-generate-strategy algorithm-name="snowflake" />
+ </rule>
+ <rule name="t_order_item" key-generate-strategy-column="another_id">
+ <data-source>ms_group_${0..1}</data-source>
+ <table-strategy type="standard" sharding-column="user_id"
sharding-algorithm-name="table_inline"></table-strategy>
+ <database-strategy type="standard" sharding-column="order_id"
sharding-algorithm-name="database_inline"></database-strategy>
+ </rule>
+ </create-sharding-table-rule>
+
<create-sharding-table-rule
sql-case-id="create-sharding-table-rule-complex">
<rule name="t_order" key-generate-strategy-column="another_id">
<data-source>ms_group_${0..1}</data-source>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
index 2f19413..898ee54 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/rdl/create.xml
@@ -45,6 +45,7 @@
<distsql-case id="create-default-sharding-database-strategy" value="CREATE
DEFAULT SHARDING DATABASE STRATEGY(TYPE=STANDARD, SHARDING_COLUMN=ORDER_ID,
SHARDING_ALGORITHM=algorithms_name)" />
<distsql-case id="create-default-sharding-strategy-complex" value="CREATE
DEFAULT SHARDING TABLE STRATEGY(TYPE=complex,
SHARDING_COLUMNS=order_id,user_id, SHARDING_ALGORITHM=algorithms_name)" />
<distsql-case id="create-sharding-table-rule" value="CREATE SHARDING TABLE
RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_column = order_id,sharding_algorithm =
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME=snowflake))),t_order_item
(DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_column = order_id,sh [...]
+ <distsql-case id="create-sharding-table-rule-with-enum-inline-expression"
value="CREATE SHARDING TABLE RULE t_order
(DATANODES("ms_group_${['abc','ac']}.table " ),DATABASE_STRATEGY(
TYPE = `standard`,sharding_column = order_id,sharding_algorithm =
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME=snowflake))),t_order_item
(DATANODES('ms_group_${0..1}'),DATABASE_STR [...]
<distsql-case id="create-sharding-table-rule-complex" value="CREATE
SHARDING TABLE RULE t_order (DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY(
TYPE = `complex`,sharding_columns = order_id,user_id,sharding_algorithm =
database_inline),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME=snowflake))),t_order_item
(DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_colu [...]
<distsql-case id="create-sharding-table-rule-with-auto-create-algorithm"
value="CREATE SHARDING TABLE RULE t_order
(DATANODES('ms_group_${0..1}'),DATABASE_STRATEGY( TYPE =
`standard`,sharding_column = order_id,sharding_algorithm
(TYPE(NAME=inline,PROPERTIES('algorithm-expression'='ms_group_${order_id%
2}')))),TABLE_STRATEGY(TYPE = `standard`,sharding_column =
user_id,sharding_algorithm =
table_inline),KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME=snowflake)))"
/>"
<distsql-case id="create-shadow-algorithm" value="CREATE SHADOW ALGORITHM
(simple_note_algorithm, TYPE(NAME=HINT, PROPERTIES('shadow'='true',
'foo'='bar')))" />