== `sqlite/hooks.hpp` WARNING: This API might be subject change, if a better solution for ownership is found. === `commit_hook` & `rollback_commit` The https://www.sqlite.org/c3ref/commit_hook.html[commit hook] gets called before a commit gets performed. Likewise the rollback hook gets invoked before a rollback. If `func` returns true, the commit goes, otherwise it gets rolled back. NOTE: If the function is not a free function pointer, this function will *NOT* take ownership. NOTE: If `func` is a `nullptr` the hook gets reset. [source,cpp] ---- template bool commit_hook(connection & conn, Func && func); template bool rollback_hook(connection & conn, Func && func); ---- return:: `true` if a hook has been replaced. conn:: The database connection to install the hook in func:: The hook function. It must be callable without any parameter, return a `bool` and be `noexcept`. === `update_hook` The https://www.sqlite.org/c3ref/update_hook.html[update hook] The update hook gets called when an update was performed. NOTE: If the function is not a free function pointer, this function will *NOT* take ownership. NOTE: If `func` is a `nullptr` the hook gets reset. [source,cpp] ---- template bool update_hook(connection & conn, Func && func); ---- return:: `true` if a hook has been replaced. conn:: The database connection to install the hook in func:: The signature of the function is `void(int op, core::string_view db, core::string_view table, sqlite3_int64 id)`. `op` is either `SQLITE_INSERT`, `SQLITE_DELETE` and `SQLITE_UPDATE`. The function must be noexcept. === `preupdate_hook` NOTE: The https://www.sqlite.org/c3ref/preupdate_blobwrite.html[preupdate hook] requires sqlite to be required with `SQLITE_ENABLE_PREUPDATE_HOOK` true. This hook gets called before an update. [source,cpp] ---- struct preupdate_context { // Returns the old value, i.e. the value before the update. system::result old(int column) const; // The count of colums to be updated int count() const; // The nesting depth of the update. int depth() const; // The new value to be written to column system::result new_(int column) const; // Query the status of blob access, e.g. when using blob_handle <1> int blob_write() const; explicit preupdate_context(sqlite3 * db) noexcept; }; template bool preupdate_hook(connection & conn, Func && func); ---- <1> See https://www.sqlite.org/c3ref/preupdate_blobwrite.html[sqlite/preupdate_blobwrite] return:: `true` if a hook has been replaced. conn:: The database connection to install the hook in func:: The signature of the function is below: [source,cpp] ---- void preupdate_hook(sqlite::preupdate_context ctx, int op, const char * db_name, const char * table_name, sqlite3_int64 current_key, sqlite3_int64 new_key); ----