Hi all, at first i want to say a big "Thank you" to all sqlite developers. Using sqlite with Python since 4 years i always (when suited) announce sqlite in my examples for great open source software - indeed i see it as one of the best pieces of software in the world.
The same can be said for the C-API, everything works easy and as expected. Currently i work on database bound Python containers, the base class "lineup" having all the stuff for Python subscription, iteration and so on. It supports coding of this kind (with lu a "litelineup"): lu.dump("testdump.db3", "A"); lu.clear() lu.connect("testdump.db3", "A") lu.select("LIMIT 3"); print(lu); lu.hangup() Special convenince has litelineup.update(): Litelineup tracks cell modifications and writes them back so, being connected not only to a database, but having the notion of an associated table too. These convenient methods as litelineup.select(whereclause), litelinup.update(), litelineup.insert_keys(keys) and so on are not only for programmer's convenience, but also reuse prepared statements - litelineup has no general statement cache, but some frequently used prepared statements as (only internal) object attributes. Thus litelineup.hangup() must finalize them: PyObject *LiteLineUp_HangUp(litelineup *self) { Py_ssize_t i = 0; // if (self->COMMIT_stmt) sqlite3_finalize(self->COMMIT_stmt); while (L3LSELF->update_stmts[i++]) sqlite3_finalize(L3LSELF->update_stmts[i]); PyMem_Resize(L3LSELF->update_stmts, sqlite3_stmt*, 1); L3LSELF->update_stmts[0] = NULL; if (self->select_keys) sqlite3_finalize(self->select_keys); // sqlite3_stmt refers a connection if (self->select_glob) sqlite3_finalize(self->select_glob); if (self->insert_keys) sqlite3_finalize(self->insert_keys); // if (self->BEGIN_stmt) sqlite3_finalize(self->BEGIN_stmt); if (self->conn) { sqlite3_close(self->conn); self->conn=NULL; } Py_RETURN_NONE; } You see the uncommented rows for COMMIT_stmt and BEGIN_stmt. Indeed performing these lines crashes the litelineup. Is it true, that we must not finalize a statement prepared by sqlite3_prepare_v2(self->conn, "COMMIT ;", -1, &self->COMMIT_stmt, NULL); or BEGIN IMMEDIATE ? And if so, it is sensy at all to save them for reuse ? Thanks for reading, Joost _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users