From 30102b9fa4baf9b68b32bf260c367803ffd95856 Mon Sep 17 00:00:00 2001 From: Jochen Schalanda Date: Wed, 5 Apr 2023 15:51:08 +0200 Subject: [PATCH] DBZ-6316 Add support for Table Value Constructors Refs https://github.com/antlr/grammars-v4/pull/3076 Refs https://github.com/antlr/grammars-v4/pull/3077 --- .../ddl/parser/mysql/generated/MySqlParser.g4 | 9 ++++++++- .../test/resources/mysql/examples/ddl_create.sql | 13 ++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) 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 a52304e76..e7006f290 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 @@ -74,7 +74,7 @@ dmlStatement : selectStatement | insertStatement | updateStatement | deleteStatement | replaceStatement | callStatement | loadDataStatement | loadXmlStatement | doStatement - | handlerStatement + | handlerStatement | valuesStatement ; transactionStatement @@ -953,6 +953,13 @@ selectStatement | querySpecificationNointo (',' lateralStatement)+ #withLateralStatement ; +// https://dev.mysql.com/doc/refman/8.0/en/values.html +valuesStatement + : VALUES + '(' expressionsWithDefaults? ')' + (',' '(' expressionsWithDefaults? ')')* + ; + updateStatement : singleUpdateStatement | multipleUpdateStatement ; 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 a6ced5ff0..13f947cc6 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 @@ -334,7 +334,7 @@ create or replace trigger trg_my1 before delete on test.t1 for each row begin in create or replace view my_view1 as select 1 union select 2 limit 0,5; create algorithm = merge view my_view2(col1, col2) as select * from t2 with check option; create or replace definer = 'ivan'@'%' view my_view3 as select count(*) from t3; -create or replace definer = current_user sql security invoker view my_view4(c1, 1c, _, c1_2) +create or replace definer = current_user sql security invoker view my_view4(c1, 1c, _, c1_2) as select * from (t1 as tt1, t2 as tt2) inner join t1 on t1.col1 = tt1.col1; create view v_some_table as (with a as (select * from some_table) select * from a); @@ -644,3 +644,14 @@ CREATE SEQUENCE `seq_8b4d1cdf-377e-4021-aef3-f7c9846903fc` INCREMENT BY 1 START -- src: https://mariadb.com/kb/en/set-statement/ SET STATEMENT max_statement_time=60 FOR CREATE TABLE some_table (val int); #end + +#begin +-- Table Value Constructors +-- https://dev.mysql.com/doc/refman/8.0/en/values.html +CREATE OR REPLACE VIEW view_name AS +WITH my_values(val1, val2) AS ( + VALUES (1, 'One'), + (2, 'Two') +) +SELECT v.val1, v.val2 FROM my_values v; +#end