Skip to content

Commit 621c5b7

Browse files
Merge pull request #150 from 26fe/mysql5.7
test run with mysql5.7
2 parents a05b2a4 + eb64704 commit 621c5b7

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

pymysqlreplication/tests/base.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def setUp(self):
2323
"host": "localhost",
2424
"user": "root",
2525
"passwd": "",
26+
"port": 3306,
2627
"use_unicode": True,
2728
"charset": "utf8",
2829
"db": "pymysqlreplication_test"
@@ -54,6 +55,10 @@ def isMySQL56AndMore(self):
5455
return True
5556
return False
5657

58+
def isMySQL57(self):
59+
version = float(self.getMySQLVersion().rsplit('.', 1)[0])
60+
return version == 5.7
61+
5762
@property
5863
def supportsGTID(self):
5964
if not self.isMySQL56AndMore():
@@ -82,3 +87,21 @@ def resetBinLog(self):
8287
self.stream.close()
8388
self.stream = BinLogStreamReader(self.database, server_id=1024,
8489
ignored_events=self.ignoredEvents())
90+
91+
def set_sql_mode(self):
92+
"""set sql_mode to test with same sql_mode (mysql 5.7 sql_mode default is changed)"""
93+
version = float(self.getMySQLVersion().rsplit('.', 1)[0])
94+
if version == 5.7:
95+
self.execute("set @@sql_mode='NO_ENGINE_SUBSTITUTION'")
96+
97+
def bin_log_format(self):
98+
query = "select @@binlog_format"
99+
cursor = self.execute(query)
100+
result = cursor.fetchone()
101+
return result[0]
102+
103+
def bin_log_basename(self):
104+
cursor = self.execute('select @@log_bin_basename')
105+
bin_log_basename = cursor.fetchone()[0]
106+
bin_log_basename = bin_log_basename.split("/")[-1]
107+
return bin_log_basename

pymysqlreplication/tests/test_basic.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def test_read_query_event(self):
3232

3333
event = self.stream.fetchone()
3434
self.assertEqual(event.position, 4)
35-
self.assertEqual(event.next_binlog, "mysql-bin.000001")
35+
self.assertEqual(event.next_binlog, self.bin_log_basename() + ".000001")
3636
self.assertIsInstance(event, RotateEvent)
3737

3838
self.assertIsInstance(self.stream.fetchone(), FormatDescriptionEvent)
@@ -47,7 +47,7 @@ def test_read_query_event_with_unicode(self):
4747

4848
event = self.stream.fetchone()
4949
self.assertEqual(event.position, 4)
50-
self.assertEqual(event.next_binlog, "mysql-bin.000001")
50+
self.assertEqual(event.next_binlog, self.bin_log_basename() + ".000001")
5151
self.assertIsInstance(event, RotateEvent)
5252

5353
self.assertIsInstance(self.stream.fetchone(), FormatDescriptionEvent)
@@ -146,6 +146,7 @@ def test_filtering_ignore_events(self):
146146

147147
def test_filtering_table_event(self):
148148
self.stream.close()
149+
self.assertEqual(self.bin_log_format(), "ROW")
149150
self.stream = BinLogStreamReader(
150151
self.database,
151152
server_id=1024,

pymysqlreplication/tests/test_data_type.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ def test_timestamp(self):
194194
def test_timestamp_mysql56(self):
195195
if not self.isMySQL56AndMore():
196196
self.skipTest("Not supported in this version of MySQL")
197+
self.set_sql_mode()
197198
create_query = '''CREATE TABLE test (test0 TIMESTAMP(0),
198199
test1 TIMESTAMP(1),
199200
test2 TIMESTAMP(2),
@@ -249,13 +250,15 @@ def test_zero_date(self):
249250
self.assertEqual(event.rows[0]["values"]["test2"], None)
250251

251252
def test_zero_month(self):
253+
self.set_sql_mode()
252254
create_query = "CREATE TABLE test (id INTEGER, test DATE, test2 DATE);"
253255
insert_query = "INSERT INTO test (id, test2) VALUES(1, '2015-00-21')"
254256
event = self.create_and_insert_value(create_query, insert_query)
255257
self.assertEqual(event.rows[0]["values"]["test"], None)
256258
self.assertEqual(event.rows[0]["values"]["test2"], None)
257259

258260
def test_zero_day(self):
261+
self.set_sql_mode()
259262
create_query = "CREATE TABLE test (id INTEGER, test DATE, test2 DATE);"
260263
insert_query = "INSERT INTO test (id, test2) VALUES(1, '2015-05-00')"
261264
event = self.create_and_insert_value(create_query, insert_query)
@@ -281,18 +284,23 @@ def test_datetime(self):
281284
self.assertEqual(event.rows[0]["values"]["test"], datetime.datetime(1984, 12, 3, 12, 33, 7))
282285

283286
def test_zero_datetime(self):
287+
self.set_sql_mode()
284288
create_query = "CREATE TABLE test (id INTEGER, test DATETIME NOT NULL DEFAULT 0);"
285289
insert_query = "INSERT INTO test (id) VALUES(1)"
286290
event = self.create_and_insert_value(create_query, insert_query)
287291
self.assertEqual(event.rows[0]["values"]["test"], None)
288292

289293
def test_broken_datetime(self):
294+
self.set_sql_mode()
290295
create_query = "CREATE TABLE test (test DATETIME NOT NULL);"
291296
insert_query = "INSERT INTO test VALUES('2013-00-00 00:00:00')"
292297
event = self.create_and_insert_value(create_query, insert_query)
293298
self.assertEqual(event.rows[0]["values"]["test"], None)
294299

295300
def test_year(self):
301+
if self.isMySQL57():
302+
# https://dev.mysql.com/doc/refman/5.7/en/migrating-to-year4.html
303+
self.skipTest("YEAR(2) is unsupported in mysql 5.7")
296304
create_query = "CREATE TABLE test (a YEAR(4), b YEAR(2))"
297305
insert_query = "INSERT INTO test VALUES(1984, 1984)"
298306
event = self.create_and_insert_value(create_query, insert_query)

0 commit comments

Comments
 (0)