From: Martin Baláž Date: Wed, 7 May 2025 20:10:06 +0000 (+0200) Subject: test: test behaviour of cursors with a row maker returning None X-Git-Tag: 3.2.8~15^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2cb6bda16ab2b24443bbdde4d47165fbca26059;p=thirdparty%2Fpsycopg.git test: test behaviour of cursors with a row maker returning None --- 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