Обратные вызовы уведомления об изменении данных
void *sqlite3_update_hook( sqlite3*, void(*)(void *,int ,char const *,char const *,sqlite3_int64), void* );
Интерфейс sqlite3_update_hook() регистрирует функцию обратного вызова для подключения к базе данных, указанного первым аргументом. Эта функция вызывается при каждом обновлении, добавлении или удалении строки в таблице с rowid. Любой обратный вызов, заданный предыдущим вызовом этой функции для того же подключения к базе данных, заменяется.
Второй аргумент — указатель на функцию, которую нужно вызвать при обновлении, добавлении или удалении строки в таблице с rowid. Обработчик обновлений отключается, если вызвать sqlite3_update_hook() со значением NULL во втором параметре. Первый аргумент обратного вызова — это копия третьего аргумента sqlite3_update_hook(). Второй аргумент обратного вызова принимает одно из значений SQLITE_INSERT, SQLITE_DELETE или SQLITE_UPDATE в зависимости от операции, вызвавшей обратный вызов. Третий и четвертый аргументы обратного вызова содержат указатели на имя базы данных и имя таблицы, в которой находится затронутая строка. Последний параметр обратного вызова — это rowid строки. В случае обновления это rowid после обновления.
Обработчик обновлений не вызывается при изменении внутренних системных таблиц (например, sqlite_sequence). Он также не вызывается при изменении таблиц WITHOUT ROWID.
В текущей реализации обработчик обновлений не вызывается при удалении конфликтующих строк из-за предложения ON CONFLICT REPLACE. Обработчик также не вызывается при удалении строк с использованием оптимизации усечения. Исключения, описанные в этом абзаце, могут измениться в будущих выпусках SQLite.
В настоящее время не определено, вызывается ли обработчик обновлений до или после соответствующего изменения; это может зависеть от типа изменения. Не полагайтесь на порядок вызова обработчика относительно конечного результата операции, которая его вызвала.
Реализация обработчика обновлений не должна выполнять никаких действий, изменяющих подключение к базе данных, вызвавшее этот обработчик. Любые действия по изменению подключения к базе данных необходимо отложить до завершения вызова sqlite3_step(), вызвавшего обработчик обновлений. Обратите внимание, что в смысле слова «изменять», использованного в этом абзаце, и sqlite3_prepare_v2(), и sqlite3_step() изменяют свои подключения к базам данных.
Функция sqlite3_update_hook(D,C,P) возвращает аргумент P из предыдущего вызова для того же подключения к базе данных D или NULL при первом вызове для D.
См. также интерфейсы sqlite3_commit_hook(), sqlite3_rollback_hook() и sqlite3_preupdate_hook().
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/update_hook.html