sqlite.h


Cuenta del número de filas modificadas

int sqlite3_changes(sqlite3*);

Esta función devuelve el número de filas de la base de datos que han sido modificadas, insertadas o borradas por la sentencia SQL completada más recientemente sobre la conexión de base de datos especificada por el primer parámetro. Sólo se cuentan los cambios que son directamente especificados por las sentencias INSERT, UPDATE o DELETE. Los cambios auxiliares causados por disparadores o acciones de claves foráneas no se cuentan. Se debe usar la función sqlite3_total_changes() para encontrar el número total de cambios incluyendo los cambios causados por disparadores y acciones de claves foráneas.

Los cambios en una vista que es simulada por un disparador INSTEAD OF no se cuentan. Sólo se cuentan los cambios reales en tablas.

Un "cambio de fila" es un cambio en una única fila de una única tabla provocado por una sentencia INSERT, DELETE o UPDATE. Las filas que han sido modificadas por efectos secundarios de restricciones de resolución REPLACE, rollback, procesos de DROP TABLE o por cualquier otro mecanismo no cuentan como cambios directos de filas.

Un "contexto de disparador" es un ámbito de ejecución que comienza y termina el código de un disparador. La mayoría de las sentencias SQL se evalúan fuera de cualquier disparador. Este es el "nivel superior" de contexto de disparador. Si un disparador se activa desde el nivel superior, se entra en un nuevo contexto de disparador mientras dure ese disparador. Subdisparadores crean subcontextos de su duración.

Las llamadas a sqlite3_exec() o sqlite3_step() recursivas no crean un nuevo contexto de disparador.

Esta función retorna el número de cambios de filas directos en la sentencia INSERT, UPDATE o DELETE más reciente dentro del mismo contexto de disparador.

Por lo tanto, cuando es llamado desde el nivel superior, esta función devuelve el númoer de cambios en el INSERT, UPDATE o DELETE más reciente que haya ocurrido también en el nivel superior. Dentro del cuerpo de un disparador, la función sqlite3_changes() puede ser invocada para encontrar el número de cambios en la sentencia INSERT, UPDATE o DELETE más recientemente completada dentro del cuerpo del mismo disparador. Sin embargo, el número devuelto no incluye los cambios motivados por subdisparadores ya que los tienen sus propios contextos.

Ver también sqlite3_total_changes() y la función SQL changes().

Si un hilo diferente hace cambios en la misma conexión de base de datos mientras se está ejecutando sqlite3_changes() entonces el valor devuelto es imprecedible y no significativa.