ODriscollBoys opened a new pull request, #10486: URL: https://github.com/apache/paimon/pull/10486
### Purpose Canal sends a MySQL `SET` value as the decimal string of its member bitmap. A `SET` column can declare up to 64 members, so the bitmap is an unsigned 64-bit value (canal's `RowsLogBuffer` reads it with `getUint32` up to `getUlong64`). `CanalFieldParser.convertSet` parsed it with `Integer.parseInt`, so any row containing the 32nd or a later member failed with `NumberFormatException` and stopped the canal sync job. `AliyunFieldParser` has the same copy of the code. This parses the bitmap with `Long.parseUnsignedLong` and walks it as a `long`. The existing loop already shifts with `>>>`, so a bitmap with the 64th member set, which is negative as a signed long, is also decoded correctly. Sets with up to 31 members behave as before. ### Tests `CanalFieldParserTest#testSetValuesBeyondIntRange` and `AliyunFieldParserTest#testSetValuesBeyondIntRange` decode a small set, the 32nd member of a 64-member set, the first and 64th members, and all 64 members. They throw `NumberFormatException` without this change. `AliyunJsonRecordParserTest` also passes. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
