Skip to content

Commit 4f2d4db

Browse files
Merge pull request #377 from oseemann/large_json
Fix decoding large json arrays
2 parents 1376c6b + 008de90 commit 4f2d4db

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

.github/workflows/pytest.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: PyTest
2-
on: push
2+
on: [push, pull_request]
33

44
jobs:
55
test:

pymysqlreplication/packet.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -402,9 +402,9 @@ def read_binary_json_type_inlined(self, t, large):
402402
elif t == JSONB_TYPE_UINT16:
403403
return self.read_uint32() if large else self.read_uint16()
404404
elif t == JSONB_TYPE_INT32:
405-
return self.read_int64() if large else self.read_int32()
405+
return self.read_int32()
406406
elif t == JSONB_TYPE_UINT32:
407-
return self.read_uint64() if large else self.read_uint32()
407+
return self.read_uint32()
408408

409409
raise ValueError('Json type %d is not handled' % t)
410410

pymysqlreplication/tests/test_data_type.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,16 @@ def test_json_large(self):
513513

514514
self.assertEqual(event.rows[0]["values"]["value"], to_binary_dict(data))
515515

516+
def test_json_large_array(self):
517+
"Test json array larger than 64k bytes"
518+
if not self.isMySQL57():
519+
self.skipTest("Json is only supported in mysql 5.7")
520+
create_query = "CREATE TABLE test (id int, value json);"
521+
large_array = dict(my_key=[i for i in range(100000)])
522+
insert_query = "INSERT INTO test (id, value) VALUES (1, '%s');" % (json.dumps(large_array),)
523+
event = self.create_and_insert_value(create_query, insert_query)
524+
self.assertEqual(event.rows[0]["values"]["value"], to_binary_dict(large_array))
525+
516526
def test_json_large_with_literal(self):
517527
if not self.isMySQL57():
518528
self.skipTest("Json is only supported in mysql 5.7")

0 commit comments

Comments
 (0)