Uploaded image for project: 'Debezium'
  1. Debezium
  2. DBZ-667

Mysql ddl parser cannot parse scientific format number in exponential notation default values

    XMLWordPrintable

Details

    • Hide

      Let the mysql connector get started in BINLOG mode and create a table in Mysql.
      CREATE TABLE t (id INT NOT NULL, myvalue DOUBLE DEFAULT 1E-10, PRIMARY KEY (`id`));

      Show
      Let the mysql connector get started in BINLOG mode and create a table in Mysql. CREATE TABLE t (id INT NOT NULL, myvalue DOUBLE DEFAULT 1E-10, PRIMARY KEY (`id`));

    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

      Attachments

        Activity

          People

            jpechane Jiri Pechanec
            ooooorz Hanlin Liu (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: