summaryrefslogtreecommitdiffstats
path: root/Modules/_sqlite/module.c
diff options
context:
space:
mode:
Diffstat (limited to 'Modules/_sqlite/module.c')
-rw-r--r--Modules/_sqlite/module.c55
1 files changed, 19 insertions, 36 deletions
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index 2607c6e..3d81ad8 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -42,13 +42,6 @@ module _sqlite3
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=81e330492d57488e]*/
/* static objects at module-level */
-
-PyObject *pysqlite_OperationalError = NULL;
-PyObject *pysqlite_ProgrammingError = NULL;
-PyObject *pysqlite_IntegrityError = NULL;
-PyObject *pysqlite_DataError = NULL;
-PyObject *pysqlite_NotSupportedError = NULL;
-
PyObject* _pysqlite_converters = NULL;
int _pysqlite_enable_callback_tracebacks = 0;
int pysqlite_BaseTypeAdapted = 0;
@@ -137,7 +130,8 @@ pysqlite_enable_shared_cache_impl(PyObject *module, int do_enable)
rc = sqlite3_enable_shared_cache(do_enable);
if (rc != SQLITE_OK) {
- PyErr_SetString(pysqlite_OperationalError, "Changing the shared_cache flag failed");
+ pysqlite_state *state = pysqlite_get_state(module);
+ PyErr_SetString(state->OperationalError, "Changing the shared_cache flag failed");
return NULL;
} else {
Py_RETURN_NONE;
@@ -357,17 +351,13 @@ do { \
} \
} while (0)
-#define ADD_EXCEPTION(module, name, exc, base) \
-do { \
- exc = PyErr_NewException(MODULE_NAME "." name, base, NULL); \
- if (!exc) { \
- goto error; \
- } \
- int res = PyModule_AddObjectRef(module, name, exc); \
- Py_DECREF(exc); \
- if (res < 0) { \
- goto error; \
- } \
+#define ADD_EXCEPTION(module, state, exc, base) \
+do { \
+ state->exc = PyErr_NewException(MODULE_NAME "." #exc, base, NULL); \
+ if (state->exc == NULL) { \
+ goto error; \
+ } \
+ ADD_TYPE(module, (PyTypeObject *)state->exc); \
} while (0)
PyMODINIT_FUNC PyInit__sqlite3(void)
@@ -404,27 +394,20 @@ PyMODINIT_FUNC PyInit__sqlite3(void)
ADD_TYPE(module, state->RowType);
/*** Create DB-API Exception hierarchy */
- ADD_EXCEPTION(module, "Error", state->Error, PyExc_Exception);
- ADD_EXCEPTION(module, "Warning", state->Warning, PyExc_Exception);
+ ADD_EXCEPTION(module, state, Error, PyExc_Exception);
+ ADD_EXCEPTION(module, state, Warning, PyExc_Exception);
/* Error subclasses */
- ADD_EXCEPTION(module, "InterfaceError", state->InterfaceError,
- state->Error);
- ADD_EXCEPTION(module, "DatabaseError", state->DatabaseError, state->Error);
+ ADD_EXCEPTION(module, state, InterfaceError, state->Error);
+ ADD_EXCEPTION(module, state, DatabaseError, state->Error);
/* DatabaseError subclasses */
- ADD_EXCEPTION(module, "InternalError", state->InternalError,
- state->DatabaseError);
- ADD_EXCEPTION(module, "OperationalError", pysqlite_OperationalError,
- state->DatabaseError);
- ADD_EXCEPTION(module, "ProgrammingError", pysqlite_ProgrammingError,
- state->DatabaseError);
- ADD_EXCEPTION(module, "IntegrityError", pysqlite_IntegrityError,
- state->DatabaseError);
- ADD_EXCEPTION(module, "DataError", pysqlite_DataError,
- state->DatabaseError);
- ADD_EXCEPTION(module, "NotSupportedError", pysqlite_NotSupportedError,
- state->DatabaseError);
+ ADD_EXCEPTION(module, state, InternalError, state->DatabaseError);
+ ADD_EXCEPTION(module, state, OperationalError, state->DatabaseError);
+ ADD_EXCEPTION(module, state, ProgrammingError, state->DatabaseError);
+ ADD_EXCEPTION(module, state, IntegrityError, state->DatabaseError);
+ ADD_EXCEPTION(module, state, DataError, state->DatabaseError);
+ ADD_EXCEPTION(module, state, NotSupportedError, state->DatabaseError);
/* Set integer constants */
if (add_integer_constants(module) < 0) {