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(&quot;ms_group_${['abc','ac']}.table &quot; ),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')))" />

Reply via email to