|
5 | 5 | import sys
|
6 | 6 | import json
|
7 | 7 |
|
| 8 | +from pymysqlreplication import BinLogStreamReader |
| 9 | + |
8 | 10 | if sys.version_info < (2, 7):
|
9 | 11 | import unittest2 as unittest
|
10 | 12 | else:
|
@@ -34,6 +36,12 @@ def encode_value(v):
|
34 | 36 |
|
35 | 37 |
|
36 | 38 | class TestDataType(base.PyMySQLReplicationTestCase):
|
| 39 | + def setUp(self): |
| 40 | + super(TestDataType, self).setUp() |
| 41 | + if self.isMySQL8014AndMore(): |
| 42 | + self.execute("SET GLOBAL binlog_row_metadata='FULL';") |
| 43 | + self.execute("SET GLOBAL binlog_row_image='FULL';") |
| 44 | + |
37 | 45 | def ignoredEvents(self):
|
38 | 46 | return [GtidEvent, PreviousGtidsEvent]
|
39 | 47 |
|
@@ -104,20 +112,6 @@ def create_and_get_tablemap_event(self, bit):
|
104 | 112 |
|
105 | 113 | return event
|
106 | 114 |
|
107 |
| - def test_varbinary(self): |
108 |
| - create_query = "CREATE TABLE test(b VARBINARY(4))" |
109 |
| - insert_query = "INSERT INTO test VALUES(UNHEX('ff010000'))" |
110 |
| - event = self.create_and_insert_value(create_query, insert_query) |
111 |
| - if event.table_map[event.table_id].column_name_flag: |
112 |
| - self.assertEqual(event.rows[0]["values"]["b"], b"\xff\x01\x00\x00") |
113 |
| - |
114 |
| - def test_fixed_length_binary(self): |
115 |
| - create_query = "CREATE TABLE test(b BINARY(4))" |
116 |
| - insert_query = "INSERT INTO test VALUES(UNHEX('ff010000'))" |
117 |
| - event = self.create_and_insert_value(create_query, insert_query) |
118 |
| - if event.table_map[event.table_id].column_name_flag: |
119 |
| - self.assertEqual(event.rows[0]["values"]["b"], b"\xff\x01\x00\x00") |
120 |
| - |
121 | 115 | def test_decimal(self):
|
122 | 116 | create_query = "CREATE TABLE test (test DECIMAL(2,1))"
|
123 | 117 | insert_query = "INSERT INTO test VALUES(4.2)"
|
@@ -539,31 +533,31 @@ def test_tiny_blob(self):
|
539 | 533 | insert_query = "INSERT INTO test VALUES('Hello', 'World')"
|
540 | 534 | event = self.create_and_insert_value(create_query, insert_query)
|
541 | 535 | if event.table_map[event.table_id].column_name_flag:
|
542 |
| - self.assertEqual(event.rows[0]["values"]["test"], b"Hello") |
| 536 | + self.assertEqual(event.rows[0]["values"]["test"], "Hello") |
543 | 537 | self.assertEqual(event.rows[0]["values"]["test2"], "World")
|
544 | 538 |
|
545 | 539 | def test_medium_blob(self):
|
546 | 540 | create_query = "CREATE TABLE test (test MEDIUMBLOB, test2 MEDIUMTEXT) CHARACTER SET latin1 COLLATE latin1_bin;"
|
547 | 541 | insert_query = "INSERT INTO test VALUES('Hello', 'World')"
|
548 | 542 | event = self.create_and_insert_value(create_query, insert_query)
|
549 | 543 | if event.table_map[event.table_id].column_name_flag:
|
550 |
| - self.assertEqual(event.rows[0]["values"]["test"], b"Hello") |
| 544 | + self.assertEqual(event.rows[0]["values"]["test"], "Hello") |
551 | 545 | self.assertEqual(event.rows[0]["values"]["test2"], "World")
|
552 | 546 |
|
553 | 547 | def test_long_blob(self):
|
554 | 548 | create_query = "CREATE TABLE test (test LONGBLOB, test2 LONGTEXT) CHARACTER SET latin1 COLLATE latin1_bin;"
|
555 | 549 | insert_query = "INSERT INTO test VALUES('Hello', 'World')"
|
556 | 550 | event = self.create_and_insert_value(create_query, insert_query)
|
557 | 551 | if event.table_map[event.table_id].column_name_flag:
|
558 |
| - self.assertEqual(event.rows[0]["values"]["test"], b"Hello") |
| 552 | + self.assertEqual(event.rows[0]["values"]["test"], "Hello") |
559 | 553 | self.assertEqual(event.rows[0]["values"]["test2"], "World")
|
560 | 554 |
|
561 | 555 | def test_blob(self):
|
562 | 556 | create_query = "CREATE TABLE test (test BLOB, test2 TEXT) CHARACTER SET latin1 COLLATE latin1_bin;"
|
563 | 557 | insert_query = "INSERT INTO test VALUES('Hello', 'World')"
|
564 | 558 | event = self.create_and_insert_value(create_query, insert_query)
|
565 | 559 | if event.table_map[event.table_id].column_name_flag:
|
566 |
| - self.assertEqual(event.rows[0]["values"]["test"], b"Hello") |
| 560 | + self.assertEqual(event.rows[0]["values"]["test"], "Hello") |
567 | 561 | self.assertEqual(event.rows[0]["values"]["test2"], "World")
|
568 | 562 |
|
569 | 563 | def test_string(self):
|
@@ -804,25 +798,6 @@ def test_encoding_utf8(self):
|
804 | 798 | if event.table_map[event.table_id].column_name_flag:
|
805 | 799 | self.assertMultiLineEqual(event.rows[0]["values"]["test"], string)
|
806 | 800 |
|
807 |
| - def test_zerofill(self): |
808 |
| - create_query = "CREATE TABLE test ( \ |
809 |
| - test TINYINT UNSIGNED ZEROFILL DEFAULT NULL, \ |
810 |
| - test2 SMALLINT UNSIGNED ZEROFILL DEFAULT NULL, \ |
811 |
| - test3 MEDIUMINT UNSIGNED ZEROFILL DEFAULT NULL, \ |
812 |
| - test4 INT UNSIGNED ZEROFILL DEFAULT NULL, \ |
813 |
| - test5 BIGINT UNSIGNED ZEROFILL DEFAULT NULL \ |
814 |
| - )" |
815 |
| - insert_query = ( |
816 |
| - "INSERT INTO test (test, test2, test3, test4, test5) VALUES(1, 1, 1, 1, 1)" |
817 |
| - ) |
818 |
| - event = self.create_and_insert_value(create_query, insert_query) |
819 |
| - if event.table_map[event.table_id].column_name_flag: |
820 |
| - self.assertEqual(event.rows[0]["values"]["test"], "001") |
821 |
| - self.assertEqual(event.rows[0]["values"]["test2"], "00001") |
822 |
| - self.assertEqual(event.rows[0]["values"]["test3"], "00000001") |
823 |
| - self.assertEqual(event.rows[0]["values"]["test4"], "0000000001") |
824 |
| - self.assertEqual(event.rows[0]["values"]["test5"], "00000000000000000001") |
825 |
| - |
826 | 801 | def test_partition_id(self):
|
827 | 802 | if not self.isMySQL80AndMore():
|
828 | 803 | self.skipTest("Not supported in this version of MySQL")
|
@@ -942,6 +917,24 @@ def test_mariadb_only_status_vars(self):
|
942 | 917 |
|
943 | 918 | self.assertEqual(event.query, create_query)
|
944 | 919 |
|
| 920 | + def test_varbinary(self): |
| 921 | + self.stream.close() |
| 922 | + self.stream = BinLogStreamReader( |
| 923 | + self.database, |
| 924 | + server_id=1024, |
| 925 | + only_events=(WriteRowsEvent,), |
| 926 | + ignore_decode_errors=True, |
| 927 | + ) |
| 928 | + create_query = "CREATE TABLE test(b VARBINARY(4))" |
| 929 | + insert_query = "INSERT INTO test VALUES(UNHEX('ff010000'))" |
| 930 | + self.execute(create_query) |
| 931 | + self.execute(insert_query) |
| 932 | + self.execute("COMMIT") |
| 933 | + |
| 934 | + event = self.stream.fetchone() |
| 935 | + if event.table_map[event.table_id].column_name_flag: |
| 936 | + self.assertEqual(event.rows[0]["values"]["b"], b"\xff\x01\x00\x00") |
| 937 | + |
945 | 938 |
|
946 | 939 | if __name__ == "__main__":
|
947 | 940 | unittest.main()
|
0 commit comments