From 81365f46a1502b5455aea51e5e387168ffd5d1ed Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Tue, 21 Sep 2021 23:46:57 +0200 Subject: [PATCH 1/2] bpo-45041: Restore sqlite3 executescript behaviour for select queries --- Modules/_sqlite/cursor.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 9bac607e9c9a6b..028f81c3a8b0ed 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -758,7 +758,7 @@ pysqlite_cursor_executescript_impl(pysqlite_Cursor *self, &tail); if (rc == SQLITE_OK) { do { - (void)sqlite3_step(stmt); + rc = sqlite3_step(stmt); } while (rc == SQLITE_ROW); rc = sqlite3_finalize(stmt); } From 81ddb8b48b5471d6f23aeb0d361c91356e87dde2 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Tue, 21 Sep 2021 23:53:07 +0200 Subject: [PATCH 2/2] Add regression test --- Lib/sqlite3/test/test_regression.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Lib/sqlite3/test/test_regression.py b/Lib/sqlite3/test/test_regression.py index ff356734860b64..3d71809d9c11cf 100644 --- a/Lib/sqlite3/test/test_regression.py +++ b/Lib/sqlite3/test/test_regression.py @@ -475,6 +475,17 @@ def dup(v): con.execute("drop table t") con.commit() + def test_executescript_step_through_select(self): + with managed_connect(":memory:", in_mem=True) as con: + values = [(v,) for v in range(5)] + with con: + con.execute("create table t(t)") + con.executemany("insert into t values(?)", values) + steps = [] + con.create_function("step", 1, lambda x: steps.append((x,))) + con.executescript("select step(t) from t") + self.assertEqual(steps, values) + if __name__ == "__main__": unittest.main()