Right now it's quite difficult to implement any kind of higher-level wrapper over sqlite3_prepare()/sqlite3_step()/etc., because of the semantics of the SQLITE_SCHEMA error. If you bind values to parameters of a sqlite3_stmt, you have to redo that binding after you recreate the sqlite3_stmt due to SQLITE_SCHEMA. This is cumbersome, because it means that you have to expose essentially SQLite internals into user code, and the user code has to loop around every statement until it succeeds or errors out with something other than SQLITE_SCHEMA. Is there any reason that step() can't recreate the bits of the VDBE that need to be updated itself in case of a SQLITE_SCHEMA error, while preserving current parameter bindings?
Thanks, - Vlad