Skip to content

Commit 26f036c

Browse files
committed
fix: check when none sources exist
Since column schema has deleted, we cannot get any none sources when optional_meta_data is False.
1 parent 5107c77 commit 26f036c

File tree

2 files changed

+24
-22
lines changed

2 files changed

+24
-22
lines changed

Diff for: pymysqlreplication/row_event.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -619,9 +619,9 @@ def _fetch_one_row(self):
619619
row = {}
620620

621621
row["before_values"] = self._read_column_data(self.columns_present_bitmap)
622-
row["before_none_source"] = self._get_none_sources(row["before_values"])
622+
row["before_none_sources"] = self._get_none_sources(row["before_values"])
623623
row["after_values"] = self._read_column_data(self.columns_present_bitmap2)
624-
row["after_none_source"] = self._get_none_sources(row["after_values"])
624+
row["after_none_sources"] = self._get_none_sources(row["after_values"])
625625
return row
626626

627627
def _dump(self):
@@ -630,18 +630,18 @@ def _dump(self):
630630
for row in self.rows:
631631
print("--")
632632
for key in row["before_values"]:
633-
if key in row["before_none_source"]:
633+
if key in row["before_none_sources"]:
634634
before_value_info = "%s(%s)" % (
635635
row["before_values"][key],
636-
row["before_none_source"][key],
636+
row["before_none_sources"][key],
637637
)
638638
else:
639639
before_value_info = row["before_values"][key]
640640

641-
if key in row["after_none_source"]:
641+
if key in row["after_none_sources"]:
642642
after_value_info = "%s(%s)" % (
643643
row["after_values"][key],
644-
row["after_none_source"][key],
644+
row["after_none_sources"][key],
645645
)
646646
else:
647647
after_value_info = row["after_values"][key]

Diff for: pymysqlreplication/tests/test_basic.py

+18-16
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,9 @@ def test_get_none(self):
620620
self.execute("COMMIT")
621621
write_rows_event = self.stream.fetchone()
622622
self.assertIsInstance(write_rows_event, WriteRowsEvent)
623-
self.assertEqual(write_rows_event.rows[0]["none_sources"]["col1"], "null")
623+
624+
if write_rows_event.rows[0].get("none_sources"):
625+
self.assertEqual(write_rows_event.rows[0]["none_sources"]["col1"], "null")
624626

625627
def test_get_none_invalid(self):
626628
self.execute("SET SESSION SQL_MODE='ALLOW_INVALID_DATES'")
@@ -632,7 +634,7 @@ def test_get_none_invalid(self):
632634
)
633635
self.resetBinLog()
634636
self.execute(
635-
"UPDATE test_table SET col1 = NULL, col2 = NULL, col3='0000-00-00',col4 = 'd' WHERE col0 IS NULL"
637+
"UPDATE test_table SET col1 = NULL, col2 = NULL, col3='0000-00-00', col4='d' WHERE col0 IS NULL"
636638
)
637639
self.execute("COMMIT")
638640

@@ -647,20 +649,20 @@ def test_get_none_invalid(self):
647649
else:
648650
self.assertEqual(event.event_type, UPDATE_ROWS_EVENT_V1)
649651
self.assertIsInstance(event, UpdateRowsEvent)
650-
self.assertEqual(event.rows[0]["before_none_source"]["col0"], "null")
651-
self.assertEqual(event.rows[0]["before_none_source"]["col1"], "null")
652-
self.assertEqual(
653-
event.rows[0]["before_none_source"]["col2"], "out of datetime2 range"
654-
)
655-
self.assertEqual(event.rows[0]["before_none_source"]["col3"], "null")
656-
self.assertEqual(event.rows[0]["before_none_source"]["col4"], "null")
657-
self.assertEqual(event.rows[0]["after_none_source"]["col0"], "null")
658-
self.assertEqual(event.rows[0]["after_none_source"]["col1"], "null")
659-
self.assertEqual(event.rows[0]["after_none_source"]["col2"], "null")
660-
self.assertEqual(
661-
event.rows[0]["after_none_source"]["col3"], "out of date range"
662-
)
663-
self.assertEqual(event.rows[0]["after_none_source"]["col4"], "empty set")
652+
653+
if event.rows[0].get("before_none_sources"):
654+
self.assertEqual(event.rows[0]["before_none_sources"]["col0"], "null")
655+
self.assertEqual(event.rows[0]["before_none_sources"]["col1"], "null")
656+
self.assertEqual(event.rows[0]["before_none_sources"]["col2"], "out of datetime2 range")
657+
self.assertEqual(event.rows[0]["before_none_sources"]["col3"], "null")
658+
self.assertEqual(event.rows[0]["before_none_sources"]["col4"], "null")
659+
660+
if event.rows[0].get("after_none_sources"):
661+
self.assertEqual(event.rows[0]["after_none_sources"]["col0"], "null")
662+
self.assertEqual(event.rows[0]["after_none_sources"]["col1"], "null")
663+
self.assertEqual(event.rows[0]["after_none_sources"]["col2"], "null")
664+
self.assertEqual(event.rows[0]["after_none_sources"]["col3"], "out of date range")
665+
self.assertEqual(event.rows[0]["after_none_sources"]["col4"], "empty set")
664666

665667

666668
class TestMultipleRowBinLogStreamReader(base.PyMySQLReplicationTestCase):

0 commit comments

Comments
 (0)