From f4f4316af69690d669aa7150bb1f6072e1962173 Mon Sep 17 00:00:00 2001 From: starcat37 Date: Thu, 27 Jul 2023 21:14:13 +0900 Subject: [PATCH 01/22] Feat: implement rand_event --- .gitignore | 2 ++ examples/dump_events.py | 6 +++++- pymysqlreplication/binlogstream.py | 12 +++++++----- pymysqlreplication/event.py | 18 ++++++++++++++++++ pymysqlreplication/packet.py | 1 + 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 9a27e404..27e7b3c9 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,5 @@ _build # Pyenv .python-version MANIFEST + +venv/ \ No newline at end of file diff --git a/examples/dump_events.py b/examples/dump_events.py index e0de09f1..3287a5a9 100644 --- a/examples/dump_events.py +++ b/examples/dump_events.py @@ -21,7 +21,11 @@ def main(): # the end of the stream stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=3, - blocking=True) + blocking=True, + # log_file = "binlog.000022", + # log_pos = 1265, + resume_stream = True, # log-pos도 명시할 경우 + ) for binlogevent in stream: binlogevent.dump() diff --git a/pymysqlreplication/binlogstream.py b/pymysqlreplication/binlogstream.py index fa65aa22..e06760fe 100644 --- a/pymysqlreplication/binlogstream.py +++ b/pymysqlreplication/binlogstream.py @@ -14,6 +14,7 @@ QueryEvent, RotateEvent, FormatDescriptionEvent, XidEvent, GtidEvent, StopEvent, XAPrepareEvent, BeginLoadQueryEvent, ExecuteLoadQueryEvent, + RandEvent, HeartbeatLogEvent, NotImplementedEvent, MariadbGtidEvent) from .exceptions import BinLogNotEnabled from .row_event import ( @@ -346,9 +347,9 @@ def __connect_to_stream(self): + bytes(bytearray([COM_BINLOG_DUMP])) if self.__resume_stream: - prelude += struct.pack(' Date: Thu, 27 Jul 2023 21:30:18 +0900 Subject: [PATCH 02/22] fix: change number of testcases --- pymysqlreplication/tests/test_basic.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index 0db8a264..396f8cbc 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -25,9 +25,9 @@ def ignoredEvents(self): return [GtidEvent] def test_allowed_event_list(self): - self.assertEqual(len(self.stream._allowed_event_list(None, None, False)), 16) - self.assertEqual(len(self.stream._allowed_event_list(None, None, True)), 15) - self.assertEqual(len(self.stream._allowed_event_list(None, [RotateEvent], False)), 15) + self.assertEqual(len(self.stream._allowed_event_list(None, None, False)), 17) + self.assertEqual(len(self.stream._allowed_event_list(None, None, True)), 16) + self.assertEqual(len(self.stream._allowed_event_list(None, [RotateEvent], False)), 16) self.assertEqual(len(self.stream._allowed_event_list([RotateEvent], None, False)), 1) def test_read_query_event(self): From 13efa87eba92b01f7a81c197d08e90a212dac96a Mon Sep 17 00:00:00 2001 From: mjs Date: Thu, 27 Jul 2023 21:36:02 +0900 Subject: [PATCH 03/22] Add property for rand event --- pymysqlreplication/event.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index bbe9791c..08a28c9b 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -438,6 +438,9 @@ def _dump(self): class RandEvent(BinLogEvent): """ + RandEvent is generated every time a statement uses the RAND() function. + Indicates the seed values to use for generating a random number with RAND() in the next statement. + Attributes: seed1 seed2 @@ -449,7 +452,17 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs) # Payload self.seed1 = self.packet.read_uint64() self.seed2 = self.packet.read_uint64() - + + @property + def seed1(self): + """Get the first seed value""" + return self.seed1 + + @property + def seed2(self): + """Get the second seed value""" + return self.seed2 + def _dump(self): super(RandEvent, self)._dump() print("seed1: %d" % (self.seed1)) From c3be8c9be2b7e65ef237caa535a4db91bc5f3dd7 Mon Sep 17 00:00:00 2001 From: mjs Date: Thu, 27 Jul 2023 22:26:38 +0900 Subject: [PATCH 04/22] fix: rename seed to _seed --- pymysqlreplication/event.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index 08a28c9b..248735e0 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -450,18 +450,18 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs) super(RandEvent, self).__init__(from_packet, event_size, table_map, ctl_connection, **kwargs) # Payload - self.seed1 = self.packet.read_uint64() - self.seed2 = self.packet.read_uint64() + self._seed1 = self.packet.read_uint64() + self._seed2 = self.packet.read_uint64() @property def seed1(self): """Get the first seed value""" - return self.seed1 + return self._seed1 @property def seed2(self): """Get the second seed value""" - return self.seed2 + return self._seed2 def _dump(self): super(RandEvent, self)._dump() From f8324cc14b801b8a2ad665c2c857d3295fb1787f Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 14:47:48 +0900 Subject: [PATCH 05/22] test: add test_rand_event --- pymysqlreplication/tests/test_basic.py | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index 396f8cbc..2a6ec54a 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -17,7 +17,7 @@ from pymysqlreplication.constants.BINLOG import * from pymysqlreplication.row_event import * -__all__ = ["TestBasicBinLogStreamReader", "TestMultipleRowBinLogStreamReader", "TestCTLConnectionSettings", "TestGtidBinLogStreamReader"] +__all__ = ["TestBasicBinLogStreamReader", "TestMultipleRowBinLogStreamReader", "TestCTLConnectionSettings", "TestGtidBinLogStreamReader", "TestStatementConnectionSetting"] class TestBasicBinLogStreamReader(base.PyMySQLReplicationTestCase): @@ -1002,6 +1002,33 @@ def test_parsing(self): gtid = Gtid("57b70f4e-20d3-11e5-a393-4a63946f7eac:1-:1") gtid = Gtid("57b70f4e-20d3-11e5-a393-4a63946f7eac::1") +class TestStatementConnectionSetting(base.PyMySQLReplicationTestCase): + def setUp(self): + super(TestStatementConnectionSetting, self).setUp() + self.stream.close() + self.stream = BinLogStreamReader( + self.database, + server_id=1024, + only_events=(RandEvent, QueryEvent), + fail_on_table_metadata_unavailable=True + ) + + def test_rand_event(self): + self.execute("SET @@binlog_format='STATEMENT'") + self.execute("CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data INT NOT NULL, PRIMARY KEY (id))") + self.execute("INSERT INTO test (data) VALUES(RAND())") + self.execute("COMMIT") + + self.assertEqual(self.bin_log_format(), "STATEMENT") + self.assertIsInstance(self.stream.fetchone(), QueryEvent) + self.assertIsInstance(self.stream.fetchone(), QueryEvent) + self.assertIsInstance(self.stream.fetchone(), RandEvent) + + def tearDown(self): + self.execute("SET @@binlog_format='ROW'") + self.assertEqual(self.bin_log_format(), "ROW") + super(TestStatementConnectionSetting, self).tearDown() + if __name__ == "__main__": import unittest From 6511f85ddaced2fe0e447e9607428c1c474c635f Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 14:55:47 +0900 Subject: [PATCH 06/22] test: move statement setting to setUp --- pymysqlreplication/tests/test_basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index 2a6ec54a..d9b1a3f1 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -1012,9 +1012,9 @@ def setUp(self): only_events=(RandEvent, QueryEvent), fail_on_table_metadata_unavailable=True ) + self.execute("SET @@binlog_format='STATEMENT'") def test_rand_event(self): - self.execute("SET @@binlog_format='STATEMENT'") self.execute("CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data INT NOT NULL, PRIMARY KEY (id))") self.execute("INSERT INTO test (data) VALUES(RAND())") self.execute("COMMIT") From f267674b43bf6521d304980f14b293a679884f60 Mon Sep 17 00:00:00 2001 From: starcat37 Date: Sat, 29 Jul 2023 14:59:53 +0900 Subject: [PATCH 07/22] Chore: Delete unnecessary comment --- .gitignore | 3 ++- examples/dump_events.py | 4 +--- pymysqlreplication/binlogstream.py | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 27e7b3c9..d22f7738 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ _build .python-version MANIFEST -venv/ \ No newline at end of file +# venv +venv/* \ No newline at end of file diff --git a/examples/dump_events.py b/examples/dump_events.py index 3287a5a9..1e99bcc0 100644 --- a/examples/dump_events.py +++ b/examples/dump_events.py @@ -22,9 +22,7 @@ def main(): stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=3, blocking=True, - # log_file = "binlog.000022", - # log_pos = 1265, - resume_stream = True, # log-pos도 명시할 경우 + resume_stream = True, ) for binlogevent in stream: diff --git a/pymysqlreplication/binlogstream.py b/pymysqlreplication/binlogstream.py index e06760fe..485ec10b 100644 --- a/pymysqlreplication/binlogstream.py +++ b/pymysqlreplication/binlogstream.py @@ -347,9 +347,9 @@ def __connect_to_stream(self): + bytes(bytearray([COM_BINLOG_DUMP])) if self.__resume_stream: - prelude += struct.pack(' Date: Sat, 29 Jul 2023 15:03:22 +0900 Subject: [PATCH 08/22] Chore: delete unnecessary venv/* in .gitignore --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d22f7738..224181fe 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,4 @@ _build # Pyenv .python-version -MANIFEST - -# venv -venv/* \ No newline at end of file +MANIFEST \ No newline at end of file From bf9ec0bb7b60e317f519ad576323ad647181ef04 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:05:29 +0900 Subject: [PATCH 09/22] comment: add rand_event warning description --- pymysqlreplication/event.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index 248735e0..ec72c6c9 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -440,6 +440,9 @@ class RandEvent(BinLogEvent): """ RandEvent is generated every time a statement uses the RAND() function. Indicates the seed values to use for generating a random number with RAND() in the next statement. + Warning + - RAND_EVENT only works in statement-based logging. (need to set binlog_format as 'STATEMENT') + - RAND_EVENT only works when the seed number is not specified. Attributes: seed1 From ccd5b867dc0ea6d7e4ebe979fdd326822f6e99d6 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:07:17 +0900 Subject: [PATCH 10/22] refactor: change RandEvent import position --- .gitignore | 2 +- pymysqlreplication/binlogstream.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 224181fe..9a27e404 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,4 @@ _build # Pyenv .python-version -MANIFEST \ No newline at end of file +MANIFEST diff --git a/pymysqlreplication/binlogstream.py b/pymysqlreplication/binlogstream.py index 485ec10b..2c300f16 100644 --- a/pymysqlreplication/binlogstream.py +++ b/pymysqlreplication/binlogstream.py @@ -14,8 +14,8 @@ QueryEvent, RotateEvent, FormatDescriptionEvent, XidEvent, GtidEvent, StopEvent, XAPrepareEvent, BeginLoadQueryEvent, ExecuteLoadQueryEvent, - RandEvent, - HeartbeatLogEvent, NotImplementedEvent, MariadbGtidEvent) + HeartbeatLogEvent, NotImplementedEvent, + MariadbGtidEvent, RandEvent) from .exceptions import BinLogNotEnabled from .row_event import ( UpdateRowsEvent, WriteRowsEvent, DeleteRowsEvent, TableMapEvent) From b12b7fe4d584aed06c7b201f23d77b475af04728 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:12:29 +0900 Subject: [PATCH 11/22] revert: remove resume_stream=True in example --- examples/dump_events.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/dump_events.py b/examples/dump_events.py index 1e99bcc0..e0de09f1 100644 --- a/examples/dump_events.py +++ b/examples/dump_events.py @@ -21,9 +21,7 @@ def main(): # the end of the stream stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=3, - blocking=True, - resume_stream = True, - ) + blocking=True) for binlogevent in stream: binlogevent.dump() From 9f13346232cfadb9c4f6228d0c0a07efd582f2aa Mon Sep 17 00:00:00 2001 From: sean Date: Wed, 2 Aug 2023 16:20:01 +0900 Subject: [PATCH 12/22] test: add rand event seed type --- pymysqlreplication/tests/test_basic.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index d9b1a3f1..9e16f5c3 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -1022,7 +1022,11 @@ def test_rand_event(self): self.assertEqual(self.bin_log_format(), "STATEMENT") self.assertIsInstance(self.stream.fetchone(), QueryEvent) self.assertIsInstance(self.stream.fetchone(), QueryEvent) - self.assertIsInstance(self.stream.fetchone(), RandEvent) + + expect_rand_event = self.stream.fetchone() + self.assertIsInstance(expect_rand_event, RandEvent) + self.assertEqual(type(expect_rand_event.seed1), int) + self.assertEqual(type(expect_rand_event.seed2), int) def tearDown(self): self.execute("SET @@binlog_format='ROW'") From dd8079c44c34632143753dcae78eaf776a8e68e7 Mon Sep 17 00:00:00 2001 From: mikaniz Date: Sat, 29 Jul 2023 14:47:48 +0900 Subject: [PATCH 13/22] test: add test_rand_event --- pymysqlreplication/tests/test_basic.py | 29 +++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index 396f8cbc..2a6ec54a 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -17,7 +17,7 @@ from pymysqlreplication.constants.BINLOG import * from pymysqlreplication.row_event import * -__all__ = ["TestBasicBinLogStreamReader", "TestMultipleRowBinLogStreamReader", "TestCTLConnectionSettings", "TestGtidBinLogStreamReader"] +__all__ = ["TestBasicBinLogStreamReader", "TestMultipleRowBinLogStreamReader", "TestCTLConnectionSettings", "TestGtidBinLogStreamReader", "TestStatementConnectionSetting"] class TestBasicBinLogStreamReader(base.PyMySQLReplicationTestCase): @@ -1002,6 +1002,33 @@ def test_parsing(self): gtid = Gtid("57b70f4e-20d3-11e5-a393-4a63946f7eac:1-:1") gtid = Gtid("57b70f4e-20d3-11e5-a393-4a63946f7eac::1") +class TestStatementConnectionSetting(base.PyMySQLReplicationTestCase): + def setUp(self): + super(TestStatementConnectionSetting, self).setUp() + self.stream.close() + self.stream = BinLogStreamReader( + self.database, + server_id=1024, + only_events=(RandEvent, QueryEvent), + fail_on_table_metadata_unavailable=True + ) + + def test_rand_event(self): + self.execute("SET @@binlog_format='STATEMENT'") + self.execute("CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data INT NOT NULL, PRIMARY KEY (id))") + self.execute("INSERT INTO test (data) VALUES(RAND())") + self.execute("COMMIT") + + self.assertEqual(self.bin_log_format(), "STATEMENT") + self.assertIsInstance(self.stream.fetchone(), QueryEvent) + self.assertIsInstance(self.stream.fetchone(), QueryEvent) + self.assertIsInstance(self.stream.fetchone(), RandEvent) + + def tearDown(self): + self.execute("SET @@binlog_format='ROW'") + self.assertEqual(self.bin_log_format(), "ROW") + super(TestStatementConnectionSetting, self).tearDown() + if __name__ == "__main__": import unittest From ff4d18443f8937598e9e34840083a3ca1056288d Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 14:55:47 +0900 Subject: [PATCH 14/22] test: move statement setting to setUp --- pymysqlreplication/tests/test_basic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index 2a6ec54a..d9b1a3f1 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -1012,9 +1012,9 @@ def setUp(self): only_events=(RandEvent, QueryEvent), fail_on_table_metadata_unavailable=True ) + self.execute("SET @@binlog_format='STATEMENT'") def test_rand_event(self): - self.execute("SET @@binlog_format='STATEMENT'") self.execute("CREATE TABLE test (id INT NOT NULL AUTO_INCREMENT, data INT NOT NULL, PRIMARY KEY (id))") self.execute("INSERT INTO test (data) VALUES(RAND())") self.execute("COMMIT") From baad3a947b0e450c16c593519598050ab04c876f Mon Sep 17 00:00:00 2001 From: starcat37 Date: Sat, 29 Jul 2023 14:59:53 +0900 Subject: [PATCH 15/22] Chore: Delete unnecessary comment --- .gitignore | 3 ++- examples/dump_events.py | 4 +--- pymysqlreplication/binlogstream.py | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 27e7b3c9..d22f7738 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ _build .python-version MANIFEST -venv/ \ No newline at end of file +# venv +venv/* \ No newline at end of file diff --git a/examples/dump_events.py b/examples/dump_events.py index 3287a5a9..1e99bcc0 100644 --- a/examples/dump_events.py +++ b/examples/dump_events.py @@ -22,9 +22,7 @@ def main(): stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=3, blocking=True, - # log_file = "binlog.000022", - # log_pos = 1265, - resume_stream = True, # log-pos도 명시할 경우 + resume_stream = True, ) for binlogevent in stream: diff --git a/pymysqlreplication/binlogstream.py b/pymysqlreplication/binlogstream.py index e06760fe..485ec10b 100644 --- a/pymysqlreplication/binlogstream.py +++ b/pymysqlreplication/binlogstream.py @@ -347,9 +347,9 @@ def __connect_to_stream(self): + bytes(bytearray([COM_BINLOG_DUMP])) if self.__resume_stream: - prelude += struct.pack(' Date: Sat, 29 Jul 2023 15:03:22 +0900 Subject: [PATCH 16/22] Chore: delete unnecessary venv/* in .gitignore --- .gitignore | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index d22f7738..224181fe 100644 --- a/.gitignore +++ b/.gitignore @@ -42,7 +42,4 @@ _build # Pyenv .python-version -MANIFEST - -# venv -venv/* \ No newline at end of file +MANIFEST \ No newline at end of file From af6425d79536360ca29345fc75bce3fc0b099e2f Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:05:29 +0900 Subject: [PATCH 17/22] comment: add rand_event warning description --- pymysqlreplication/event.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index 248735e0..ec72c6c9 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -440,6 +440,9 @@ class RandEvent(BinLogEvent): """ RandEvent is generated every time a statement uses the RAND() function. Indicates the seed values to use for generating a random number with RAND() in the next statement. + Warning + - RAND_EVENT only works in statement-based logging. (need to set binlog_format as 'STATEMENT') + - RAND_EVENT only works when the seed number is not specified. Attributes: seed1 From 243f099bcec610337c238298c780cb89c83baf32 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:07:17 +0900 Subject: [PATCH 18/22] refactor: change RandEvent import position --- .gitignore | 2 +- pymysqlreplication/binlogstream.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 224181fe..9a27e404 100644 --- a/.gitignore +++ b/.gitignore @@ -42,4 +42,4 @@ _build # Pyenv .python-version -MANIFEST \ No newline at end of file +MANIFEST diff --git a/pymysqlreplication/binlogstream.py b/pymysqlreplication/binlogstream.py index 485ec10b..2c300f16 100644 --- a/pymysqlreplication/binlogstream.py +++ b/pymysqlreplication/binlogstream.py @@ -14,8 +14,8 @@ QueryEvent, RotateEvent, FormatDescriptionEvent, XidEvent, GtidEvent, StopEvent, XAPrepareEvent, BeginLoadQueryEvent, ExecuteLoadQueryEvent, - RandEvent, - HeartbeatLogEvent, NotImplementedEvent, MariadbGtidEvent) + HeartbeatLogEvent, NotImplementedEvent, + MariadbGtidEvent, RandEvent) from .exceptions import BinLogNotEnabled from .row_event import ( UpdateRowsEvent, WriteRowsEvent, DeleteRowsEvent, TableMapEvent) From 2edca88b5499bb1b9690ed48b2cb4fa42d4ec302 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 29 Jul 2023 15:12:29 +0900 Subject: [PATCH 19/22] revert: remove resume_stream=True in example --- examples/dump_events.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/dump_events.py b/examples/dump_events.py index 1e99bcc0..e0de09f1 100644 --- a/examples/dump_events.py +++ b/examples/dump_events.py @@ -21,9 +21,7 @@ def main(): # the end of the stream stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS, server_id=3, - blocking=True, - resume_stream = True, - ) + blocking=True) for binlogevent in stream: binlogevent.dump() From 6fda5457c760ec8d7d021dbe36fccd218a84191c Mon Sep 17 00:00:00 2001 From: sean Date: Wed, 2 Aug 2023 16:20:01 +0900 Subject: [PATCH 20/22] test: add rand event seed type --- pymysqlreplication/tests/test_basic.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pymysqlreplication/tests/test_basic.py b/pymysqlreplication/tests/test_basic.py index d9b1a3f1..9e16f5c3 100644 --- a/pymysqlreplication/tests/test_basic.py +++ b/pymysqlreplication/tests/test_basic.py @@ -1022,7 +1022,11 @@ def test_rand_event(self): self.assertEqual(self.bin_log_format(), "STATEMENT") self.assertIsInstance(self.stream.fetchone(), QueryEvent) self.assertIsInstance(self.stream.fetchone(), QueryEvent) - self.assertIsInstance(self.stream.fetchone(), RandEvent) + + expect_rand_event = self.stream.fetchone() + self.assertIsInstance(expect_rand_event, RandEvent) + self.assertEqual(type(expect_rand_event.seed1), int) + self.assertEqual(type(expect_rand_event.seed2), int) def tearDown(self): self.execute("SET @@binlog_format='ROW'") From 66c606987b7c1f256dddbc24e5b15f20ecf8e8e8 Mon Sep 17 00:00:00 2001 From: heehehe Date: Sat, 5 Aug 2023 13:26:37 +0900 Subject: [PATCH 21/22] comment: add description for attributes --- pymysqlreplication/event.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index ec72c6c9..7150f203 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -445,8 +445,8 @@ class RandEvent(BinLogEvent): - RAND_EVENT only works when the seed number is not specified. Attributes: - seed1 - seed2 + seed1: value for the first seed + seed2: value for the second seed """ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs): From 547c05dabd628bae5c2fe406376bb12f147cf0dd Mon Sep 17 00:00:00 2001 From: mikaniz Date: Mon, 7 Aug 2023 22:11:30 +0900 Subject: [PATCH 22/22] docs: Update docstring style --- pymysqlreplication/event.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pymysqlreplication/event.py b/pymysqlreplication/event.py index 7150f203..128da51a 100644 --- a/pymysqlreplication/event.py +++ b/pymysqlreplication/event.py @@ -440,13 +440,12 @@ class RandEvent(BinLogEvent): """ RandEvent is generated every time a statement uses the RAND() function. Indicates the seed values to use for generating a random number with RAND() in the next statement. - Warning - - RAND_EVENT only works in statement-based logging. (need to set binlog_format as 'STATEMENT') - - RAND_EVENT only works when the seed number is not specified. - Attributes: - seed1: value for the first seed - seed2: value for the second seed + RandEvent only works in statement-based logging (need to set binlog_format as 'STATEMENT') + and only works when the seed number is not specified. + + :ivar seed1: int - value for the first seed + :ivar seed2: int - value for the second seed """ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs):