Skip to content

Commit f75e297

Browse files
authored
fix(mysql): support IF EXISTS/IF NOT EXISTS in trigger/revoke syntax (#60)
* feat(snowflake): sync upstream grammar and fix task scripting parse * fix(mysql): support IF EXISTS/IF NOT EXISTS revoke/trigger forms * test(mysql): move IF EXISTS fixture SQL into existing example files
1 parent 36e79b3 commit f75e297

File tree

8 files changed

+10833
-10572
lines changed

8 files changed

+10833
-10572
lines changed

mysql/MySQLParser.g4

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ viewSuid:
700700
;
701701

702702
createTrigger:
703-
definerClause? TRIGGER_SYMBOL triggerName timing = (BEFORE_SYMBOL | AFTER_SYMBOL) event = (
703+
definerClause? TRIGGER_SYMBOL ifNotExists? triggerName timing = (BEFORE_SYMBOL | AFTER_SYMBOL) event = (
704704
INSERT_SYMBOL
705705
| UPDATE_SYMBOL
706706
| DELETE_SYMBOL
@@ -1883,15 +1883,19 @@ renameUser:
18831883
;
18841884

18851885
revoke:
1886-
REVOKE_SYMBOL (
1886+
REVOKE_SYMBOL ifExists? (
18871887
roleOrPrivilegesList FROM_SYMBOL userList
18881888
| roleOrPrivilegesList onTypeTo FROM_SYMBOL userList
18891889
| ALL_SYMBOL PRIVILEGES_SYMBOL? (
18901890
ON_SYMBOL aclType? grantIdentifier
18911891
| COMMA_SYMBOL GRANT_SYMBOL OPTION_SYMBOL FROM_SYMBOL userList
18921892
)
18931893
| PROXY_SYMBOL ON_SYMBOL user FROM_SYMBOL userList
1894-
)
1894+
) ignoreUnknownUser?
1895+
;
1896+
1897+
ignoreUnknownUser:
1898+
IGNORE_SYMBOL UNKNOWN_SYMBOL USER_SYMBOL
18951899
;
18961900

18971901
onTypeTo: // Optional, starting with 8.0.1.

mysql/examples/ddl_create.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,7 @@ create definer = current_user() trigger trg_my2 after insert on test.t2 for each
317317
-- Create trigger 3
318318
-- delimiter //
319319
CREATE TRIGGER mask_private_data BEFORE INSERT ON users FOR EACH ROW BEGIN SET NEW.phone = CONCAT('555', NEW.id); END; -- //-- delimiter ;
320+
CREATE TRIGGER IF NOT EXISTS `my_trigger` BEFORE INSERT ON `my_table` FOR EACH ROW BEGIN SET NEW.my_col = CONCAT(NEW.mycol, NEW.id); END;
320321
#end
321322
#begin
322323
-- Create trigger 4
@@ -650,4 +651,4 @@ WITH my_values(val1, val2) AS (
650651
)
651652
SELECT v.val1, v.val2 FROM my_values v;
652653
#end
653-
;
654+
;

mysql/examples/grant.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ GRANT FLUSH_OPTIMIZER_COSTS, FLUSH_STATUS, FLUSH_TABLES, FLUSH_USER_RESOURCES, P
9898
REVOKE reader FROM 'mysqluser'@'localhost';
9999
REVOKE reader FROM topreader;
100100
REVOKE `cloudsqlsuperuser`@`%` FROM `sarmonitoring`@`10.90.29.%`;
101+
REVOKE IF EXISTS SELECT ON test.t1 FROM jerry@localhost;
102+
REVOKE IF EXISTS Bogus ON test FROM jerry@localhost IGNORE UNKNOWN USER;
101103
-- Set Role
102104
SET ROLE DEFAULT;
103105
SET ROLE 'role1', 'role2';
@@ -107,4 +109,4 @@ SET ROLE ALL EXCEPT 'role1', 'role2';
107109
SET DEFAULT ROLE 'admin', 'developer' TO 'joe'@'10.0.0.1';
108110
SET DEFAULT ROLE `admin`@'%' to `dt_user`@`%`;
109111
-- MySQL on Amazon RDS
110-
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA ON *.* TO 'debezium_user'@'127.0.0.1';
112+
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA ON *.* TO 'debezium_user'@'127.0.0.1';

mysql/mysql_parser.go

Lines changed: 10802 additions & 10567 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mysql/mysqlparser_base_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mysql/mysqlparser_base_visitor.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mysql/mysqlparser_listener.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mysql/mysqlparser_visitor.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)