#include "sqlite3.h"
#include <stdio.h>

void main(int argc, char** argv)
{
    sqlite3* db = 0;
    sqlite3_stmt* stmt = 0;
    char* rest = 0;
    int rc = 0;
    int value = 0;
    sqlite3_open(":memory:", &db);
    rc = sqlite3_prepare_v2(db, "select value from generate_series where 
start=1 and stop=10;", -1, &stmt, (void*)&rest);
    if (rc != SQLITE_OK)
    {
        printf("Error %d during prepare\n", rc);
        return;
    }
    printf("\nLoop 1, no reset, reset at 5\n");
    for (;;)
    {
        rc = sqlite3_step(stmt);
        if (rc == SQLITE_DONE | value == 5)
        {
            printf("!\n");
            rc = sqlite3_reset(stmt);
            printf("sqlite3_reset returns %d\n", rc);
            break;
        }
        if (rc == SQLITE_ROW)
        {
            value = sqlite3_column_int(stmt, 0);
            printf("%d ", value);
            continue;
        }
        printf("Error during stepping %d\n", rc);
        rc = sqlite3_reset(stmt);
        printf("sqlite3_reset returns %d\n", rc);
        break;
    }
    printf("\nLoop 2, After Reset\n");
    for (;;)
    {
        rc = sqlite3_step(stmt);
        if (rc == SQLITE_DONE)
        {
            printf("!\n");
//            rc = sqlite3_reset(stmt);
//            printf("sqlite3_reset returns %d\n", rc);
            break;
        }
        if (rc == SQLITE_ROW)
        {
            value = sqlite3_column_int(stmt, 0);
            printf("%d ", value);
            continue;
        }
        printf("Error during stepping %d\n", rc);
        rc = sqlite3_reset(stmt);
        printf("sqlite3_reset returns %d\n", rc);
        break;
    }
    printf("\nLoop 3, No Reset, Got SQLITE_DONE\n");
    for (;;)
    {
        rc = sqlite3_step(stmt);
        if (rc == SQLITE_DONE)
        {
            printf("!\n");
            rc = sqlite3_reset(stmt);
            printf("sqlite3_reset returns %d\n", rc);
            break;
        }
        if (rc == SQLITE_ROW)
        {
            value = sqlite3_column_int(stmt, 0);
            printf("%d ", value);
            continue;
        }
        printf("Error during stepping %d\n", rc);
        rc = sqlite3_reset(stmt);
        printf("sqlite3_reset returns %d\n", rc);
        break;
    }
}

2018-06-04 11:32:12 MinGW [D:\work]
>test

Loop 1, no reset, reset at 5
1 2 3 4 5 !
sqlite3_reset returns 0

Loop 2, After Reset
1 2 3 4 5 6 7 8 9 10 !

Loop 3, No Reset, Got SQLITE_DONE
1 2 3 4 5 6 7 8 9 10 !
sqlite3_reset returns 0


---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>boun...@mailinglists.sqlite.org] On Behalf Of Keith Medcalf
>Sent: Monday, 4 June, 2018 11:25
>To: SQLite mailing list
>Subject: Re: [sqlite] Reset the cursor
>
>
>Note also that you do not need to do an sqlite3_reset after
>sqlite3_step returns SQLITE_DONE as reset is called automatically the
>next time you call sqlite3_step.  You only need to call sqlite3_reset
>if you want to reset the statement before all the rows have been
>retrieved (this is documented somewhere, and I believe there is a
>compile time #define to turn off the auto-reset).  Yes, it is
>documented in the sqlite3_step documentation
>
>"For all versions of SQLite up to and including 3.6.23.1, a call to
>sqlite3_reset() was required after sqlite3_step() returned anything
>other than SQLITE_ROW before any subsequent invocation of
>sqlite3_step(). Failure to reset the prepared statement using
>sqlite3_reset() would result in an SQLITE_MISUSE return from
>sqlite3_step(). But after version 3.6.23.1 (2010-03-26,
>sqlite3_step() began calling sqlite3_reset() automatically in this
>circumstance rather than returning SQLITE_MISUSE. This is not
>considered a compatibility break because any application that ever
>receives an SQLITE_MISUSE error is broken by definition. The
>SQLITE_OMIT_AUTORESET compile-time option can be used to restore the
>legacy behavior."
>
>Neither the automatic nor the manual sqlite3_reset reset any bindings
>-- if you want to do this I believe you must call the
>sqlite3_clear_bindings()
>
>---
>The fact that there's a Highway to Hell but only a Stairway to Heaven
>says a lot about anticipated traffic volume.
>
>
>>-----Original Message-----
>>From: sqlite-users [mailto:sqlite-users-
>>boun...@mailinglists.sqlite.org] On Behalf Of Keith Medcalf
>>Sent: Monday, 4 June, 2018 11:06
>>To: SQLite mailing list
>>Subject: Re: [sqlite] Reset the cursor
>>
>>
>>>Currently running w/MSVC 2010 under Win 8.1.
>>
>>>I also presume you are testing under the latest SQLite source?
>>
>>Yes, I believe so ...
>>SQLite 3.24.0 2018-06-02 19:14:58
>>1ecb3aa13de5c8dc611b814ff34010de0bd90aae73d88aa37a59c4627be4alt2
>>
>>Using GCC (MinGW-w64 8.1.0) on Windows 10 Pro for Workstations
>>version 1803 build 17134.81 (current)
>>
>>MSVC (the one I have, I think VS 2008) also works fine ... though
>the
>>.dll is still compiled with GCC MinGW-w64 8.1.0 (with -O3 and then
>>some).
>>
>>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version
>15.00.21022.08
>>for 80x86
>>Copyright (C) Microsoft Corporation.  All rights reserved.
>>
>>test.c
>>Microsoft (R) Incremental Linker Version 9.00.21022.08
>>Copyright (C) Microsoft Corporation.  All rights reserved.
>>
>>/out:test.exe
>>test.obj
>>sqlite3.lib
>>
>>
>>2018-06-04 10:59:24 MinGW [D:\work]
>>>test.exe
>>
>>Loop 1, no reset
>>1 2 3 4 5 6 7 8 9 10 !
>>sqlite3_reset returns 0
>>
>>Loop 2, after reset
>>1 2 3 4 5 6 7 8 9 10 !
>>sqlite3_reset returns 0
>>
>>---
>>The fact that there's a Highway to Hell but only a Stairway to
>Heaven
>>says a lot about anticipated traffic volume.
>>
>>
>>
>>
>>_______________________________________________
>>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



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

Reply via email to