[Python-checkins] bpo-44965: Early exit for non-DML statements in sqlite3.Cursor.executemany() (GH-27865)
pablogsal
webhook-mailer at python.org
Sat Aug 21 14:59:03 EDT 2021
https://github.com/python/cpython/commit/878e7267016ba25d05d8736349fb897c756f311d
commit: 878e7267016ba25d05d8736349fb897c756f311d
branch: main
author: Erlend Egeberg Aasland <erlend.aasland at innova.no>
committer: pablogsal <Pablogsal at gmail.com>
date: 2021-08-21T19:58:58+01:00
summary:
bpo-44965: Early exit for non-DML statements in sqlite3.Cursor.executemany() (GH-27865)
files:
M Modules/_sqlite/cursor.c
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 7308f3062da4b9..e418cafb4feb60 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -548,6 +548,13 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
goto error;
}
+ pysqlite_state *state = self->connection->state;
+ if (multiple && sqlite3_stmt_readonly(self->statement->st)) {
+ PyErr_SetString(state->ProgrammingError,
+ "executemany() can only execute DML statements.");
+ goto error;
+ }
+
if (self->statement->in_use) {
Py_SETREF(self->statement,
pysqlite_statement_create(self->connection, operation));
@@ -570,7 +577,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
}
}
- pysqlite_state *state = self->connection->state;
while (1) {
parameters = PyIter_Next(parameters_iter);
if (!parameters) {
@@ -653,13 +659,6 @@ _pysqlite_query_execute(pysqlite_Cursor* self, int multiple, PyObject* operation
}
if (rc == SQLITE_ROW) {
- if (multiple) {
- PyErr_SetString(state->ProgrammingError,
- "executemany() can only execute DML "
- "statements.");
- goto error;
- }
-
self->next_row = _pysqlite_fetch_one_row(self);
if (self->next_row == NULL)
goto error;
More information about the Python-checkins
mailing list