ksql_stmt_alloc
—
allocate a statement on a database connection
library “ksql”
#include
<sys/types.h>
#include
<stdint.h>
#include
<ksql.h>
enum ksqlc
ksql_stmt_alloc
(
struct
ksql *sql,
struct ksqlstmt **stmt,
const char *sqlstmt,
size_t id);
The
ksql_stmt_alloc
function allocates a SQL
statement
sqlstmt on a database connection
sql previously opened with
ksql_open(3). It must be matched by a call to
ksql_stmt_free(3). Upon success, this will fill
in the
stmt pointer. The
id is used to identify the statement in error
messages and should uniquely identify the statement.
If a non-empty
cfg->stmts structure
documented in
ksql_cfg_defaults(3) is passed to
ksql_alloc(3) or
ksql_alloc_child(3), the stored statement is
looked up by
id and the
sqlstmt value is ignored. If
id is not a valid index of
cfg->stmts.stmtsz or if the current role
does not permit access to the statement, an error message is emitted on
stderr
and the program is immediately
terminated.
The
ksql_stmt_alloc
function handles a locked
database (specifically,
SQLITE_BUSY
,
SQLITE_LOCKED
, or
SQLITE_PROTOCOL
) by sleeping for a random
interval, then trying again infinitely.
This returns
KSQL_MEM
on allocation failure,
KSQL_NOTOPEN
if the database isn't
connected, or
KSQL_DB
if there were errors
invoking
sqlite3_prepare_v2(3), otherwise
KSQL_OK
on success.
sqlite3_prepare_v2(3)