You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by lu...@apache.org on 2020/09/16 06:40:10 UTC

[shardingsphere] branch master updated: add TCL grammer in pgSQL (#7453)

This is an automated email from the ASF dual-hosted git repository.

lujingshang 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 18177f0  add TCL grammer in pgSQL (#7453)
18177f0 is described below

commit 18177f0694b0f0092f9e2550449f4fe3367527fc
Author: cao biao <10...@qq.com>
AuthorDate: Wed Sep 16 14:39:53 2020 +0800

    add TCL grammer in pgSQL (#7453)
---
 .../main/antlr4/imports/postgresql/DMLStatement.g4 | 11 ------
 .../antlr4/imports/postgresql/StoreProcedure.g4    | 11 +++++-
 .../main/antlr4/imports/postgresql/TCLStatement.g4 | 43 ++++++++++++++++++----
 .../main/resources/case/tcl/begin-transaction.xml  |  1 +
 .../src/main/resources/case/tcl/commit.xml         |  1 +
 .../src/main/resources/case/tcl/rollback.xml       |  1 +
 .../src/main/resources/sql/supported/tcl/tcl.xml   | 15 +++++---
 7 files changed, 57 insertions(+), 26 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
index 854f68a..d5cfcfe 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/DMLStatement.g4
@@ -433,17 +433,6 @@ havingClause
     : HAVING aExpr
     ;
 
-call
-    : CALL funcName LP_ callClauses? RP_
-    ;
-
-callClauses
-    : (ALL | DISTINCT)? funcArgList sortClause?
-    | VARIADIC funcArgExpr sortClause
-    | funcArgList COMMA_ VARIADIC funcArgExpr sortClause
-    | ASTERISK_
-    ;
-
 doStatement
     : DO dostmtOptList
     ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/StoreProcedure.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/StoreProcedure.g4
index 685a33e..3af2d74 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/StoreProcedure.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/StoreProcedure.g4
@@ -17,8 +17,15 @@
 
 grammar StoreProcedure;
 
-import Keyword;
+import Keyword, BaseRule;
 
 call
-    : CALL 
+    : CALL funcName LP_ callClauses? RP_
+    ;
+
+callClauses
+    : (ALL | DISTINCT)? funcArgList sortClause?
+    | VARIADIC funcArgExpr sortClause
+    | funcArgList COMMA_ VARIADIC funcArgExpr sortClause
+    | ASTERISK_
     ;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/TCLStatement.g4 b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/TCLStatement.g4
index 3b7cb07..5285c87 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/TCLStatement.g4
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/antlr4/imports/postgresql/TCLStatement.g4
@@ -25,21 +25,50 @@ setTransaction
     ;
 
 beginTransaction
-    : BEGIN | START TRANSACTION
+    : BEGIN (WORK | TRANSACTION)? transactionModeList?
     ;
 
 commit
-    : COMMIT
-    ;
-
-rollback
-    : ROLLBACK
+    : COMMIT (WORK | TRANSACTION)? (AND (NO)? CHAIN)?
     ;
 
 savepoint
-    : SAVEPOINT
+    : SAVEPOINT colId
     ;
 
 abort
     : ABORT (WORK | TRANSACTION)? (AND (NO)? CHAIN)?
     ;
+
+startTransaction
+    : START TRANSACTION transactionModeList?
+    ;
+
+end
+    : END (WORK | TRANSACTION)? (AND (NO)? CHAIN)?
+    ;
+
+rollback
+    : ROLLBACK (WORK | TRANSACTION)? (AND (NO)? CHAIN)?
+    ;
+
+releaseSavepoint
+    : RELEASE SAVEPOINT? colId
+    ;
+
+rollbackToSavepoint
+    : ROLLBACK (WORK | TRANSACTION)? TO SAVEPOINT? colId
+    ;
+
+prepareTransaction
+    : PREPARE TRANSACTION STRING_
+    ;
+
+commitPrepared
+    : COMMIT PREPARED STRING_
+    ;
+
+rollbackPrepared
+    : ROLLBACK PREPARED STRING_
+    ;
+
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/begin-transaction.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/begin-transaction.xml
index dc6176f..1aa6df5 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/begin-transaction.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/begin-transaction.xml
@@ -22,4 +22,5 @@
     <begin-transaction sql-case-id="beginWithName" />
     <begin-transaction sql-case-id="beginReadCommitted" />
     <begin-transaction sql-case-id="beginReadOnly" />
+    <begin-transaction sql-case-id="begin_with_transaction_mode" />
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/commit.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/commit.xml
index f07c9b9..94a93c9 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/commit.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/commit.xml
@@ -22,4 +22,5 @@
     <commit sql-case-id="commitWithComment" />
     <commit sql-case-id="commitForce" />
     <commit sql-case-id="commitPrepare" />
+    <commit sql-case-id="commit_in_pg" />
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/rollback.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/rollback.xml
index 0d5a11a..887d0f8 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/rollback.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/case/tcl/rollback.xml
@@ -22,4 +22,5 @@
     <rollback sql-case-id="rollbackToSavepoint" />
     <rollback sql-case-id="rollbackForce" />
     <rollback sql-case-id="rollbackPrepare" />
+    <rollback sql-case-id="rollback_in_pg" />
 </sql-parser-test-cases>
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/tcl/tcl.xml b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/tcl/tcl.xml
index c75a3ca..61e8eb4 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/tcl/tcl.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/resources/sql/supported/tcl/tcl.xml
@@ -18,16 +18,16 @@
 
 <sql-cases db-types="MySQL">
     <sql-case id="setTransaction" value="SET TRANSACTION ISOLATION LEVEL REPEATABLE READ" db-types="MySQL,Oracle,PostgreSQL,SQLServer" />
-    <sql-case id="commit" value="COMMIT" db-types="MySQL,Oracle,SQLServer" />
+    <sql-case id="commit" value="COMMIT" db-types="MySQL,Oracle,SQLServer,PostgreSQL" />
     <sql-case id="commitWithName" value="COMMIT TRANSACTION transaction1" db-types="SQLServer" />
     <sql-case id="commitWithComment" value="COMMIT COMMENT 'comment1'" db-types="Oracle" />
     <sql-case id="commitForce" value="COMMIT FORCE 'transaction1'" db-types="Oracle" />
     <sql-case id="rollback" value="ROLLBACK" db-types="MySQL,Oracle,PostgreSQL,SQLServer" />
     <sql-case id="rollbackWithName" value="ROLLBACK TRANSACTION transaction1" db-types="SQLServer" />
     <sql-case id="rollbackForce" value="ROLLBACK FORCE 'transaction1'" db-types="Oracle" />
-    <sql-case id="savepoint" value="SAVEPOINT savepoint1" db-types="MySQL" />
-    <sql-case id="begin" value="BEGIN" db-types="MySQL" />
-    <sql-case id="beginTransaction" value="BEGIN TRANSACTION" db-types="SQLServer" />
+    <sql-case id="savepoint" value="SAVEPOINT savepoint1" db-types="MySQL,PostgreSQL" />
+    <sql-case id="begin" value="BEGIN" db-types="MySQL,PostgreSQL" />
+    <sql-case id="beginTransaction" value="BEGIN TRANSACTION" db-types="SQLServer,PostgreSQL" />
     <sql-case id="beginWithName" value="BEGIN TRANSACTION transaction1" db-types="SQLServer" />
     <sql-case id="setAutoCommitOn" value="SET AUTOCOMMIT = 1" db-types="MySQL" />
     <sql-case id="setAutoCommitOnWithScope" value="SET @@SESSION.AUTOCOMMIT = ON" db-types="MySQL" />
@@ -41,8 +41,11 @@
     <sql-case id="setTransactionWithName" value="SET TRANSACTION NAME 'comment1'" db-types="Oracle,SQLServer" />
     <sql-case id="beginReadCommitted" value="BEGIN ISOLATION LEVEL READ COMMITTED" db-types="PostgreSQL" />
     <sql-case id="beginReadOnly" value="BEGIN READ ONLY" db-types="PostgreSQL" />
-    <sql-case id="commitPrepare" value="COMMIT PREPARED transaction1" db-types="PostgreSQL" />
-    <sql-case id="rollbackPrepare" value="ROLLBACK PREPARED transaction1" db-types="PostgreSQL" />
+    <sql-case id="commitPrepare" value="COMMIT PREPARED 'transaction1'" db-types="PostgreSQL" />
+    <sql-case id="rollbackPrepare" value="ROLLBACK PREPARED 'transaction1'" db-types="PostgreSQL" />
     <sql-case id="setTransactionSnapshot" value="SET TRANSACTION SNAPSHOT 'snapshot1'" db-types="PostgreSQL" />
     <sql-case id="setSessionTransaction" value="SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL READ COMMITTED" db-types="PostgreSQL" />
+    <sql-case id="commit_in_pg" value="COMMIT TRANSACTION AND NO CHAIN" db-types="PostgreSQL" />
+    <sql-case id="rollback_in_pg" value="ROLLBACK TRANSACTION AND CHAIN" db-types="PostgreSQL" />
+    <sql-case id="begin_with_transaction_mode" value="BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED" db-types="PostgreSQL" />
 </sql-cases>