diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2021-06-03 16:38:09 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-03 16:38:09 (GMT) |
commit | 84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6 (patch) | |
tree | 1874fc537dde6821c40fdfafe54dd0b6a59e84e7 /Modules/_sqlite/cursor.c | |
parent | 41317801a95c758c3fc04c4fb332ac453c9e3ad3 (diff) | |
download | cpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.zip cpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.tar.gz cpython-84d80f5f30b1f545083c70a7d4e1e79ab75f9fa6.tar.bz2 |
[3.10] bpo-42972: Track sqlite3 statement objects (GH-26475) (GH-26515)
Allocate and track statement objects in pysqlite_statement_create.
By allocating and tracking creation of statement object in
pysqlite_statement_create(), the caller does not need to worry about GC
syncronization, and eliminates the possibility of getting a badly
created object. All related fault handling is moved to
pysqlite_statement_create().
Co-authored-by: Victor Stinner <vstinner@python.org>.
(cherry picked from commit fffa0f92adaaed0bcb3907d982506f78925e9052)
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Diffstat (limited to 'Modules/_sqlite/cursor.c')
-rw-r--r-- | Modules/_sqlite/cursor.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 558b43a..0335e98 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -507,13 +507,8 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation if (self->statement->in_use) { Py_SETREF(self->statement, - PyObject_GC_New(pysqlite_Statement, pysqlite_StatementType)); - if (!self->statement) { - goto error; - } - rc = pysqlite_statement_create(self->statement, self->connection, operation); - if (rc != SQLITE_OK) { - Py_CLEAR(self->statement); + pysqlite_statement_create(self->connection, operation)); + if (self->statement == NULL) { goto error; } } |