From 38afeb1a336f0451c0db86df567ef726f49f6438 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Sat, 22 Jan 2022 10:40:22 +0100 Subject: bpo-46249: Move set lastrowid out of the sqlite3 query loop (GH-30489) --- Modules/_sqlite/cursor.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 2729a85..4700afb 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -465,7 +465,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation int rc; int numcols; PyObject* column_name; - sqlite_int64 lastrowid; if (!check_cursor(self)) { goto error; @@ -630,16 +629,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation self->rowcount= -1L; } - if (!multiple) { - Py_BEGIN_ALLOW_THREADS - lastrowid = sqlite3_last_insert_rowid(self->connection->db); - Py_END_ALLOW_THREADS - Py_SETREF(self->lastrowid, PyLong_FromLongLong(lastrowid)); - if (self->lastrowid == NULL) { - goto error; - } - } - if (rc == SQLITE_DONE && !multiple) { pysqlite_statement_reset(self->statement); Py_CLEAR(self->statement); @@ -651,6 +640,17 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation Py_XDECREF(parameters); } + if (!multiple) { + sqlite_int64 lastrowid; + + Py_BEGIN_ALLOW_THREADS + lastrowid = sqlite3_last_insert_rowid(self->connection->db); + Py_END_ALLOW_THREADS + + Py_SETREF(self->lastrowid, PyLong_FromLongLong(lastrowid)); + // Fall through on error. + } + error: Py_XDECREF(parameters); Py_XDECREF(parameters_iter); -- cgit v0.12