sqlite.h


Retrollamadas de notificación de modificación de datos

void *sqlite3_update_hook(
  sqlite3*, 
  void(*)(void *,int ,char const *,char const *,sqlite3_int64),
  void*
);

La función sqlite3_update_hook() registra una función de retrollamada con la conexión de base de datos identificada por el primer argumento para que sea invocada cada vez que una fila es actualizada, insertada o borrada. Cualquier retrollamada asignada por una llamada previa a esta función para la misma conexión de base de datos queda anulada.

El segundo argumento es un puntero a la función a invocar cuando una fila sea actualizada, insertada o borrada. El primer argumento para la retrollamada es una copia del tercer argumento de sqlite3_update_hook(). El segundo argumento de la retrollamada es SQLITE_INSERT, SQLITE_DELETE o SQLITE_UPDATE, dependiendo de la operación que ha provocado que la retrollamada sea invocada. El tercer y cuarto argumentos de la retrollamada contienen punteros a los nombres de la base de datos y de la tabla que contienen la fila afectada. El último parámetro de la retrollamada es el rowid de la fila. En el caso de una actualización, es el rowid despuñes de que la actualización tenga lugar.

El hook de actualización no es invocado cuando se modifican la tablas de sistema internas (es decir, sqlite_master y sqlite_sequence).

En la implementación actual, la retrollamada no se invoca cuando se eliminan filas duplicadas debidas a una cláusula ON CONFLICT REPLACE. Tampoco cuando se borran filas usando la optimización de truncado. Las excepciones definidas en este párrafo pueden cambiar en futuras versiones de SQLite.

Una implementación del hook de actualización no debe hacer nada que modifique la conexión de base de datos que la ha invocado. Cualquier acción para modificar la conexión de base de datos debe ser diferida hasta después de haber completado la llamada a sqlite3_step() que haya disparado el hook. Hay que tener en cuenta que tanto sqlite3_prepare_v2() como sqlite3_step() modifican sus conexiones de base de datos en el sentido que tiene "modificar" en este párrafo.

La función sqlite3_update_hook(D,C,P) devuelve el argumento P de la llamada previa en la misma conexión de base de datos D, o NULL para la primera llamada con D.

Ver también sqlite3_commit_hook() y sqlite3_rollback_hook().