Spec-Zone.ru › SQLite

Перехватчик фиксации журнала предварительной записи

void *sqlite3_wal_hook(
  sqlite3*,
  int(*)(void *,sqlite3*,const char*,int),
  void*
);

Функция sqlite3_wal_hook() используется для регистрации обратного вызова, который вызывается каждый раз, когда данные фиксируются в базе данных в режиме WAL.

Обратный вызов выполняется SQLite после фиксации транзакции и снятия связанной с ней блокировки записи базы данных, поэтому реализация может при необходимости читать, записывать данные или выполнять контрольную точку базы данных.

Первый параметр, передаваемый функции обратного вызова при её вызове, — это копия третьего параметра, переданного в sqlite3_wal_hook() при регистрации обратного вызова. Второй параметр — это копия дескриптора базы данных. Третий параметр — имя базы данных, в которую выполнялась запись: "main" или имя базы данных, подключённой с помощью ATTACH. Четвёртый параметр — количество страниц в файле журнала предварительной записи на данный момент, включая только что зафиксированные.

Функция обратного вызова обычно должна возвращать SQLITE_OK. Если возвращается код ошибки, эта ошибка распространяется вверх по стеку вызовов SQLite, в результате чего инструкция, вызвавшая обратный вызов, сообщает об ошибке, хотя фиксация уже произошла. Если обратный вызов возвращает SQLITE_ROW или SQLITE_DONE либо значение, не соответствующее ни одному допустимому коду ошибки SQLite, результат не определён.

Для одного дескриптора базы данных одновременно можно зарегистрировать не более одного обратного вызова журнала предварительной записи. Вызов sqlite3_wal_hook() заменяет поведение по умолчанию или ранее зарегистрированный обратный вызов журнала предварительной записи.

Возвращаемое значение — это копия третьего параметра предыдущего вызова, если он был, или 0.

Интерфейс sqlite3_wal_autocheckpoint() и прагма wal_autocheckpoint вызывают sqlite3_wal_hook() и перезаписывают все предыдущие настройки sqlite3_wal_hook().

Если с помощью этой функции задан обратный вызов журнала предварительной записи, для предотвращения неограниченного роста файла журнала предварительной записи следует периодически вызывать sqlite3_wal_checkpoint_v2() или PRAGMA wal_checkpoint.

Передача указателя NULL для обратного вызова полностью отключает автоматическое создание контрольных точек. Чтобы восстановить поведение по умолчанию, вызовите sqlite3_wal_autocheckpoint(db,1000) или используйте PRAGMA wal_checkpoint.

См. также списки объектов, констант и функций.

SQLite is in the Public Domain.
https://sqlite.org/c3ref/wal_hook.html

Spec-Zone.ru

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