Manual Page Result
0
Command: sqlite3_step | Section: 3 | Source: NetBSD | File: sqlite3_step.3
SQLITE3_STEP(3) FreeBSD Library Functions Manual SQLITE3_STEP(3)
NAME
sqlite3_step - Evaluate An SQL Statement
SYNOPSIS
int
sqlite3_step(sqlite3_stmt*);
DESCRIPTION
After a prepared statement has been prepared using any of
sqlite3_prepare_v2(), sqlite3_prepare_v3(), sqlite3_prepare16_v2(), or
sqlite3_prepare16_v3() or one of the legacy interfaces sqlite3_prepare()
or sqlite3_prepare16(), this function must be called one or more times to
evaluate the statement.
The details of the behavior of the sqlite3_step() interface depend on
whether the statement was prepared using the newer "vX" interfaces
sqlite3_prepare_v3(), sqlite3_prepare_v2(), sqlite3_prepare16_v3(),
sqlite3_prepare16_v2() or the older legacy interfaces sqlite3_prepare()
and sqlite3_prepare16(). The use of the new "vX" interface is
recommended for new applications but the legacy interface will continue
to be supported.
In the legacy interface, the return value will be either SQLITE_BUSY,
SQLITE_DONE, SQLITE_ROW, SQLITE_ERROR, or SQLITE_MISUSE. With the "v2"
interface, any of the other result codes or extended result codes might
be returned as well.
SQLITE_BUSY means that the database engine was unable to acquire the
database locks it needs to do its job. If the statement is a COMMIT or
occurs outside of an explicit transaction, then you can retry the
statement. If the statement is not a COMMIT and occurs within an
explicit transaction then you should rollback the transaction before
continuing.
SQLITE_DONE means that the statement has finished executing successfully.
sqlite3_step() should not be called again on this virtual machine without
first calling sqlite3_reset() to reset the virtual machine back to its
initial state.
If the SQL statement being executed returns any data, then SQLITE_ROW is
returned each time a new row of data is ready for processing by the
caller. The values may be accessed using the column access functions.
sqlite3_step() is called again to retrieve the next row of data.
SQLITE_ERROR means that a run-time error (such as a constraint violation)
has occurred. sqlite3_step() should not be called again on the VM. More
information may be found by calling sqlite3_errmsg(). With the legacy
interface, a more specific error code (for example, SQLITE_INTERRUPT,
SQLITE_SCHEMA, SQLITE_CORRUPT, and so forth) can be obtained by calling
sqlite3_reset() on the prepared statement. In the "v2" interface, the
more specific error code is returned directly by sqlite3_step().
SQLITE_MISUSE means that the this routine was called inappropriately.
Perhaps it was called on a prepared statement that has already been
finalized or on one that had previously returned SQLITE_ERROR or
SQLITE_DONE. Or it could be the case that the same database connection
is being used by two or more threads at the same moment in time.
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 (dateof:3.6.23.1, 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.
Goofy Interface Alert: In the legacy interface, the sqlite3_step() API
always returns a generic error code, SQLITE_ERROR, following any error
other than SQLITE_BUSY and SQLITE_MISUSE. You must call sqlite3_reset()
or sqlite3_finalize() in order to find one of the specific error codes
that better describes the error. We admit that this is a goofy design.
The problem has been fixed with the "v2" interface. If you prepare all
of your SQL statements using sqlite3_prepare_v3() or sqlite3_prepare_v2()
or sqlite3_prepare16_v2() or sqlite3_prepare16_v3() instead of the legacy
sqlite3_prepare() and sqlite3_prepare16() interfaces, then the more
specific error codes are returned directly by sqlite3_step(). The use of
the "vX" interfaces is recommended.
SEE ALSO
sqlite3_column_blob(3), sqlite3_stmt(3), sqlite3_errcode(3),
sqlite3_finalize(3), sqlite3_prepare(3), sqlite3_reset(3), SQLITE_OK(3)
FreeBSD 14.1-RELEASE-p8 December 19, 2018 FreeBSD 14.1-RELEASE-p8