From 8167a5d79428a1b48ad1bfcb4fe949e872e8b422 Mon Sep 17 00:00:00 2001 From: Nir Levy <49210967+nirolevy@users.noreply.github.com> Date: Sun, 25 Sep 2022 11:52:40 +0300 Subject: [PATCH] DBZ-5650 Support set statement in mariadb From MariaDB 10.1.2, pre-query variables are supported src: https://mariadb.com/kb/en/set-statement/ --- .../io/debezium/ddl/parser/mysql/generated/MySqlLexer.g4 | 2 +- .../io/debezium/ddl/parser/mysql/generated/MySqlParser.g4 | 7 +++++-- .../src/test/resources/mysql/examples/ddl_create.sql | 6 ++++++ .../src/test/resources/mysql/examples/dml_select.sql | 6 ++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlLexer.g4 b/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlLexer.g4 index c0f711125..d2855fa6f 100644 --- a/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlLexer.g4 +++ b/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlLexer.g4 @@ -232,7 +232,7 @@ WITH: 'WITH'; WRITE: 'WRITE'; XOR: 'XOR'; ZEROFILL: 'ZEROFILL'; - +STATEMENT: 'STATEMENT'; // DATA TYPE Keywords diff --git a/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlParser.g4 b/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlParser.g4 index 8c81d29bc..c0904e86c 100644 --- a/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlParser.g4 +++ b/debezium-ddl-parser/src/main/antlr4/io/debezium/ddl/parser/mysql/generated/MySqlParser.g4 @@ -42,9 +42,9 @@ sqlStatements ; sqlStatement - : ddlStatement | dmlStatement | transactionStatement + : setStatementFor? (ddlStatement | dmlStatement | transactionStatement // setStatementFor is is MariaDB-specific only | replicationStatement | preparedStatement - | administrationStatement | utilityStatement + | administrationStatement | utilityStatement) ; emptyStatement @@ -2827,3 +2827,6 @@ functionNameBase // MariaDB | LASTVAL | NEXTVAL | SETVAL ; + +// MariaDB statements +setStatementFor: SET STATEMENT ID EQUAL_SYMBOL constant (COMMA ID EQUAL_SYMBOL constant)* FOR; // MariaDB-specific only diff --git a/debezium-ddl-parser/src/test/resources/mysql/examples/ddl_create.sql b/debezium-ddl-parser/src/test/resources/mysql/examples/ddl_create.sql index 1ed5cc20e..6b858f6a7 100644 --- a/debezium-ddl-parser/src/test/resources/mysql/examples/ddl_create.sql +++ b/debezium-ddl-parser/src/test/resources/mysql/examples/ddl_create.sql @@ -535,3 +535,9 @@ CREATE SEQUENCE if NOT EXISTS workdb.s2 START=1 CYCLE MINVALUE=10000 MAXVALUE=99 CREATE OR REPLACE SEQUENCE if NOT EXISTS s2 START=100 CACHE 1000; CREATE SEQUENCE `seq_8b4d1cdf-377e-4021-aef3-f7c9846903fc` INCREMENT BY 1 START WITH 1; #end + +#begin +-- From MariaDB 10.1.2, pre-query variables are supported +-- src: https://mariadb.com/kb/en/set-statement/ +SET STATEMENT max_statement_time=60 FOR CREATE TABLE some_table (val int); +#end diff --git a/debezium-ddl-parser/src/test/resources/mysql/examples/dml_select.sql b/debezium-ddl-parser/src/test/resources/mysql/examples/dml_select.sql index 7ff8c5624..096089713 100644 --- a/debezium-ddl-parser/src/test/resources/mysql/examples/dml_select.sql +++ b/debezium-ddl-parser/src/test/resources/mysql/examples/dml_select.sql @@ -213,3 +213,9 @@ FROM ORDER BY amount DESC LIMIT 1) AS max_sale; #end + +#begin +-- From MariaDB 10.1.2, pre-query variables are supported +-- src: https://mariadb.com/kb/en/set-statement/ +SET STATEMENT some_statement=60 FOR SELECT a FROM some_table; +#end