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>

Reply via email to