[MXS-2263] Maxscale CDC treats unsigned columns as signed Created: 2019-01-15  Updated: 2019-09-30  Resolved: 2019-09-30

Status: Closed
Project: MariaDB MaxScale
Component/s: avrorouter, cdc
Affects Version/s: 2.2.17
Fix Version/s: 2.4.3

Type: Bug Priority: Major
Reporter: Sergiy Kyrychenko Assignee: markus makela
Resolution: Fixed Votes: 0
Labels: None

Sprint: MXS-SPRINT-91

 Description   

Values in unsigned columns come across in JSON as signed.
In this example, value 8888888 comes across as -7888328.

To reproduce:

CREATE TABLE `unsigned_test` (
`unsigned_test_id` mediumint(8) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

INSERT INTO `unsigned_test` (`unsigned_test_id`)
VALUES
(3),
(8000000),
(8888888);

JSON Output:

{"namespace": "MaxScaleChangeDataSchema.avro", "type": "record", "name": "ChangeRecord", "fields": [

{"name": "domain", "type": "int"}

,

{"name": "server_id", "type": "int"}

,

{"name": "sequence", "type": "int"}

,

{"name": "event_number", "type": "int"}

,

{"name": "timestamp", "type": "int"}

, {"name": "event_type", "type": {"type": "enum", "name": "EVENT_TYPES", "symbols": ["insert", "update_before", "update_after", "delete"]}},

{"name": "unsigned_test_id", "type": ["null", "int"], "real_type": "mediumint", "length": 8}

]}

{"domain": 0, "server_id": 11009, "sequence": 9780915, "event_number": 1, "timestamp": 1547529921, "event_type": "insert", "unsigned_test_id": 3} {"domain": 0, "server_id": 11009, "sequence": 9781001, "event_number": 1, "timestamp": 1547529930, "event_type": "insert", "unsigned_test_id": 8000000} {"domain": 0, "server_id": 11009, "sequence": 9781377, "event_number": 1, "timestamp": 1547529978, "event_type": "insert", "unsigned_test_id": -7888328}

 Comments   
Comment by Sergiy Kyrychenko [ 2019-02-01 ]

It's been 2 weeks since this issue has been filed. Is it possible to confirm and set proper priority on this?

Comment by markus makela [ 2019-09-25 ]

Fixed the unsigned integer handling. Due to limitations in the Avro file format, only integers smaller than 64-bits can be correctly represented in their unsigned form. This means that BIGINT UNSIGNED values that exceed the limits of BIGINT SIGNED will be negative in the Avro files.

Generated at Thu Feb 08 04:12:51 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.