diff --git a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java index 7286acaf2..46a7e023f 100644 --- a/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java +++ b/debezium-connector-mysql/src/test/java/io/debezium/connector/mysql/MySqlAntlrDdlParserTest.java @@ -641,6 +641,45 @@ public void shouldSupportCreateTableWithEcrytion() { assertThat(((MySqlAntlrDdlParser) parser).getParsingExceptionsFromWalker().size()).isEqualTo(0); } + @Test + @FixFor("DBZ-4675") + public void shouldSupportCreateTableWithCompressed() { + parser.parse( + "CREATE TABLE `my_table_page_compressed1` (\n" + + "`column1` bigint(20) NOT NULL,\n" + + "`column2` bigint(20) NOT NULL,\n" + + "`column3` bigint(20) NOT NULL,\n" + + "`column4` bigint(20) NOT NULL,\n" + + "`column5` bigint(20) NOT NULL,\n" + + "`column6` bigint(20) NOT NULL,\n" + + "`column7` bigint(20) NOT NULL,\n" + + "`column8` blob,\n" + + "`column9` varchar(64) DEFAULT NULL,\n" + + "PRIMARY KEY (`column1`),\n" + + "KEY `idx_my_index_column2` (`column2`)\n" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED `encrypted`=yes `page_compressed`=0", + tables); + parser.parse( + "CREATE TABLE `my_table_page_compressed2` (\n" + + "`column1` bigint(20) NOT NULL" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED " + + "`encrypted`=yes `page_compressed`=1 `PAGE_COMPRESSION_LEVEL`=0", + tables); + parser.parse( + "CREATE TABLE `my_table_page_compressed3` (\n" + + "`column1` bigint(20) NOT NULL" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED " + + "`encrypted`=yes page_compressed=1 `page_compression_level`=3", + tables); + parser.parse( + "CREATE TABLE `my_table_page_compressed4` (\n" + + "`column1` bigint(20) NOT NULL" + + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED " + + "`encrypted`=yes `page_compressed`=0 PAGE_COMPRESSION_LEVEL=3", + tables); + assertThat(((MySqlAntlrDdlParser) parser).getParsingExceptionsFromWalker().size()).isEqualTo(0); + } + @Test @FixFor("DBZ-1349") public void shouldSupportUtfMb3Charset() { 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 8a6300143..5a7f0dc7a 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 @@ -451,6 +451,8 @@ ENABLE: 'ENABLE'; ENCRYPTION: 'ENCRYPTION'; ENCRYPTED: 'ENCRYPTED'; ENCRYPTION_KEY_ID: 'ENCRYPTION_KEY_ID'; +PAGE_COMPRESSED: 'PAGE_COMPRESSED'; +PAGE_COMPRESSION_LEVEL: 'PAGE_COMPRESSION_LEVEL'; END: 'END'; ENDS: 'ENDS'; ENGINE: 'ENGINE'; 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 9aaf4a686..68a635b47 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 @@ -429,6 +429,8 @@ tableOption | DELAY_KEY_WRITE '='? boolValue=('0' | '1') #tableOptionDelay | ENCRYPTION '='? STRING_LITERAL #tableOptionEncryption | encryptedLiteral '='? (YES | NO) #tableOptionEncrypted + | (PAGE_COMPRESSED | STRING_LITERAL) '='? ('0' | '1') #tableOptionPageCompressed + | (PAGE_COMPRESSION_LEVEL | STRING_LITERAL) '='? decimalLiteral #tableOptionPageCompressionLevel | ENCRYPTION_KEY_ID '='? decimalLiteral #tableOptionEncryptionKeyId | INDEX DIRECTORY '='? STRING_LITERAL #tableOptionIndexDirectory | INSERT_METHOD '='? insertMethod=(NO | FIRST | LAST) #tableOptionInsertMethod