sqlite.h


Hook de commit de registro de escritura anticipada

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

La función sqlite3_wal_hook() se usa para registrar una retrollamada que será invocada cada vez que la conexión de base de datos compromete datos a un registro de escritura anticipada (es decir, cada vez que una transacción se completa en modo journal_mode=WAL).

La retrollamada es invocada por SQLite después de que el commit ha tenido lugar y el bloque de escritura asociado en la base de datos se libera, por lo que la implementación puede leer, escribir o establecer un punto de control en la base de datos según sea necesario.

El primer parámetro pasado a la función de retrollamada cuando es invocada es una copia del tercer parámetro pasado a sqlite3_wal_hook() cuando se registró la retrollamada. El segundo es una copia del manipulador de base de datos. El tercero es el nombre de la base de datos en la que se está escribiendo - ya sea "main" o el nombre de una base de datos adjunta. El cuarto parámetro es el número de páginas actuales en el ficehro del registro de escritura anticipada, incluyendo aquellas que se acaban de cometer.

La función de retrollamada normalmente debe devolver SQLITE_OK. Si se devuelve un código de error, éste es devuelto, ese error se propaga hacia atrás a través del código base de SQLite para hacer que la sentencia que ha provocado la retrollamada informe de un error, a pesar de que el commit se haya producido. Si la retrollamada devuelve SQLITE_ROW o SQLITE_DONE, o si devuelve un valor que no corresponde con ningún código de error SQLite válido, el resultado es indefinido.

Un único manipulador de base de datos puede tener como máximo una retrollamada de escritura anticipada registrada a la vez. Llamar a sqlite3_wal_hook() reemplaza cualquier retrollamada previamente registrada. Hay que tener en cuenta que sqlite3_wal_autocheckpoint() y el pragma wal_autocheckpoint invocan a sqlite3_wal_hook() y sobrescribirán cualquer configuración previa de sqlite3_wal_hook().