Spec-Zone.ru › SQLite

Создание моментальной копии базы данных

int sqlite3_snapshot_get(
  sqlite3 *db,
  const char *zSchema,
  sqlite3_snapshot **ppSnapshot
);

Интерфейс sqlite3_snapshot_get(D,S,P) пытается создать новый объект sqlite3_snapshot, который записывает текущее состояние схемы S в подключении к базе данных D. При успехе интерфейс sqlite3_snapshot_get(D,S,P) записывает указатель на только что созданный объект sqlite3_snapshot в *P и возвращает SQLITE_OK. Если при вызове этой функции на схеме S ещё нет открытой транзакции чтения, она открывается автоматически.

Если эта функция открывает транзакцию чтения, то гарантируется, что возвращаемый объект моментальной копии не будет недействительным операцией записи или контрольной точки в базе данных до закрытия транзакции чтения. Это не гарантируется, если транзакция чтения уже открыта при вызове функции. В этом случае любая последующая операция записи или контрольной точки в базе данных может сделать возвращаемый дескриптор моментальной копии недействительным, даже если транзакция чтения остаётся открытой.

Для успешного выполнения этой функции должны выполняться следующие условия. Если любое из следующих утверждений ложно при вызове sqlite3_snapshot_get(), возвращается SQLITE_ERROR. В этом случае конечное значение *P не определено.

  • Дескриптор базы данных не должен быть в режиме автоматического подтверждения.

  • Схема S подключения к базе данных D должна быть базой данных в режиме WAL.

  • Не должна быть открыта транзакция записи на схеме S подключения к базе данных D.

  • В текущий файл журнала WAL (WAL) должно быть записано одно или несколько транзакций с момента его создания на диске (любым подключением). Это означает, что моментальная копия не может быть создана для базы данных в режиме WAL без файла WAL сразу после её первого открытия. Сначала в него должна быть записана хотя бы одна транзакция.

Функция также может вернуть SQLITE_NOMEM. Если она вызывается с дескриптором базы данных в режиме автоматического подтверждения, но терпит неудачу по какой-либо другой причине, то независимо от того, открыта ли транзакция чтения на схеме S, не определено.

Объект sqlite3_snapshot, возвращаемый успешным вызовом sqlite3_snapshot_get(), должен быть освобождён с помощью sqlite3_snapshot_free(), чтобы избежать утечки памяти.

Интерфейс sqlite3_snapshot_get() доступен только при использовании опции компиляции SQLITE_ENABLE_SNAPSHOT.

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

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

Spec-Zone.ru

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