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 45fad86141c Support Create Trigger with Assignment Statement (#29654)
45fad86141c is described below
commit 45fad86141c356e9fa8982c3ea354aa35786a73d
Author: ilyas ahsan <[email protected]>
AuthorDate: Fri Jan 5 09:41:26 2024 +0700
Support Create Trigger with Assignment Statement (#29654)
add new line
---
.../dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4 | 11 +++++------
test/it/parser/src/main/resources/case/ddl/create-trigger.xml | 1 +
.../src/main/resources/sql/supported/ddl/create-trigger.xml | 7 ++++++-
3 files changed, 12 insertions(+), 7 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 351b2523c46..315be7fc6b5 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,7 +90,6 @@ statement
| gotoStatement
| ifStatement
| nullStatement
- | executeImmediateStatement
| openStatement
| openForStatement
| pipeRowStatement
@@ -119,7 +118,7 @@ assignStatementTarget
;
placeholder
- : COLON_ hostVariable=name (COLON_ indicatorVariable=name)?
+ : COLON_ hostVariable=name (DOT_ columnName)? (COLON_
indicatorVariable=name)?
;
// TODO PL/SQL grammar more than expr
@@ -570,7 +569,7 @@ plsqlTriggerSource
;
simpleDmlTrigger
- : (BEFORE | AFTER) dmlEventClause
+ : (BEFORE | AFTER) dmlEventClause (FOR EACH ROW)? triggerBody
;
dmlEventClause
@@ -582,7 +581,7 @@ dmlEventElement
;
systemTrigger
- : (BEFORE | AFTER | INSTEAD OF) (ddlEvent (OR ddlEvent)* | databaseEvent
(OR databaseEvent)*) ON ((PLUGGABLE? DATABASE) | (schemaName DOT_)? SCHEMA) body
+ : (BEFORE | AFTER | INSTEAD OF) (ddlEvent (OR ddlEvent)* | databaseEvent
(OR databaseEvent)*) ON ((PLUGGABLE? DATABASE) | (schemaName DOT_)? SCHEMA)
triggerBody
;
ddlEvent
@@ -625,6 +624,6 @@ databaseEvent
| (BEFORE | AFTER) SET CONTAINER
;
-executeImmediateStatement
- : EXECUTE IMMEDIATE stringLiterals
+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 92919d9f9fd..5ca32c2a1c3 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
@@ -26,4 +26,5 @@
<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" />
+ <create-trigger sql-case-id="create_trigger_with_assignment_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 8335e1c2593..aafdd9e562a 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
@@ -28,7 +28,7 @@
SELECT EVENTDATA()" db-types="SQLServer" />
<sql-case id="create_trigger_with_create_view" value="CREATE TRIGGER tr1
BEFORE INSERT ON t1 FOR EACH ROW BEGIN create view v1 as select 1; END"
db-types="MySQL" />
- <sql-case id="create_trigger_with_dml_event_clause" value="CREATE TRIGGER
scott.emp_permit_changes BEFORE DELETE OR INSERT OR UPDATE ON scott.emp"
db-types="Oracle" />
+ <sql-case id="create_trigger_with_dml_event_clause" value="CREATE TRIGGER
scott.emp_permit_changes BEFORE DELETE OR INSERT OR UPDATE ON scott.emp BEGIN
IF (IS_SERVERERROR (1017)) THEN NULL; ELSE NULL; END IF; END;"
db-types="Oracle" />
<sql-case id="create_trigger_with_body" value="CREATE TRIGGER log_errors
AFTER SERVERERROR ON DATABASE
BEGIN
@@ -45,4 +45,9 @@
execute immediate 'alter session sync with primary';
end if;
end;" db-types="Oracle" />
+ <sql-case id="create_trigger_with_assignment_statement" value="CREATE
TRIGGER Contacts_BI
+ BEFORE INSERT ON Contacts FOR EACH ROW
+ BEGIN
+ :NEW.ID := Contacts_Seq.NEXTVAL;
+ END;" db-types="Oracle" />
</sql-cases>