Spec-Zone.ru › SQLite

Обратные вызовы уведомления о изменениях данных

void *sqlite3_update_hook(
  sqlite3*,
  void(*)(void *,int ,char const *,char const *,sqlite3_int64),
  void*
);

Интерфейс sqlite3_update_hook() регистрирует функцию обратного вызова в соединении с базой данных, идентифицируемом первым аргументом, которая вызывается всякий раз, когда строка обновляется, вставляется или удаляется в таблице rowid. Любой обратный вызов, установленный предыдущим вызовом этой функции для того же соединения с базой данных, перезаписывается.

Второй аргумент — указатель на функцию, которая вызывается при обновлении, вставке или удалении строки в таблице rowid. Первый аргумент обратного вызова — копия третьего аргумента функции 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API