summaryrefslogtreecommitdiff
path: root/Modules/_sqlite/connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_sqlite/connection.c')
-rw-r--r--Modules/_sqlite/connection.c42
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;
}
}