![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Интерфейс sqlite3_autovacuum_pages(D,C,P,X)
регистрирует функцию обратного вызова C, которая вызвана до каждого
автовакуума файла базы данных. Отзыву передается копия универсального
указателя данных (P), имя схемы базы данных, которая вакуумируется,
размер файла базы данных в страницах, число свободных страниц и число байтов
на страницу. Отзыв должен возвратить число свободных страниц, которые должны
быть удалены автовакуумом. Если отзыв возвращает ноль, то никакого
автовакуума не происходит. Если возвращенное значение больше
или равно числу свободных страниц, то полный автовакуум происходит. Если есть многократные файлы базы данных, которые изменяются, поскольку
часть транзакции передается, то автовакуумный отзыв страниц вызван отдельно
для каждого файла. Функция обратного вызова не должна пытаться вызвать любой другой интерфейс
SQLite. Если это делается, плохие вещи могут произойти, включая ошибки
сегментации и поврежденные файлы базы данных. Функция обратного вызова должна
быть простой функцией, которая делает некоторую арифметику на ее входных
параметрах и возвращает результат. Параметр X sqlite3_autovacuum_pages(D,C,P,X) является дополнительным
деструктором для параметра P. Если X не NULL, то X(P)
вызван каждый раз, когда соединение с базой данных закрывается или когда
отзыв переписан другим вызовом sqlite3_autovacuum_pages(). Есть только один автовакуумный отзыв страниц на
связь для каждой базы данных. Каждое обращение к sqlite3_autovacuum_pages()
отвергает все предыдущие вызовы для этого соединения с базой данных.
Если аргументом отзыва (C) для sqlite3_autovacuum_pages(D,C,P,X) = NULL,
то автовакуумный отзыв отменяется. Возвращаемое значение от
sqlite3_autovacuum_pages() обычно SQLITE_OK, но могло бы быть некоторым
другим кодом ошибки, если что-то идет не так, как надо.
Текущее внедрение возвратит только SQLITE_OK или SQLITE_MISUSE,
но другие коды возврата могли бы быть добавлены в будущих выпусках. Если никакой автовакуумный отзыв страниц не определяется (обычный
случай) или NULL обеспечивается для отзыва, то поведение по умолчанию должно
вакуумировать все свободные страницы. Так, другими словами, поведение по
умолчанию совпадает с ситуацией, когда функция обратного вызова была
чем-то вроде этого:
Choose any three.
SQLite C Interface
Автовакуумный отзыв уплотнения
int sqlite3_autovacuum_pages(sqlite3 *db,
unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int),
void*, void(*)(void*));
unsigned int demonstration_autovac_pages_callback(void *pClientData,
const char *zSchema,
unsigned int nDbPage,
unsigned int nFreePage,
unsigned int nBytePerPage)
{
return nFreePage;
}