This is an automated email from the ASF dual-hosted git repository.
niuzihao 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 a74cdc16c45 Support Create Trigger with System Trigger and Immediate
Statement (#29643)
a74cdc16c45 is described below
commit a74cdc16c45911ac9e8667f613d1361750d5b81c
Author: ilyas ahsan <[email protected]>
AuthorDate: Thu Jan 4 15:34:07 2024 +0700
Support Create Trigger with System Trigger and Immediate Statement (#29643)
* Support Create Trigger with System Trigger and Immediate Statement
Add new Line
* Rename several functions
* Update PLSQL.g4
Remove semicolon
---
.../oracle/src/main/antlr4/imports/oracle/PLSQL.g4 | 22 ++++++++++++++++++++--
.../src/main/resources/case/ddl/create-trigger.xml | 1 +
.../resources/sql/supported/ddl/create-trigger.xml | 7 +++++++
3 files changed, 28 insertions(+), 2 deletions(-)
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 b9093f9eb94..351b2523c46 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
@@ -90,6 +90,7 @@ statement
| gotoStatement
| ifStatement
| nullStatement
+ | executeImmediateStatement
| openStatement
| openForStatement
| pipeRowStatement
@@ -581,10 +582,10 @@ dmlEventElement
;
systemTrigger
- : (BEFORE | AFTER | INSTEAD OF) (ddlEventTrigger (OR ddlEventTrigger)*) ON
(PLUGGABLE? DATABASE) body
+ : (BEFORE | AFTER | INSTEAD OF) (ddlEvent (OR ddlEvent)* | databaseEvent
(OR databaseEvent)*) ON ((PLUGGABLE? DATABASE) | (schemaName DOT_)? SCHEMA) body
;
-ddlEventTrigger
+ddlEvent
: ALTER
| ANALYZE
| ASSOCIATE STATISTICS
@@ -610,3 +611,20 @@ ddlEventTrigger
| SCHEMA
| FOLLOWS
;
+
+databaseEvent
+ : AFTER STARTUP
+ | BEFORE SHUTDOWN
+ | AFTER DB_ROLE_CHANGE
+ | AFTER SERVERERROR
+ | AFTER LOGON
+ | BEFORE LOGOFF
+ | AFTER SUSPEND
+ | AFTER CLONE
+ | BEFORE UNPLUG
+ | (BEFORE | AFTER) SET CONTAINER
+ ;
+
+executeImmediateStatement
+ : EXECUTE IMMEDIATE stringLiterals
+ ;
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 3975106e08f..92919d9f9fd 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
@@ -25,4 +25,5 @@
<create-trigger sql-case-id="create_trigger_with_create_view" />
<create-trigger sql-case-id="create_trigger_with_dml_event_clause" />
<create-trigger sql-case-id="create_trigger_with_body" />
+ <create-trigger
sql-case-id="create_trigger_with_execute_immediate_statement" />
</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 44de7b32d33..8335e1c2593 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
@@ -38,4 +38,11 @@
NULL;
END IF;
END;" db-types="Oracle" />
+ <sql-case id="create_trigger_with_execute_immediate_statement"
value="CREATE TRIGGER adg_logon_sync_trigger
+ AFTER LOGON ON user.schema
+ begin
+ if (SYS_CONTEXT('USERENV', 'DATABASE_ROLE') IN ('PHYSICAL
STANDBY')) then
+ execute immediate 'alter session sync with primary';
+ end if;
+ end;" db-types="Oracle" />
</sql-cases>