|
|
|
@ -111,8 +111,6 @@ pysqlite_connection_init_impl(pysqlite_Connection *self, |
|
|
|
|
|
|
|
const char *database = PyBytes_AsString(database_obj); |
|
|
|
|
|
|
|
self->initialized = 1; |
|
|
|
|
|
|
|
self->begin_statement = NULL; |
|
|
|
|
|
|
|
Py_CLEAR(self->statement_cache); |
|
|
|
@ -147,7 +145,7 @@ pysqlite_connection_init_impl(pysqlite_Connection *self, |
|
|
|
Py_INCREF(isolation_level); |
|
|
|
} |
|
|
|
Py_CLEAR(self->isolation_level); |
|
|
|
if (pysqlite_connection_set_isolation_level(self, isolation_level, NULL) < 0) { |
|
|
|
if (pysqlite_connection_set_isolation_level(self, isolation_level, NULL) != 0) { |
|
|
|
Py_DECREF(isolation_level); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
@ -195,6 +193,8 @@ pysqlite_connection_init_impl(pysqlite_Connection *self, |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
self->initialized = 1; |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
@ -371,6 +371,13 @@ pysqlite_connection_close_impl(pysqlite_Connection *self) |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
if (!self->initialized) { |
|
|
|
pysqlite_state *state = pysqlite_get_state(NULL); |
|
|
|
PyErr_SetString(state->ProgrammingError, |
|
|
|
"Base Connection.__init__ not called."); |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
|
|
|
|
pysqlite_do_all_statements(self, ACTION_FINALIZE, 1); |
|
|
|
connection_close(self); |
|
|
|
|
|
|
|
@ -1258,6 +1265,9 @@ int pysqlite_check_thread(pysqlite_Connection* self) |
|
|
|
|
|
|
|
static PyObject* pysqlite_connection_get_isolation_level(pysqlite_Connection* self, void* unused) |
|
|
|
{ |
|
|
|
if (!pysqlite_check_connection(self)) { |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
return Py_NewRef(self->isolation_level); |
|
|
|
} |
|
|
|
|
|
|
|
@ -1289,11 +1299,17 @@ pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* iso |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if (isolation_level == Py_None) { |
|
|
|
PyObject *res = pysqlite_connection_commit(self, NULL); |
|
|
|
if (!res) { |
|
|
|
return -1; |
|
|
|
/* We might get called during connection init, so we cannot use |
|
|
|
* pysqlite_connection_commit() here. */ |
|
|
|
if (self->db && !sqlite3_get_autocommit(self->db)) { |
|
|
|
int rc; |
|
|
|
Py_BEGIN_ALLOW_THREADS |
|
|
|
rc = sqlite3_exec(self->db, "COMMIT", NULL, NULL, NULL); |
|
|
|
Py_END_ALLOW_THREADS |
|
|
|
if (rc != SQLITE_OK) { |
|
|
|
return _pysqlite_seterror(self->db); |
|
|
|
} |
|
|
|
} |
|
|
|
Py_DECREF(res); |
|
|
|
|
|
|
|
self->begin_statement = NULL; |
|
|
|
} else { |
|
|
|
|