#define ADD_TYPE(module, type) \
do { \
if (PyModule_AddType(module, &type) < 0) { \
- Py_DECREF(module); \
- return NULL; \
+ goto error; \
} \
} while (0)
return NULL;
}
+ int rc = sqlite3_initialize();
+ if (rc != SQLITE_OK) {
+ PyErr_SetString(PyExc_ImportError, sqlite3_errstr(rc));
+ return NULL;
+ }
+
module = PyModule_Create(&_sqlite3module);
if (!module ||
(pysqlite_statement_setup_types(module) < 0) ||
(pysqlite_prepare_protocol_setup_types(module) < 0)
) {
- Py_XDECREF(module);
- return NULL;
+ goto error;
}
ADD_TYPE(module, *pysqlite_ConnectionType);
goto error;
}
-error:
- if (PyErr_Occurred())
- {
- PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed");
- Py_DECREF(module);
- module = NULL;
- }
return module;
+
+error:
+ sqlite3_shutdown();
+ PyErr_SetString(PyExc_ImportError, MODULE_NAME ": init failed");
+ Py_XDECREF(module);
+ return NULL;
}