RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

Контрольная точка базы данных

int sqlite3_wal_checkpoint_v2(
  sqlite3 *db,                    /* Database handle */
  const char *zDb,                /* Name of attached database (or NULL) */
  int eMode,                      /* SQLITE_CHECKPOINT_* value */
  int *pnLog,                     /* OUT: Size of WAL log in frames */
  int *pnCkpt                     /* OUT: Total number of frames checkpointed */
);

sqlite3_wal_checkpoint_v2(D,X,M,L,C) управляет операцией по контрольной точке на базе данных X из соединения с базой данных D в методе M. Информация о статусе написана в ответ в виде целых чисел, на которые указывают L и C. Параметр M должен быть действительным режимом контрольной точки:

SQLITE_CHECKPOINT_PASSIVE
Контрольная точка как можно больше структур, не ожидая окончания никаких чтений и записей базы данных, затем синхронизируйте файл базы данных, если все структуры в журнале были сохранены. busy-handler callback никогда не вызывается в режиме SQLITE_CHECKPOINT_PASSIVE. С другой стороны, пассивный режим мог бы оставить контрольную точку незаконченной, если есть параллельные чтения или записи.

SQLITE_CHECKPOINT_FULL
Этот режим блокирует (это вызывает busy-handler callback), пока все записи в БД не будут сделаны, а все чтения делаются от более нового образа БД. Это тогда сохраняет все структуры в файле журнала и делают синхронизацию файла базы данных. Этот режим блокирует новые записи в БД в то время, как он работает, но новые чтения разрешают продолжить.

SQLITE_CHECKPOINT_RESTART
Этот режим работает аналогично SQLITE_CHECKPOINT_FULL с дополнением, которое после сохранения файла журнала это блокирует (вызывая busy-handler callback), пока все читатели читают только от файла базы данных. Это гарантирует, что следующая запись перезапустит файл журнала с начала. Как SQLITE_CHECKPOINT_FULL, этот режим блокирует новые попытки записи базы данных, в то время как это работает, но не препятствует читателям.

SQLITE_CHECKPOINT_TRUNCATE
Этот режим работает аналогично SQLITE_CHECKPOINT_RESTART с дополнением, что это также усекает файл журнала к нулевым байтам до успешного возвращения.

Если pnLog не NULL, *pnLog установлен в общее количество структур в файле журнала или в -1, если контрольная точка не могла бы работать из-за ошибки или потому что база данных не находится в режиме WAL. Если pnCkpt не NULL, *pnCkpt установлен в общее количество структур в файле журнала (включая любые, которые уже были сохранены прежде чем функция была вызвана) или в -1, если контрольная точка не могла бы работать из-за ошибки или потому что база данных не находится в режиме WAL. Обратите внимание на то, что после успешного завершения SQLITE_CHECKPOINT_TRUNCATE, файл журнала будет усечен к нулю байт, таким образом, *pnLog и *pnCkpt установлены в 0.

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

Режимы SQLITE_CHECKPOINT_FULL, RESTART и TRUNCATE также получают исключительную блокировку записи файла базы данных. Если блокировка записи не может быть немедленно получена, а занятый обработчик формируется, он вызван, и блокировка записи повторена до возврата обработчиком 0 или до успешного полученения блокировки. Занятый обработчик также вызван, ожидая чтения базы данных, как описано выше. Если занятый обработчик возвращает 0, прежде чем блокировка записи будет получена или ожидая чтения базы данных, операция контрольной точки выполняется от того пункта таким же образом как SQLITE_CHECKPOINT_PASSIVE, сохраняя как можно больше структур, не блокируя ничего дальше. SQLITE_BUSY возвращен в этом случае.

Если zDb = NULL или указывает на строку нулевой длины, то указанная операция предпринята на всех базах данных WAL присоединенных к соединению db. В этом случае значения, написанные, чтобы произвести параметры *pnLog и *pnCkpt, не определены. Если с ошибкой SQLITE_BUSY сталкиваются, обрабатывая одну или больше приложенных баз данных WAL, операция все еще предпринята на любых остающихся приложенных базах данных, а SQLITE_BUSY возвращен в конце. Если какая-либо другая ошибка происходит, обрабатывая приложенную базу данных, обработка остановлена, а код ошибки немедленно возвращен. Если ни с какой ошибкой (SQLITE_BUSY или иной) не сталкиваются, обрабатывая приложенные базы данных, SQLITE_OK возвращен.

Если zDb является названием приложенной базы данных, которая не находится в режиме WAL, SQLITE_OK возвращен, *pnLog и *pnCkpt установлены в -1. Если zDb не NULL (или строка нулевой длины) и не является названием никакой приложенной базы данных, SQLITE_ERROR возвращен.

Если это не возвращает SQLITE_MISUSE, sqlite3_wal_checkpoint_v2() устанавливает информацию об ошибке, которая запрашивается sqlite3_errcode() и sqlite3_errmsg().

PRAGMA wal_checkpoint может использоваться, чтобы вызвать этот интерфейс от SQL.