The sqlite3_reset() call is used to reset the statement AFTER having called sqlite3_step().
-----Ursprüngliche Nachricht----- Von: sqlite-users [mailto:sqlite-users-boun...@mailinglists.sqlite.org] Im Auftrag von Josef Barnes Gesendet: Mittwoch, 05. Juni 2019 15:07 An: sqlite-users@mailinglists.sqlite.org Betreff: [EXTERNAL] Re: [sqlite] sqlite3_reset() bug? It doesn't look like my attachment worked, so here is the code: ------------------------------------------------------------ #include <stdio.h> #include <sqlite3.h> int main (void) { int i; sqlite3_stmt *stmt = NULL; sqlite3 *db = NULL; int vals[] = { 4, 5, 6 }; sqlite3_open_v2("test.db", &db, SQLITE_OPEN_READONLY, NULL); sqlite3_prepare_v2(db, "SELECT id, value FROM test WHERE value = ?", -1, &stmt, NULL); for (i = 0; i < 3; i++) { sqlite3_bind_int64(stmt, 1, vals[i]); printf("BOUND %d\n", vals[i]); sqlite3_reset(stmt); while (sqlite3_step(stmt) == SQLITE_ROW) { printf("FOUND %lld,%lld\n", sqlite3_column_int64(stmt, 0), sqlite3_column_int64(stmt, 1)); } } sqlite3_finalize(stmt); sqlite3_close_v2(db); return 0; } ------------------------------------------------------------ On 5/6/19 11:04 pm, Josef Barnes wrote: > Hi, > > We've come across a situation where we think there is a bug in the > sqlite3_reset() function. The documentation states: > > "Any SQL statement variables that had values bound to them using the > sqlite3_bind_*() API retain their values" > > The behaviour we are seeing appears to contradict this statement. I've > attached a very simple example of searching for a few rows in a > database. To run the example, create a database (test.db) with the > following schema: > > CREATE table test ( id INTEGER PRIMARY KEY, value INTEGER NOT NULL ); > INSERT INTO test VALUES ( 1, 4 ); INSERT INTO test VALUES ( 2, 5 ); > INSERT INTO test VALUES ( 3, 6 ); > > In the example code, notice that the call to sqlite3_reset() comes > after the call to sqlite3_bind_int64(). When running the example, it > will return the first row all three times. It seems that the call to > sqlite3_reset() actually resets the binded variable to the value it > had at the last call to sqlite3_step(). > > Is this a bug? Or is it intended behaviour? If it's intended, I > recommend updating the documentation to be clear about this behaviour. > > Thanks for any insight anyone can provide. > > Joe > > _______________________________________________ > sqlite-users mailing list > sqlite-users@mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users ___________________________________________ Gunter Hick | Software Engineer | Scientific Games International GmbH | Klitschgasse 2-4, A-1130 Vienna | FN 157284 a, HG Wien, DVR: 0430013 | (O) +43 1 80100 - 0 May be privileged. May be confidential. Please delete if not the addressee. _______________________________________________ sqlite-users mailing list sqlite-users@mailinglists.sqlite.org http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users