Skip to content

Commit b620168

Browse files
committed
Don't fail on incomplete dates (with 0 as day or month), such as 2015-00-21 or 2015-05-00
1 parent 3b2441a commit b620168

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

pymysqlreplication/row_event.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,11 +252,10 @@ def __read_date(self):
252252
return None
253253

254254
year = (time & ((1 << 15) - 1) << 9) >> 9
255-
if year == 0:
256-
return None
257-
258255
month = (time & ((1 << 4) - 1) << 5) >> 5
259256
day = (time & ((1 << 5) - 1))
257+
if year == 0 or month == 0 or day == 0:
258+
return None
260259

261260
date = datetime.date(
262261
year=year,

pymysqlreplication/tests/test_data_type.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,20 @@ def test_zero_date(self):
248248
self.assertEqual(event.rows[0]["values"]["test"], None)
249249
self.assertEqual(event.rows[0]["values"]["test2"], None)
250250

251+
def test_zero_month(self):
252+
create_query = "CREATE TABLE test (id INTEGER, test DATE, test2 DATE);"
253+
insert_query = "INSERT INTO test (id, test2) VALUES(1, '2015-00-21')"
254+
event = self.create_and_insert_value(create_query, insert_query)
255+
self.assertEqual(event.rows[0]["values"]["test"], None)
256+
self.assertEqual(event.rows[0]["values"]["test2"], None)
257+
258+
def test_zero_day(self):
259+
create_query = "CREATE TABLE test (id INTEGER, test DATE, test2 DATE);"
260+
insert_query = "INSERT INTO test (id, test2) VALUES(1, '2015-05-00')"
261+
event = self.create_and_insert_value(create_query, insert_query)
262+
self.assertEqual(event.rows[0]["values"]["test"], None)
263+
self.assertEqual(event.rows[0]["values"]["test2"], None)
264+
251265
def test_time(self):
252266
create_query = "CREATE TABLE test (test TIME);"
253267
insert_query = "INSERT INTO test VALUES('12:33:18')"

0 commit comments

Comments
 (0)