NAME
sqlite3_changes —
Count The Number Of
Rows Modified
SYNOPSIS
int
sqlite3_changes(
sqlite3*);
DESCRIPTION
This function returns the number of rows modified, inserted or deleted by the
most recently completed INSERT, UPDATE or DELETE statement on the database
connection specified by the only parameter. Executing any other type of SQL
statement does not modify the value returned by this function.
Only changes made directly by the INSERT, UPDATE or DELETE statement are
considered - auxiliary changes caused by triggers, foreign key actions or
REPLACE constraint resolution are not counted.
Changes to a view that are intercepted by INSTEAD OF triggers are not counted.
The value returned by sqlite3_changes() immediately after an INSERT, UPDATE or
DELETE statement run on a view is always zero. Only changes made to real
tables are counted.
Things are more complicated if the sqlite3_changes() function is executed while
a trigger program is running. This may happen if the program uses the
changes() SQL function, or if some other callback function invokes
sqlite3_changes() directly. Essentially:
- Before entering a trigger program the value returned by
sqlite3_changes() function is saved. After the trigger program has
finished, the original value is restored.
- Within a trigger program each INSERT, UPDATE and DELETE
statement sets the value returned by sqlite3_changes() upon completion as
normal. Of course, this value will not include any changes performed by
sub-triggers, as the sqlite3_changes() value will be saved and restored
after each sub-trigger has run.
This means that if the changes() SQL function (or similar) is used by the first
INSERT, UPDATE or DELETE statement within a trigger, it returns the value as
set when the calling statement began executing. If it is used by the second or
subsequent such statement within a trigger program, the value returned
reflects the number of rows modified by the previous INSERT, UPDATE or DELETE
statement within the same trigger.
See also the sqlite3_total_changes() interface, the count_changes pragma, and
the changes() SQL function.
If a separate thread makes changes on the same database connection while
sqlite3_changes() is running then the value returned is unpredictable and not
meaningful.
SEE ALSO
sqlite3_changes(3),
sqlite3_total_changes(3)