summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-09-19 22:51:36 (GMT)
committerGitHub <noreply@github.com>2021-09-19 22:51:36 (GMT)
commit771a5467132f0400d4c987db8ba807f845b655bc (patch)
tree3990d7bbde1a024cac1be92a1959c8f2ee6639c2
parent1d42408495402b06ecae91420735aeff454be6b5 (diff)
downloadcpython-771a5467132f0400d4c987db8ba807f845b655bc.zip
cpython-771a5467132f0400d4c987db8ba807f845b655bc.tar.gz
cpython-771a5467132f0400d4c987db8ba807f845b655bc.tar.bz2
bpo-45040: Simplify sqlite3 transaction control functions (GH-28019)
-rw-r--r--Modules/_sqlite/connection.c68
-rw-r--r--Modules/_sqlite/cursor.c23
2 files changed, 28 insertions, 63 deletions
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 3b9e427..02481d9 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -459,43 +459,29 @@ static PyObject *
pysqlite_connection_commit_impl(pysqlite_Connection *self)
/*[clinic end generated code: output=3da45579e89407f2 input=39c12c04dda276a8]*/
{
- int rc;
- sqlite3_stmt* statement;
-
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!sqlite3_get_autocommit(self->db)) {
+ int rc;
Py_BEGIN_ALLOW_THREADS
+ sqlite3_stmt *statement;
rc = sqlite3_prepare_v2(self->db, "COMMIT", 7, &statement, NULL);
- Py_END_ALLOW_THREADS
- if (rc != SQLITE_OK) {
- _pysqlite_seterror(self->state, self->db);
- goto error;
+ if (rc == SQLITE_OK) {
+ (void)sqlite3_step(statement);
+ rc = sqlite3_finalize(statement);
}
-
- rc = pysqlite_step(statement);
- if (rc != SQLITE_DONE) {
- _pysqlite_seterror(self->state, self->db);
- }
-
- Py_BEGIN_ALLOW_THREADS
- rc = sqlite3_finalize(statement);
Py_END_ALLOW_THREADS
- if (rc != SQLITE_OK && !PyErr_Occurred()) {
- _pysqlite_seterror(self->state, self->db);
- }
+ if (rc != SQLITE_OK) {
+ (void)_pysqlite_seterror(self->state, self->db);
+ return NULL;
+ }
}
-error:
- if (PyErr_Occurred()) {
- return NULL;
- } else {
- Py_RETURN_NONE;
- }
+ Py_RETURN_NONE;
}
/*[clinic input]
@@ -508,9 +494,6 @@ static PyObject *
pysqlite_connection_rollback_impl(pysqlite_Connection *self)
/*[clinic end generated code: output=b66fa0d43e7ef305 input=12d4e8d068942830]*/
{
- int rc;
- sqlite3_stmt* statement;
-
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
@@ -518,34 +501,25 @@ pysqlite_connection_rollback_impl(pysqlite_Connection *self)
if (!sqlite3_get_autocommit(self->db)) {
pysqlite_do_all_statements(self);
+ int rc;
+
Py_BEGIN_ALLOW_THREADS
+ sqlite3_stmt *statement;
rc = sqlite3_prepare_v2(self->db, "ROLLBACK", 9, &statement, NULL);
- Py_END_ALLOW_THREADS
- if (rc != SQLITE_OK) {
- _pysqlite_seterror(self->state, self->db);
- goto error;
- }
-
- rc = pysqlite_step(statement);
- if (rc != SQLITE_DONE) {
- _pysqlite_seterror(self->state, self->db);
+ if (rc == SQLITE_OK) {
+ (void)sqlite3_step(statement);
+ rc = sqlite3_finalize(statement);
}
-
- Py_BEGIN_ALLOW_THREADS
- rc = sqlite3_finalize(statement);
Py_END_ALLOW_THREADS
- if (rc != SQLITE_OK && !PyErr_Occurred()) {
- _pysqlite_seterror(self->state, self->db);
+
+ if (rc != SQLITE_OK) {
+ (void)_pysqlite_seterror(self->state, self->db);
+ return NULL;
}
}
-error:
- if (PyErr_Occurred()) {
- return NULL;
- } else {
- Py_RETURN_NONE;
- }
+ Py_RETURN_NONE;
}
static int
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 06ce385..d0c9e7f 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -431,31 +431,22 @@ static int
begin_transaction(pysqlite_Connection *self)
{
int rc;
- sqlite3_stmt *statement;
Py_BEGIN_ALLOW_THREADS
+ sqlite3_stmt *statement;
rc = sqlite3_prepare_v2(self->db, self->begin_statement, -1, &statement,
NULL);
- Py_END_ALLOW_THREADS
-
- if (rc != SQLITE_OK) {
- _pysqlite_seterror(self->state, self->db);
- goto error;
+ if (rc == SQLITE_OK) {
+ (void)sqlite3_step(statement);
+ rc = sqlite3_finalize(statement);
}
-
- Py_BEGIN_ALLOW_THREADS
- sqlite3_step(statement);
- rc = sqlite3_finalize(statement);
Py_END_ALLOW_THREADS
- if (rc != SQLITE_OK && !PyErr_Occurred()) {
- _pysqlite_seterror(self->state, self->db);
- }
-
-error:
- if (PyErr_Occurred()) {
+ if (rc != SQLITE_OK) {
+ (void)_pysqlite_seterror(self->state, self->db);
return -1;
}
+
return 0;
}