Details
-
Bug
-
Resolution: Done
-
Major
-
0.7.4
-
None
Description
Mysql ddl parser cannot parse scientific format number in exponential notation default values.
Example:
CREATE TABLE t (id INT NOT NULL, myvalue DOUBLE DEFAULT 1E-10, PRIMARY KEY (`id`));
DdlTokenizer is not treating 'e' or 'E' as a keyword. The ddl will be extracted as tokens
[ "1e", "-", "10"]. And "1e" is not a valid numeric.
BTW, it should be
tokens.matchesAnyOf("+", "-") in DdlParser.parseNumericLiteral after 'E' consumption.
Stacktrace:
io.debezium.text.ParsingException: Failed to parse statement 'CREATE TABLE t (id INT NOT NULL, myvalue DOUBLE DEFAULT 1E-10, PRIMARY KEY (`id`));'
at io.debezium.relational.ddl.DdlParser.parse(DdlParser.java:292)
at io.debezium.relational.ddl.DdlParser.parse(DdlParser.java:267)
Caused by: io.debezium.text.ParsingException: Expecting integer at line 1, column 57 but found '1E'
at io.debezium.text.TokenStream.consumeInteger(TokenStream.java:583)
at io.debezium.relational.ddl.DdlParser.parseNumericLiteral(DdlParser.java:754)
at io.debezium.relational.ddl.DdlParser.parseLiteral(DdlParser.java:744)
at io.debezium.connector.mysql.MySqlDdlParser.parseDefaultClause(MySqlDdlParser.java:1630)
at io.debezium.connector.mysql.MySqlDdlParser.parseColumnDefinition(MySqlDdlParser.java:888)
at io.debezium.connector.mysql.MySqlDdlParser.parseCreateColumn(MySqlDdlParser.java:748)
at io.debezium.connector.mysql.MySqlDdlParser.parseCreateDefinition(MySqlDdlParser.java:726)
at io.debezium.connector.mysql.MySqlDdlParser.parseCreateDefinitionList(MySqlDdlParser.java:574)
at io.debezium.connector.mysql.MySqlDdlParser.parseCreateTable(MySqlDdlParser.java:386)
at io.debezium.connector.mysql.MySqlDdlParser.parseCreate(MySqlDdlParser.java:289)
at io.debezium.connector.mysql.MySqlDdlParser.parseNextStatement(MySqlDdlParser.java:160)
at io.debezium.relational.ddl.DdlParser.parse(DdlParser.java:286)
... 30 more