mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
bpo-42064: Move sqlite3
exceptions to global state, part 2 of 2 (GH-26884)
Automerge-Triggered-By: GH:encukou
This commit is contained in:
parent
e5862f79c1
commit
05162993fe
8 changed files with 90 additions and 92 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue