Hi all,
some questions:
1. Is sqlite3_changes() reset to 0 when a new sqlite3_exec() is started?
2. Does a PRAGMA index_list() manipulate sqlite3_changes() in any way?
3. How can i reset sqlite3_changes() manually if its not done on sqlite3_exec()?
My real problem is i have a misdesigned interface (which i cannot change in
this case) that returns malloc'ed C structs holding a table or integers cast
to pointers when no table is returned.
Something like this (some parts ommitted)
Table* t = 0;
while (sqlite3_step(stmt) == SQLITE_ROW) {
/* build the table struct and copy the rows...
}
sqlite3_finalize(stmt);
if (t) {
return t;
} else {
return (Table*)sqlite3_changes(db);
}
Now i exec an PRAGMA index_list('table_with_no_index'), which returns no
rows, so the t stays 0, but sqlite3_changes() is nonzero.. (1) so i get back
1 stuffed into the pointer. Obviously this blows up if the code expects NULL
for no result...
So i have some ways to get out of the mess:
1. Special case PRAGMAs that return tables, which is ugly.
2. Fix the callers to deal with it, even more ugly.
3. Clear sqlite3_changes() before exec() and hope that PRAGMAs don't modify it.
4. Throw away the broken interface. Would like to, but cannot do it here for
API stability reasons.
Michael
--
Michael Schlenker
Software Engineer
CONTACT Software GmbH Tel.: +49 (421) 20153-80
Wiener Straße 1-3 Fax: +49 (421) 20153-41
28359 Bremen
http://www.contact.de/ E-Mail: [EMAIL PROTECTED]
Sitz der Gesellschaft: Bremen
Geschäftsführer: Karl Heinz Zachries, Ralf Holtgrefe
Eingetragen im Handelsregister des Amtsgerichts Bremen unter HRB 13215
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users