DBZ-4841 Debezium Mysql connector can't handle CREATE INDEX IF NOT EXISTS (MariaDB)

This commit is contained in:
harveyyue 2022-03-11 18:19:04 +08:00 committed by Gunnar Morling
parent dbd3447c05
commit dac2e1350f
3 changed files with 40 additions and 14 deletions

View File

@ -613,6 +613,21 @@ public void shouldSupportCreateIndexBothAlgoAndLock() {
assertThat(((MySqlAntlrDdlParser) parser).getParsingExceptionsFromWalker().size()).isEqualTo(0);
}
@Test
@FixFor("DBZ-4841")
public void shouldProcessMariadbCreateIndex() {
String createIndexDdl = "CREATE INDEX IF NOT EXISTS DX_DT_LAST_UPDATE ON patient(DT_LAST_UPDATE)\n"
+ "WAIT 100\n"
+ "KEY_BLOCK_SIZE=1024M\n"
+ "CLUSTERING =YES\n"
+ "USING RTREE\n"
+ "NOT IGNORED\n"
+ "ALGORITHM = NOCOPY\n"
+ "LOCK EXCLUSIVE";
parser.parse(createIndexDdl, tables);
assertThat(((MySqlAntlrDdlParser) parser).getParsingExceptionsFromWalker().size()).isEqualTo(0);
}
@Test
@FixFor("DBZ-4661")
public void shouldSupportCreateTableWithEcrytion() {

View File

@ -116,6 +116,7 @@ HIGH_PRIORITY: 'HIGH_PRIORITY';
HISTOGRAM: 'HISTOGRAM';
IF: 'IF';
IGNORE: 'IGNORE';
IGNORED: 'IGNORED';
IN: 'IN';
INDEX: 'INDEX';
INFILE: 'INFILE';
@ -408,6 +409,7 @@ CIPHER: 'CIPHER';
CLASS_ORIGIN: 'CLASS_ORIGIN';
CLIENT: 'CLIENT';
CLOSE: 'CLOSE';
CLUSTERING: 'CLUSTERING';
COALESCE: 'COALESCE';
CODE: 'CODE';
COLUMNS: 'COLUMNS';
@ -567,6 +569,8 @@ NCHAR: 'NCHAR';
NEVER: 'NEVER';
NEXT: 'NEXT';
NO: 'NO';
NOCOPY: 'NOCOPY';
NOWAIT: 'NOWAIT';
YES: 'YES';
NODEGROUP: 'NODEGROUP';
NONE: 'NONE';
@ -639,6 +643,7 @@ ROTATE: 'ROTATE';
ROW: 'ROW';
ROWS: 'ROWS';
ROW_FORMAT: 'ROW_FORMAT';
RTREE: 'RTREE';
SAVEPOINT: 'SAVEPOINT';
SCHEDULE: 'SCHEDULE';
SECURITY: 'SECURITY';
@ -932,6 +937,7 @@ ELT: 'ELT';
ENCODE: 'ENCODE';
ENCRYPT: 'ENCRYPT';
ENDPOINT: 'ENDPOINT';
ENGINE_ATTRIBUTE: 'ENGINE_ATTRIBUTE';
ENVELOPE: 'ENVELOPE';
EQUALS: 'EQUALS';
EXP: 'EXP';
@ -1056,6 +1062,7 @@ ROW_COUNT: 'ROW_COUNT';
RPAD: 'RPAD';
RTRIM: 'RTRIM';
SEC_TO_TIME: 'SEC_TO_TIME';
SECONDARY_ENGINE_ATTRIBUTE: 'SECONDARY_ENGINE_ATTRIBUTE';
SESSION_USER: 'SESSION_USER';
SHA: 'SHA';
SHA1: 'SHA1';

View File

@ -141,14 +141,15 @@ createEvent
createIndex
: CREATE (OR REPLACE)? // OR is MariaDB-specific only
intimeAction=(ONLINE | OFFLINE)?
indexCategory=(UNIQUE | FULLTEXT | SPATIAL)?
INDEX uid indexType?
indexCategory=(UNIQUE | FULLTEXT | SPATIAL)? INDEX
(IF NOT EXISTS)? // MariaDB-specific only
uid indexType?
ON tableName indexColumnNames
(WAIT decimalLiteral | NOWAIT)? // MariaDB-specific only
indexOption*
(
ALGORITHM '='? algType=(DEFAULT | INPLACE | COPY)
| LOCK '='?
lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE)
ALGORITHM EQUAL_SYMBOL? algType=(DEFAULT | INPLACE | COPY | NOCOPY | INSTANT) // NOCOPY, INSTANT are MariaDB-specific only
| LOCK EQUAL_SYMBOL? lockType=(DEFAULT | NONE | SHARED | EXCLUSIVE)
)*
;
@ -299,16 +300,19 @@ enableType
;
indexType
: USING (BTREE | HASH)
: USING (BTREE | HASH | RTREE) // RTREE is MariaDB-specific only
;
indexOption
: KEY_BLOCK_SIZE '='? fileSizeLiteral
: KEY_BLOCK_SIZE EQUAL_SYMBOL? fileSizeLiteral
| indexType
| WITH PARSER uid
| COMMENT STRING_LITERAL
| INVISIBLE
| VISIBLE
| (VISIBLE | INVISIBLE)
| ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL
| SECONDARY_ENGINE_ATTRIBUTE EQUAL_SYMBOL? STRING_LITERAL
| CLUSTERING EQUAL_SYMBOL (YES | NO) // MariaDB-specific only
| (IGNORED | NOT IGNORED) // MariaDB-specific only
;
procedureParameter
@ -2580,7 +2584,7 @@ keywordsCanBeId
| AUTO_INCREMENT | AVG | AVG_ROW_LENGTH | BACKUP_ADMIN | BEGIN | BINLOG | BINLOG_ADMIN | BINLOG_ENCRYPTION_ADMIN | BIT | BIT_AND | BIT_OR | BIT_XOR
| BLOCK | BOOL | BOOLEAN | BTREE | CACHE | CASCADED | CHAIN | CHANGED
| CHANNEL | CHECKSUM | PAGE_CHECKSUM | CATALOG_NAME | CIPHER
| CLASS_ORIGIN | CLIENT | CLONE_ADMIN | CLOSE | COALESCE | CODE
| CLASS_ORIGIN | CLIENT | CLONE_ADMIN | CLOSE | CLUSTERING | COALESCE | CODE
| COLUMNS | COLUMN_FORMAT | COLUMN_NAME | COMMENT | COMMIT | COMPACT
| COMPLETION | COMPRESSED | COMPRESSION | CONCURRENT | CONDITION | CONNECT
| CONNECTION | CONNECTION_ADMIN | CONSISTENT | CONSTRAINT_CATALOG | CONSTRAINT_NAME
@ -2589,13 +2593,13 @@ keywordsCanBeId
| DATA | DATAFILE | DEALLOCATE
| DEFAULT_AUTH | DEFINER | DELAY_KEY_WRITE | DES_KEY_FILE | DIAGNOSTICS | DIRECTORY
| DISABLE | DISCARD | DISK | DO | DUMPFILE | DUPLICATE
| DYNAMIC | ENABLE | ENCRYPTION | ENCRYPTION_KEY_ADMIN | END | ENDS | ENGINE | ENGINES
| DYNAMIC | ENABLE | ENCRYPTION | ENCRYPTION_KEY_ADMIN | END | ENDS | ENGINE | ENGINE_ATTRIBUTE | ENGINES
| ERROR | ERRORS | ESCAPE | EUR | EVEN | EVENT | EVENTS | EVERY | EXCEPT
| EXCHANGE | EXCLUSIVE | EXPIRE | EXPORT | EXTENDED | EXTENT_SIZE | FAILED_LOGIN_ATTEMPTS | FAST | FAULTS
| FIELDS | FILE_BLOCK_SIZE | FILTER | FIREWALL_ADMIN | FIREWALL_USER | FIRST | FIXED | FLUSH
| FOLLOWS | FOUND | FULL | FUNCTION | GENERAL | GLOBAL | GRANTS | GROUP | GROUP_CONCAT
| GROUP_REPLICATION | GROUP_REPLICATION_ADMIN | HANDLER | HASH | HELP | HISTORY | HOST | HOSTS | IDENTIFIED
| IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE | INNODB_REDO_LOG_ARCHIVE
| IGNORED | IGNORE_SERVER_IDS | IMPORT | INDEXES | INITIAL_SIZE | INNODB_REDO_LOG_ARCHIVE
| INPLACE | INSERT_METHOD | INSTALL | INSTANCE | INSTANT | INTERNAL | INVOKER | IO
| IO_THREAD | IPC | ISO | ISOLATION | ISSUER | JIS | JSON | KEY_BLOCK_SIZE
| LANGUAGE | LAST | LEAVES | LESS | LEVEL | LIST | LOCAL
@ -2612,7 +2616,7 @@ keywordsCanBeId
| MAX_USER_CONNECTIONS | MEDIUM | MEMBER | MEMORY | MERGE | MESSAGE_TEXT
| MID | MIGRATE
| MIN | MIN_ROWS | MODE | MODIFY | MUTEX | MYSQL | MYSQL_ERRNO | NAME | NAMES
| NCHAR | NDB_STORED_USER | NEVER | NEXT | NO | NODEGROUP | NONE | NUMBER | ODBC | OFFLINE | OFFSET
| NCHAR | NDB_STORED_USER | NEVER | NEXT | NO | NOCOPY | NODEGROUP | NONE | NOWAIT | NUMBER | ODBC | OFFLINE | OFFSET
| OF | OJ | OLD_PASSWORD | ONE | ONLINE | ONLY | OPEN | OPTIMIZER_COSTS
| OPTIONAL | OPTIONS | ORDER | OWNER | PACK_KEYS | PAGE | PARSER | PARTIAL
| PARTITIONING | PARTITIONS | PASSWORD | PASSWORD_LOCK_TIME | PERSIST_RO_VARIABLES_ADMIN | PHASE | PLUGINS
@ -2626,7 +2630,7 @@ keywordsCanBeId
| REPLICATE_WILD_IGNORE_TABLE | REPLICATION | REPLICATION_APPLIER | REPLICATION_SLAVE_ADMIN | RESET
| RESOURCE_GROUP_ADMIN | RESOURCE_GROUP_USER | RESUME
| RETURNED_SQLSTATE | RETURNS | REUSE | ROLE | ROLE_ADMIN | ROLLBACK | ROLLUP | ROTATE | ROW | ROWS
| ROW_FORMAT | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SERIAL | SERVER
| ROW_FORMAT | RTREE | SAVEPOINT | SCHEDULE | SCHEMA_NAME | SECURITY | SECONDARY_ENGINE_ATTRIBUTE | SERIAL | SERVER
| SESSION | SESSION_VARIABLES_ADMIN | SET_USER_ID | SHARE | SHARED | SHOW_ROUTINE | SIGNED | SIMPLE | SLAVE
| SLOW | SNAPSHOT | SOCKET | SOME | SONAME | SOUNDS | SOURCE
| SQL_AFTER_GTIDS | SQL_AFTER_MTS_GAPS | SQL_BEFORE_GTIDS