diff options
Diffstat (limited to 'Modules/_sqlite/connection.c')
-rw-r--r-- | Modules/_sqlite/connection.c | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 6e7101ade9..a06755624b 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -187,12 +187,12 @@ pysqlite_connection_init_impl(pysqlite_Connection *self, self->Error = state->Error; self->InterfaceError = state->InterfaceError; self->DatabaseError = state->DatabaseError; - self->DataError = pysqlite_DataError; - self->OperationalError = pysqlite_OperationalError; - self->IntegrityError = pysqlite_IntegrityError; + self->DataError = state->DataError; + self->OperationalError = state->OperationalError; + self->IntegrityError = state->IntegrityError; self->InternalError = state->InternalError; - self->ProgrammingError = pysqlite_ProgrammingError; - self->NotSupportedError = pysqlite_NotSupportedError; + self->ProgrammingError = state->ProgrammingError; + self->NotSupportedError = state->NotSupportedError; if (PySys_Audit("sqlite3.connect/handle", "O", self) < 0) { return -1; @@ -390,13 +390,16 @@ pysqlite_connection_close_impl(pysqlite_Connection *self) */ int pysqlite_check_connection(pysqlite_Connection* con) { + pysqlite_state *state = pysqlite_get_state(NULL); if (!con->initialized) { - PyErr_SetString(pysqlite_ProgrammingError, "Base Connection.__init__ not called."); + PyErr_SetString(state->ProgrammingError, + "Base Connection.__init__ not called."); return 0; } if (!con->db) { - PyErr_SetString(pysqlite_ProgrammingError, "Cannot operate on a closed database."); + PyErr_SetString(state->ProgrammingError, + "Cannot operate on a closed database."); return 0; } else { return 1; @@ -858,12 +861,12 @@ pysqlite_connection_create_function_impl(pysqlite_Connection *self, if (deterministic) { #if SQLITE_VERSION_NUMBER < 3008003 - PyErr_SetString(pysqlite_NotSupportedError, + PyErr_SetString(self->NotSupportedError, "deterministic=True requires SQLite 3.8.3 or higher"); return NULL; #else if (sqlite3_libversion_number() < 3008003) { - PyErr_SetString(pysqlite_NotSupportedError, + PyErr_SetString(self->NotSupportedError, "deterministic=True requires SQLite 3.8.3 or higher"); return NULL; } @@ -882,7 +885,7 @@ pysqlite_connection_create_function_impl(pysqlite_Connection *self, if (rc != SQLITE_OK) { /* Workaround for SQLite bug: no error code or string is available here */ - PyErr_SetString(pysqlite_OperationalError, "Error creating function"); + PyErr_SetString(self->OperationalError, "Error creating function"); return NULL; } Py_RETURN_NONE; @@ -921,7 +924,7 @@ pysqlite_connection_create_aggregate_impl(pysqlite_Connection *self, &_destructor); // will decref func if (rc != SQLITE_OK) { /* Workaround for SQLite bug: no error code or string is available here */ - PyErr_SetString(pysqlite_OperationalError, "Error creating aggregate"); + PyErr_SetString(self->OperationalError, "Error creating aggregate"); return NULL; } Py_RETURN_NONE; @@ -1068,7 +1071,8 @@ pysqlite_connection_set_authorizer_impl(pysqlite_Connection *self, rc = sqlite3_set_authorizer(self->db, _authorizer_callback, authorizer_cb); } if (rc != SQLITE_OK) { - PyErr_SetString(pysqlite_OperationalError, "Error setting authorizer callback"); + PyErr_SetString(self->OperationalError, + "Error setting authorizer callback"); Py_XSETREF(self->function_pinboard_authorizer_cb, NULL); return NULL; } @@ -1181,7 +1185,8 @@ pysqlite_connection_enable_load_extension_impl(pysqlite_Connection *self, rc = sqlite3_enable_load_extension(self->db, onoff); if (rc != SQLITE_OK) { - PyErr_SetString(pysqlite_OperationalError, "Error enabling load extension"); + PyErr_SetString(self->OperationalError, + "Error enabling load extension"); return NULL; } else { Py_RETURN_NONE; @@ -1215,7 +1220,7 @@ pysqlite_connection_load_extension_impl(pysqlite_Connection *self, rc = sqlite3_load_extension(self->db, extension_name, 0, &errmsg); if (rc != 0) { - PyErr_SetString(pysqlite_OperationalError, errmsg); + PyErr_SetString(self->OperationalError, errmsg); return NULL; } else { Py_RETURN_NONE; @@ -1227,7 +1232,7 @@ int pysqlite_check_thread(pysqlite_Connection* self) { if (self->check_same_thread) { if (PyThread_get_thread_ident() != self->thread_ident) { - PyErr_Format(pysqlite_ProgrammingError, + PyErr_Format(self->ProgrammingError, "SQLite objects created in a thread can only be used in that same thread. " "The object was created in thread id %lu and this is thread id %lu.", self->thread_ident, PyThread_get_thread_ident()); @@ -1579,7 +1584,7 @@ pysqlite_connection_iterdump_impl(pysqlite_Connection *self) pyfn_iterdump = _PyDict_GetItemIdWithError(module_dict, &PyId__iterdump); if (!pyfn_iterdump) { if (!PyErr_Occurred()) { - PyErr_SetString(pysqlite_OperationalError, + PyErr_SetString(self->OperationalError, "Failed to obtain _iterdump() reference"); } goto finally; @@ -1634,7 +1639,7 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, /* Since 3.8.8 this is already done, per commit https://www.sqlite.org/src/info/169b5505498c0a7e */ if (!sqlite3_get_autocommit(target->db)) { - PyErr_SetString(pysqlite_OperationalError, "target is in transaction"); + PyErr_SetString(self->OperationalError, "target is in transaction"); return NULL; } #endif @@ -1746,7 +1751,8 @@ pysqlite_connection_create_collation_impl(pysqlite_Connection *self, { continue; } else { - PyErr_SetString(pysqlite_ProgrammingError, "invalid character in collation name"); + PyErr_SetString(self->ProgrammingError, + "invalid character in collation name"); goto finally; } } |