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 08:23:32 UTC

[shardingsphere] branch master updated: Optimize DistSQL for build in algorithms. (#22477)

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 3caf098bb9c Optimize DistSQL for build in algorithms. (#22477)
3caf098bb9c is described below

commit 3caf098bb9c6e1615573e7c73cd1fff4479f3fb6
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Mon Nov 28 21:23:26 2022 +1300

    Optimize DistSQL for build in algorithms. (#22477)
---
 .../main/antlr4/imports/db-discovery/BaseRule.g4   |  6 +++-
 .../main/antlr4/imports/db-discovery/Keyword.g4    |  6 +++-
 .../src/main/antlr4/imports/encrypt/BaseRule.g4    | 11 +++++-
 .../src/main/antlr4/imports/encrypt/Keyword.g4     | 24 +++++++++++++
 .../antlr4/imports/readwrite-splitting/BaseRule.g4 | 15 +++++++-
 .../antlr4/imports/readwrite-splitting/Keyword.g4  | 40 ++++++++++++++++++++++
 test/parser/src/main/resources/case/rdl/create.xml | 31 +++++++++++++++++
 .../main/resources/sql/supported/rdl/create.xml    |  3 ++
 8 files changed, 132 insertions(+), 4 deletions(-)

diff --git a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/BaseRule.g4 b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/BaseRule.g4
index 086ee332f93..20152ffc645 100644
--- a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/BaseRule.g4
+++ b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/BaseRule.g4
@@ -28,7 +28,11 @@ algorithmDefinition
     ;
 
 algorithmTypeName
-    : STRING
+    : STRING | buildInAlgorithmTypeName
+    ;
+
+buildInAlgorithmTypeName
+    : MYSQLMGR
     ;
 
 propertiesDefinition
diff --git a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/Keyword.g4 b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/Keyword.g4
index 1fbaa303620..6f49cc66c74 100644
--- a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/Keyword.g4
+++ b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/Keyword.g4
@@ -17,7 +17,7 @@
 
 lexer grammar Keyword;
 
-import Alphabet;
+import Alphabet, Symbol;
 
 WS
     : [ \t\r\n] + ->skip
@@ -102,3 +102,7 @@ EXISTS
 COUNT
     : C O U N T
     ;
+
+MYSQLMGR
+    : M Y S Q L DOT M G R
+    ;
diff --git a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/BaseRule.g4 b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/BaseRule.g4
index f3bd1e0d4dd..317debf617a 100644
--- a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/BaseRule.g4
+++ b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/BaseRule.g4
@@ -28,7 +28,16 @@ algorithmDefinition
     ;
 
 algorithmTypeName
-    : STRING
+    : buildinAlgorithmTypeName | STRING
+    ;
+
+buildinAlgorithmTypeName
+    : MD5
+    | AES
+    | RC4
+    | SM3
+    | SM4
+    | CHAR_DIGEST_LIKE
     ;
 
 propertiesDefinition
diff --git a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4 b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
index 400a9bb4c77..ab24811f6ce 100644
--- a/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
+++ b/features/encrypt/distsql/parser/src/main/antlr4/imports/encrypt/Keyword.g4
@@ -142,3 +142,27 @@ EXISTS
 COUNT
     : C O U N T
     ;
+
+MD5
+    : M D [5]
+    ;
+
+AES
+    : A E S
+    ;
+
+RC4
+    : R C [4]
+    ;
+
+SM3
+    : S M [3]
+    ;
+
+SM4
+    : S M [4]
+    ;
+
+CHAR_DIGEST_LIKE
+    : C H A R UL_ D I G E S T UL_ L I K E
+    ;
diff --git a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/BaseRule.g4 b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/BaseRule.g4
index 6fb0fee5215..7a20e7b95a8 100644
--- a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/BaseRule.g4
+++ b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/BaseRule.g4
@@ -28,7 +28,20 @@ algorithmDefinition
     ;
 
 algorithmTypeName
-    : STRING
+    : STRING | buildInAlgorithmTypeName
+    ;
+
+buildInAlgorithmTypeName
+    : ROUND_ROBIN
+    | RANDOM
+    | WEIGHT
+    | TRANSACTION_RANDOM
+    | TRANSACTION_ROUND_ROBIN
+    | TRANSACTION_WEIGHT
+    | FIXED_REPLICA_RANDOM
+    | FIXED_REPLICA_ROUND_ROBIN
+    | FIXED_REPLICA_WEIGHT
+    | FIXED_PRIMARY
     ;
 
 propertiesDefinition
diff --git a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/Keyword.g4 b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/Keyword.g4
index bd3aff17c66..5b9ce7fab0a 100644
--- a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/Keyword.g4
+++ b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/Keyword.g4
@@ -139,3 +139,43 @@ TRUE
 FALSE
     : F A L S E
     ;
+
+ROUND_ROBIN
+    : R O U N D UL_ R O B I N
+    ;
+
+RANDOM
+    : R A N D O M
+    ;
+
+WEIGHT
+    : W E I G H T
+    ;
+
+TRANSACTION_RANDOM
+    : T R A N S A C T I O N UL_ R A N D O M
+    ;
+
+TRANSACTION_ROUND_ROBIN
+    : T R A N S A C T I O N UL_ R O U N D UL_ R O B I N
+    ;
+
+TRANSACTION_WEIGHT
+    : T R A N S A C T I O N UL_ W E I G H T
+    ;
+
+FIXED_REPLICA_RANDOM
+    : F I X E D UL_ R E P L I C A UL_ R A N D O M
+    ;
+
+FIXED_REPLICA_ROUND_ROBIN
+    : F I X E D UL_ R E P L I C A UL_ R O U N D UL_ R O B I N
+    ;
+
+FIXED_REPLICA_WEIGHT
+    : F I X E D UL_ R E P L I C A UL_ W E I G H T
+    ;
+
+FIXED_PRIMARY
+    : F I X E D UL_ P R I M A R Y
+    ;
diff --git a/test/parser/src/main/resources/case/rdl/create.xml b/test/parser/src/main/resources/case/rdl/create.xml
index fe847e08950..ab0175f6f13 100644
--- a/test/parser/src/main/resources/case/rdl/create.xml
+++ b/test/parser/src/main/resources/case/rdl/create.xml
@@ -490,4 +490,35 @@
             <key-generate-strategy algorithm-name="snowflake" />
         </rule>
     </create-sharding-table-rule>
+
+    <create-encrypt-rule sql-case-id="create-encrypt-rule-without-quote-on-build-in-algorithm-type-name">
+        <rule name="t_encrypt" query-with-cipher-column="true">
+            <column name="user_id" plain-column="user_plain" cipher-column="user_cipher">
+                <encryptor algorithm-name="AES">
+                    <property key="aes-key-value" value="123456abc" />
+                </encryptor>
+            </column>
+            <column name="order_id" cipher-column="order_cipher">
+                <encryptor algorithm-name="MD5" />
+            </column>
+        </rule>
+    </create-encrypt-rule>
+
+    <create-readwrite-splitting-rule sql-case-id="create-readwrite-splitting-rule-without-quote-on-build-in-algorithm-type-name">
+        <rule name="ms_group_0" write-data-source="write_ds" load-balancer="RANDOM">
+            <read-data-source>read_ds_0</read-data-source>
+            <read-data-source>read_ds_1</read-data-source>
+        </rule>
+    </create-readwrite-splitting-rule>
+
+    <create-database-discovery-definition-rule sql-case-id="create-db-discovery-rule-without-quote-on-build-in-db-discovery-type-name">
+        <rule rule-name="db_discovery_group_0" type="MYSQL.MGR">
+            <data-source>ds_0</data-source>
+            <data-source>ds_1</data-source>
+            <discovery-type algorithm-name="MYSQL.MGR">
+                <property key="group-name" value="92504d5b-6dec" />
+            </discovery-type>
+            <property key="keep-alive-cron" value="0/5 * * * * ?" />
+        </rule>
+    </create-database-discovery-definition-rule>
 </sql-parser-test-cases>
diff --git a/test/parser/src/main/resources/sql/supported/rdl/create.xml b/test/parser/src/main/resources/sql/supported/rdl/create.xml
index 5aecdc3ad3b..5f8a461a56f 100644
--- a/test/parser/src/main/resources/sql/supported/rdl/create.xml
+++ b/test/parser/src/main/resources/sql/supported/rdl/create.xml
@@ -61,4 +61,7 @@
     <sql-case id="create-sharding-auditor" value="CREATE SHARDING AUDITOR sharding_key_required_auditor(TYPE(NAME='DML_SHARDING_CONDITIONS'))" db-types="ShardingSphere" />
     <sql-case id="single-register-migration-source-storage-unit" value="REGISTER MIGRATION SOURCE STORAGE UNIT ds_0 (URL='jdbc:mysql://127.0.0.1:3306/test0',USER='ROOT',PASSWORD='123456');" db-types="ShardingSphere" />
     <sql-case id="create-sharding-table-rule-without-quote-on-keyword" value="CREATE SHARDING TABLE RULE t_order_item (DATANODES('ds_${0..1}.t_order_item_${0..1}'), DATABASE_STRATEGY(TYPE=standard,SHARDING_COLUMN=user_id,SHARDING_ALGORITHM(TYPE(NAME=inline,PROPERTIES('algorithm-expression'='ds_${user_id % 2}')))), TABLE_STRATEGY(TYPE=standard,SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME=inline,PROPERTIES('algorithm-expression'='t_order_item_${order_id % 2}')))), KEY_GENERATE_STR [...]
+    <sql-case id="create-encrypt-rule-without-quote-on-build-in-algorithm-type-name" value="CREATE ENCRYPT RULE t_encrypt (COLUMNS((NAME=user_id,PLAIN=user_plain,CIPHER=user_cipher,TYPE(NAME=AES,PROPERTIES('aes-key-value'='123456abc'))), (NAME=order_id, CIPHER =order_cipher,TYPE(NAME=MD5))),QUERY_WITH_CIPHER_COLUMN=true);" db-types="ShardingSphere" />
+    <sql-case id="create-readwrite-splitting-rule-without-quote-on-build-in-algorithm-type-name" value="CREATE READWRITE_SPLITTING RULE ms_group_0 (WRITE_STORAGE_UNIT=write_ds, READ_STORAGE_UNITS(read_ds_0,read_ds_1), TYPE(NAME=RANDOM));" db-types="ShardingSphere" />
+    <sql-case id="create-db-discovery-rule-without-quote-on-build-in-db-discovery-type-name" value="CREATE DB_DISCOVERY RULE db_discovery_group_0 (STORAGE_UNITS(ds_0, ds_1), TYPE(NAME=MYSQL.MGR,PROPERTIES('group-name'='92504d5b-6dec')),HEARTBEAT(PROPERTIES('keep-alive-cron'='0/5 * * * * ?')));" db-types="ShardingSphere" />
 </sql-cases>