From: Erlend Egeberg Aasland Date: Sat, 22 Jan 2022 09:40:22 +0000 (+0100) Subject: bpo-46249: Move set lastrowid out of the sqlite3 query loop (GH-30489) X-Git-Tag: v3.11.0a5~164 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=38afeb1a336f0451c0db86df567ef726f49f6438;p=thirdparty%2FPython%2Fcpython.git bpo-46249: Move set lastrowid out of the sqlite3 query loop (GH-30489) --- diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 2729a85f3195..4700afbbf118 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);