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]

Reply via email to