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=> -20107,
+ msg=> 'Duplicate customer or order ID');
+ END order_info_insert;" db-types="Oracle" />
</sql-cases>