From d2cb6bda16ab2b24443bbdde4d47165fbca26059 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Bal=C3=A1=C5=BE?= Date: Wed, 7 May 2025 22:10:06 +0200 Subject: [PATCH] test: test behaviour of cursors with a row maker returning None --- tests/test_cursor_common.py | 17 +++++++++++++++++ tests/test_cursor_common_async.py | 17 +++++++++++++++++ tests/test_cursor_server.py | 17 +++++++++++++++++ tests/test_cursor_server_async.py | 17 +++++++++++++++++ 4 files changed, 68 insertions(+) diff --git a/tests/test_cursor_common.py b/tests/test_cursor_common.py index d99f734e0..74c428448 100644 --- a/tests/test_cursor_common.py +++ b/tests/test_cursor_common.py @@ -883,3 +883,20 @@ def test_error_no_result(conn): psycopg.ProgrammingError, match="last operation.*result status: EMPTY_QUERY" ): cur.fetchone() + + +def test_row_maker_returns_none(conn): + cur = conn.cursor(row_factory=rows.scalar_row) + query = "values (null), (0)" + recs = [None, 0] + + cur.execute(query) + assert [cur.fetchone() for _ in range(len(recs))] == recs + cur.execute(query) + assert cur.fetchmany(len(recs)) == recs + cur.execute(query) + assert cur.fetchall() == recs + cur.execute(query) + assert list(cur) == recs + stream = cur.stream(query) + assert list(stream) == recs diff --git a/tests/test_cursor_common_async.py b/tests/test_cursor_common_async.py index 03e5ef6b0..2b0624028 100644 --- a/tests/test_cursor_common_async.py +++ b/tests/test_cursor_common_async.py @@ -890,3 +890,20 @@ async def test_error_no_result(aconn): psycopg.ProgrammingError, match="last operation.*result status: EMPTY_QUERY" ): await cur.fetchone() + + +async def test_row_maker_returns_none(aconn): + cur = aconn.cursor(row_factory=rows.scalar_row) + query = "values (null), (0)" + recs = [None, 0] + + await cur.execute(query) + assert [await cur.fetchone() for _ in range(len(recs))] == recs + await cur.execute(query) + assert await cur.fetchmany(len(recs)) == recs + await cur.execute(query) + assert await cur.fetchall() == recs + await cur.execute(query) + assert await alist(cur) == recs + stream = cur.stream(query) + assert await alist(stream) == recs diff --git a/tests/test_cursor_server.py b/tests/test_cursor_server.py index cc2d4cb5e..0c28447bc 100644 --- a/tests/test_cursor_server.py +++ b/tests/test_cursor_server.py @@ -554,3 +554,20 @@ def test_stolen_cursor_close(conn): cur1.execute("declare test cursor for select generate_series(1, 6)") cur2 = conn.cursor("test") cur2.close() + + +def test_row_maker_returns_none(conn): + cur = conn.cursor(row_factory=rows.scalar_row) + query = "values (null), (0)" + recs = [None, 0] + + cur.execute(query) + assert [cur.fetchone() for _ in range(len(recs))] == recs + cur.execute(query) + assert cur.fetchmany(len(recs)) == recs + cur.execute(query) + assert cur.fetchall() == recs + cur.execute(query) + assert list(cur) == recs + stream = cur.stream(query) + assert list(stream) == recs diff --git a/tests/test_cursor_server_async.py b/tests/test_cursor_server_async.py index 98ae9a278..014223c31 100644 --- a/tests/test_cursor_server_async.py +++ b/tests/test_cursor_server_async.py @@ -560,3 +560,20 @@ async def test_stolen_cursor_close(aconn): await cur1.execute("declare test cursor for select generate_series(1, 6)") cur2 = aconn.cursor("test") await cur2.close() + + +async def test_row_maker_returns_none(aconn): + cur = aconn.cursor(row_factory=rows.scalar_row) + query = "values (null), (0)" + recs = [None, 0] + + await cur.execute(query) + assert [await cur.fetchone() for _ in range(len(recs))] == recs + await cur.execute(query) + assert await cur.fetchmany(len(recs)) == recs + await cur.execute(query) + assert await cur.fetchall() == recs + await cur.execute(query) + assert await alist(cur) == recs + stream = cur.stream(query) + assert await alist(stream) == recs -- 2.47.2