Possibly my previous post was too short. Any way I have a satisfactory solution 
now. My question araised when trying to change the apswtrace tool available to 
Python users. This gathers execution times via a sqlite3_profile callback 
function. When I call sqlite3_changes from this profiler function, and just 
blindly display the results on the summary report, this looks like:

CALLS   TIME    ROWS    SQL
1       .002    12      DELETE FROM t1
1       .002    12      SELECT * FROM t1

Which is wrong as the SELECT statement just repeats the number of rows of the 
last DML (DELETE). 

My solution is to use sqlite3_total_changes instead of sqlite3_changes, more or 
less like this:
    realchanges=sqlite3_total_changes()-old_total_changes
    if realchanges>0:
        old_total_changes+=realchanges
        <add to report>

It appears satisfactory so far. Still wonder why a work-around like this is 
needed.  

Edzard Pasma


--- [EMAIL PROTECTED] wrote:

From: "Edzard Pasma" <[EMAIL PROTECTED]>
To: <sqlite-users@sqlite.org>
Subject: [sqlite] reporting number of changes
Date: Tue, 9 Dec 2008 01:36:39 -0800

Hello,

The API function sqlite_changes reports the number of rows changed in the last 
update/insert/delete. I'd like to use this in a generic SQL-tracing tool and 
find it a bit inconvenient as the value can only be used if the statement was 
an update/insert/delete. Is there a reason that the value is not reset for 
other type of statements? Or is there an easy way to find if a statement was an 
update?

Edzard Pasma
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to