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

duanzhengqiang 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 c69e3469365 Enhance the support for Oracle SQL parsing in 
ShardingSphere  (#30808)
c69e3469365 is described below

commit c69e3469365a830a200628b4a765189acf86b1c4
Author: zhuruixuan <[email protected]>
AuthorDate: Tue Apr 9 15:31:05 2024 +0800

    Enhance the support for Oracle SQL parsing in ShardingSphere  (#30808)
    
    * Add sql
    
    * Add Case
    
    * Change PLSQl
---
 .../oracle/src/main/antlr4/imports/oracle/PLSQL.g4 |  6 +++++-
 .../src/main/resources/case/ddl/create-trigger.xml |  1 +
 .../resources/sql/supported/ddl/create-trigger.xml | 23 ++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
index da97943a084..23ead1aba08 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
@@ -607,7 +607,7 @@ dmlEventElement
     ;
 
 systemTrigger
-    : (BEFORE | AFTER | INSTEAD OF) (ddlEvent (OR ddlEvent)* | databaseEvent 
(OR databaseEvent)*) ON ((PLUGGABLE? DATABASE) | (schemaName DOT_)? SCHEMA) 
triggerBody
+    : (BEFORE | AFTER | INSTEAD OF) (ddlEvent (OR ddlEvent)* | databaseEvent 
(OR databaseEvent)* | dmlEvent) ON ((PLUGGABLE? DATABASE) | (schemaName DOT_)? 
SCHEMA?) tableName? triggerBody
     ;
 
 ddlEvent
@@ -650,6 +650,10 @@ databaseEvent
     | (BEFORE | AFTER) SET CONTAINER
     ;
 
+dmlEvent
+    : INSERT
+    ;
+
 triggerBody
     : plsqlBlock
     ;
diff --git a/test/it/parser/src/main/resources/case/ddl/create-trigger.xml 
b/test/it/parser/src/main/resources/case/ddl/create-trigger.xml
index 008f55af83b..bb4a6448a97 100644
--- a/test/it/parser/src/main/resources/case/ddl/create-trigger.xml
+++ b/test/it/parser/src/main/resources/case/ddl/create-trigger.xml
@@ -34,4 +34,5 @@
     <create-trigger sql-case-id="create_trigger_with_cascade_4" />
     <create-trigger 
sql-case-id="create_trigger_with_dataManipulationLanguage_statement" />
     <create-trigger sql-case-id="create_trigger_with_exceptionInit_pragma" />
+    <create-trigger sql-case-id="create_trigger_with_dml_event" />
 </sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-trigger.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-trigger.xml
index ad9f328d328..e8dcea02b01 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-trigger.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-trigger.xml
@@ -69,4 +69,27 @@
               Raise_application_error(-20326,'Might not change '
                ||'emp table during Nonworking hours');
           END;" db-types="Oracle"/>
+    <sql-case id="create_trigger_with_dml_event" value="CREATE OR REPLACE 
TRIGGER order_info_insert
+          INSTEAD OF INSERT ON order_info
+          DECLARE
+            duplicate_info EXCEPTION;
+            PRAGMA EXCEPTION_INIT (duplicate_info, -00001);
+          BEGIN
+            INSERT INTO customers
+              (customer_id, cust_last_name, cust_first_name)
+            VALUES (
+            :new.customer_id,
+            :new.cust_last_name,
+            :new.cust_first_name);
+          INSERT INTO orders (order_id, order_date, customer_id)
+          VALUES (
+            :new.order_id,
+            :new.order_date,
+            :new.customer_id);
+          EXCEPTION
+            WHEN duplicate_info THEN
+              RAISE_APPLICATION_ERROR (
+                num=&gt; -20107,
+                msg=&gt; 'Duplicate customer or order ID');
+          END order_info_insert;" db-types="Oracle" />
 </sql-cases>

Reply via email to