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 2022/11/28 14:21:35 UTC

[shardingsphere] branch master updated: Optimize global-rule-distsql (#22485)

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 5954e8805d8 Optimize global-rule-distsql (#22485)
5954e8805d8 is described below

commit 5954e8805d8576c98d60339e078775bdcd629e36
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Tue Nov 29 03:21:28 2022 +1300

    Optimize global-rule-distsql (#22485)
---
 .../src/main/antlr4/imports/traffic/Keyword.g4     | 16 +++++++++++++++
 .../main/antlr4/imports/traffic/RALStatement.g4    | 10 ++++++++-
 .../src/main/antlr4/imports/transaction/Keyword.g4 | 24 ++++++++++++++++++++++
 .../antlr4/imports/transaction/RALStatement.g4     | 12 +++++++++--
 .../src/main/resources/case/ral/updatable.xml      | 15 +++++++++++++-
 .../main/resources/sql/supported/ral/updatable.xml |  4 +++-
 6 files changed, 76 insertions(+), 5 deletions(-)

diff --git a/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/Keyword.g4 b/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/Keyword.g4
index a46575dc48f..c4e25b0a84e 100644
--- a/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/Keyword.g4
+++ b/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/Keyword.g4
@@ -82,3 +82,19 @@ IF
 EXISTS
     : E X I S T S
     ;
+
+SQL_MATCH
+    : S Q L UL_ M A T C H
+    ;
+
+SQL_HINT
+    : S Q L UL_ H I N T
+    ;
+
+RANDOM
+    : R A N D O M
+    ;
+
+ROUND_ROBIN
+    : R O U N D UL_ R O B I N
+    ;
diff --git a/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/RALStatement.g4 b/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/RALStatement.g4
index e76201c1bce..3ae3abafa33 100644
--- a/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/RALStatement.g4
+++ b/kernel/traffic/distsql/parser/src/main/antlr4/imports/traffic/RALStatement.g4
@@ -56,7 +56,15 @@ loadBalancerDefinition
     ;
 
 algorithmTypeName
-    : STRING
+    : buildInTrafficAlgorithmTypeName | buildInLoadBalancerTypeName | STRING
+    ;
+
+buildInTrafficAlgorithmTypeName
+    : SQL_MATCH | SQL_HINT
+    ;
+
+buildInLoadBalancerTypeName
+    : RANDOM | ROUND_ROBIN
     ;
 
 label
diff --git a/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/Keyword.g4 b/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/Keyword.g4
index 6930ae3d436..63bd1439415 100644
--- a/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/Keyword.g4
+++ b/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/Keyword.g4
@@ -54,3 +54,27 @@ NAME
 PROPERTIES
     : P R O P E R T I E S
     ;
+
+LOCAL
+    : L O C A L
+    ;
+
+XA
+    : X A
+    ;
+
+BASE
+    : B A S E
+    ;
+
+ATOMIKOS
+    : A T O M I K O S
+    ;
+
+NARAYANA
+    : N A R A Y A N A
+    ;
+
+BITRONIX
+    : B I T R O N I X
+    ;
diff --git a/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/RALStatement.g4 b/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/RALStatement.g4
index 1187ab34dad..c5b45f78dfe 100644
--- a/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/RALStatement.g4
+++ b/kernel/transaction/distsql/parser/src/main/antlr4/imports/transaction/RALStatement.g4
@@ -36,11 +36,19 @@ providerDefinition
     ;
 
 defaultType
-    : STRING
+    : STRING | buildInDefaultTransactionType
+    ;
+
+buildInDefaultTransactionType
+    : LOCAL | XA | BASE
     ;
 
 providerName
-    : STRING
+    : STRING | buildInProviderTypeName
+    ;
+
+buildInProviderTypeName
+    : ATOMIKOS | NARAYANA | BITRONIX
     ;
 
 propertiesDefinition
diff --git a/test/parser/src/main/resources/case/ral/updatable.xml b/test/parser/src/main/resources/case/ral/updatable.xml
index f30e70ce39d..4a5e351c027 100644
--- a/test/parser/src/main/resources/case/ral/updatable.xml
+++ b/test/parser/src/main/resources/case/ral/updatable.xml
@@ -33,6 +33,7 @@
     </alter-sql-parser-rule>
     <alter-local-transaction-rule sql-case-id="alter-local-transaction-rule" />
     <alter-xa-transaction-rule sql-case-id="alter-xa-transaction-rule" />
+    <alter-xa-transaction-rule sql-case-id="alter-xa-transaction-rule-without-quote-on-build-in-default-type-name-and-provider-type-name" />
    
     <create-traffic-rule sql-case-id="create-traffic-rule">
         <rule name="sql_match_traffic">
@@ -61,7 +62,19 @@
     <drop-traffic-rule sql-case-id="drop-traffic-rule">
         <name>rule_name</name>
     </drop-traffic-rule>
-    
+
+    <create-traffic-rule sql-case-id="create-traffic-rule-without-quote-on-build-in-traffic-algorithm-type-name-and-load-balancer-type-name">
+        <rule name="sql_match_traffic">
+            <label>OLTP</label>
+            <traffic-algorithm algorithm-name="SQL_MATCH">
+                <property key="sql" value="SELECT * FROM t_order WHERE order_id = ?; UPDATE t_order SET order_id = ?;" />
+            </traffic-algorithm>
+            <load-balancer algorithm-name="RANDOM">
+                <property key="key" value="value" />
+            </load-balancer>
+        </rule>
+    </create-traffic-rule>
+
     <alter-compute-node sql-case-id="alter-compute-node-xa-recovery-nodes" instance-id="instance_xa_recovery" key="XA_RECOVERY_NODES" value="instance_1" />
     <alter-compute-node sql-case-id="alter-compute-node-xa-recovery-nodes-with-multiple-values" instance-id="instance_xa_recovery_multiple" key="XA_RECOVERY_NODES" value="instance_1,instance_2" />
     
diff --git a/test/parser/src/main/resources/sql/supported/ral/updatable.xml b/test/parser/src/main/resources/sql/supported/ral/updatable.xml
index 8e5bca21a87..bcbe2fba589 100644
--- a/test/parser/src/main/resources/sql/supported/ral/updatable.xml
+++ b/test/parser/src/main/resources/sql/supported/ral/updatable.xml
@@ -28,10 +28,12 @@
     <sql-case id="alter-sql-parser-rule" value="ALTER SQL_PARSER RULE SQL_COMMENT_PARSE_ENABLE=false,PARSE_TREE_CACHE(INITIAL_CAPACITY=10, MAXIMUM_SIZE=11,CONCURRENCY_LEVEL=1), SQL_STATEMENT_CACHE(INITIAL_CAPACITY=11, MAXIMUM_SIZE=11,CONCURRENCY_LEVEL=100)" db-types="ShardingSphere" />
     <sql-case id="alter-local-transaction-rule" value="ALTER TRANSACTION RULE (DEFAULT='LOCAL')" db-types="ShardingSphere" />
     <sql-case id="alter-xa-transaction-rule" value="ALTER TRANSACTION RULE(DEFAULT='XA', TYPE(NAME='Atomikos'))" db-types="ShardingSphere" />
-    
+    <sql-case id="alter-xa-transaction-rule-without-quote-on-build-in-default-type-name-and-provider-type-name" value="ALTER TRANSACTION RULE(DEFAULT=XA, TYPE(NAME=Atomikos))" db-types="ShardingSphere" />
+
     <sql-case id="create-traffic-rule" value="CREATE TRAFFIC RULE sql_match_traffic (LABELS(OLTP),TRAFFIC_ALGORITHM(TYPE(NAME='SQL_MATCH',PROPERTIES('sql' = 'SELECT * FROM t_order WHERE order_id = ?; UPDATE t_order SET order_id = ?;'))), LOAD_BALANCER(TYPE(NAME='RANDOM', PROPERTIES('key'='value'))) )" db-types="ShardingSphere" />
     <sql-case id="alter-traffic-rule" value="ALTER TRAFFIC RULE sql_match_traffic (LABELS(OLTP),TRAFFIC_ALGORITHM(TYPE(NAME='SQL_MATCH',PROPERTIES('sql' = 'SELECT * FROM t_order WHERE order_id = ?; UPDATE t_order SET order_id = ?;'))), LOAD_BALANCER(TYPE(NAME='RANDOM', PROPERTIES('key'='value'))) )" db-types="ShardingSphere" />
     <sql-case id="drop-traffic-rule" value="DROP TRAFFIC RULE rule_name" db-types="ShardingSphere" />
+    <sql-case id="create-traffic-rule-without-quote-on-build-in-traffic-algorithm-type-name-and-load-balancer-type-name" value="CREATE TRAFFIC RULE sql_match_traffic (LABELS(OLTP),TRAFFIC_ALGORITHM(TYPE(NAME=SQL_MATCH,PROPERTIES('sql' = 'SELECT * FROM t_order WHERE order_id = ?; UPDATE t_order SET order_id = ?;'))), LOAD_BALANCER(TYPE(NAME=RANDOM, PROPERTIES('key'='value'))) )" db-types="ShardingSphere" />
     
     <sql-case id="alter-compute-node-xa-recovery-nodes" value="ALTER COMPUTE NODE instance_xa_recovery SET XA_RECOVERY_NODES='instance_1'" db-types="ShardingSphere" />
     <sql-case id="alter-compute-node-xa-recovery-nodes-with-multiple-values" value="ALTER COMPUTE NODE instance_xa_recovery_multiple SET XA_RECOVERY_NODES='instance_1,instance_2'" db-types="ShardingSphere" />