From f04e098105a930b888077bcba4517c6eba2bfb67 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Tue, 18 Nov 2025 10:55:17 +0100 Subject: [PATCH] Fix for CONPY-329: Return None for invalid dates instead of raising an exception --- mariadb/mariadb_codecs.c | 7 ++++++- testing/test/integration/test_cursor.py | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/mariadb/mariadb_codecs.c b/mariadb/mariadb_codecs.c index 7c10273..40f1725 100644 --- a/mariadb/mariadb_codecs.c +++ b/mariadb/mariadb_codecs.c @@ -790,7 +790,6 @@ field_fetch_callback(void *data, unsigned int column, unsigned char **row) if (!len) { - self->values[column]= PyDate_FromDate(0,0,0); break; } year= uint2korr(*row); @@ -899,6 +898,12 @@ field_fetch_callback(void *data, unsigned int column, unsigned char **row) default: break; } + if (!self->values[column]) + { + PyErr_Clear(); + Py_INCREF(Py_None); + self->values[column]= Py_None; + } /* check if values need to be converted */ if (self->connection->converter) { diff --git a/testing/test/integration/test_cursor.py b/testing/test/integration/test_cursor.py index 4f336fc..ef6db23 100644 --- a/testing/test/integration/test_cursor.py +++ b/testing/test/integration/test_cursor.py @@ -57,6 +57,15 @@ class TestCursor(unittest.TestCase): self.assertEqual(row[1], 255) cursor.execute("DROP TABLE t1") + def test_conpy329(self): + cursor= self.connection.cursor(binary=True) + cursor.execute("CREATE TEMPORARY TABLE t1 (a date)") + cursor.execute("INSERT INTO t1 VALUES ('0000-01-01')") + cursor.execute("SELECT * FROM t1") + row= cursor.fetchone() + self.assertEqual(row[0],None) + cursor.execute("DROP TABLE t1") + def test_conpy306(self): with create_connection() as conn: cursor=conn.cursor(binary=False)