Обработчик колбэков количества сжатия autovacuum
int sqlite3_autovacuum_pages( sqlite3 *db, unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int), void*, void(*)(void*) );
Интерфейс sqlite3_autovacuum_pages(D,C,P,X) регистрирует функцию обратного вызова C, которая вызывается перед каждым autovacuum файла базы данных. Функция обратного вызова получает копию указателя на общие данные (P), имя схемы подключенной базы данных, которая подвергается autovacuum, размер файла базы данных в страницах, количество свободных страниц и количество байтов на страницу соответственно. Функция обратного вызова должна вернуть количество свободных страниц, которые должны быть удалены autovacuum. Если функция обратного вызова возвращает ноль, то autovacuum не происходит. Если возвращаемое значение больше или равно количеству свободных страниц, то происходит полное autovacuum.
Если существует несколько прикрепленных файлов базы данных, которые изменяются в рамках транзакции, то функция обратного вызова autovacuum pages вызывается отдельно для каждого файла.
Функция обратного вызова не является реентерабельной. Функция обратного вызова не должна пытаться вызвать другие интерфейсы SQLite. В противном случае могут возникнуть проблемы, включая сбои сегментации и повреждение файлов базы данных. Функция обратного вызова должна быть простой функцией, которая выполняет арифметические операции над входными параметрами и возвращает результат.
Параметр X в sqlite3_autovacuum_pages(D,C,P,X) — это необязательный деструктор для параметра P. Если X не равен NULL, то X(P) вызывается всякий раз, когда соединение с базой данных закрывается или когда функция обратного вызова перезаписывается другим вызовом sqlite3_autovacuum_pages().
Для каждого подключения к базе данных существует только одна функция обратного вызова autovacuum pages. Каждый вызов интерфейса sqlite3_autovacuum_pages() переписывает все предыдущие вызовы для этого подключения к базе данных. Если аргумент обратного вызова (C) в sqlite3_autovacuum_pages(D,C,P,X) является указателем NULL, то функция обратного вызова autovacuum steps отменяется. Возвращаемое значение sqlite3_autovacuum_pages() обычно равно SQLITE_OK, но может быть другим кодом ошибки, если что-то пойдёт не так. Текущая реализация возвращает только SQLITE_OK или SQLITE_MISUSE, но в будущих выпусках могут быть добавлены и другие коды возврата.
Если функция обратного вызова autovacuum pages не указана (обычный случай) или для неё предоставлен указатель NULL, то по умолчанию происходит вакуум всех свободных страниц. Иными словами, поведение по умолчанию такое же, как если бы функция обратного вызова выглядела так:
unsigned int demonstration_autovac_pages_callback(
void *pClientData,
const char *zSchema,
unsigned int nDbPage,
unsigned int nFreePage,
unsigned int nBytePerPage
){
return nFreePage;
}
См. также списки Объектов, Констант и Функций.
SQLite is in the Public Domain.
https://sqlite.org/c3ref/autovacuum_pages.html