.Dd January 24, 2024
.Dt SQLITE_PREPARE_PERSISTENT 3
.Os
.Sh NAME
.Nm SQLITE_PREPARE_PERSISTENT ,
.Nm SQLITE_PREPARE_NORMALIZE ,
.Nm SQLITE_PREPARE_NO_VTAB
.Nd prepare flags
.Sh SYNOPSIS
.In sqlite3.h
.Fd #define SQLITE_PREPARE_PERSISTENT
.Fd #define SQLITE_PREPARE_NORMALIZE
.Fd #define SQLITE_PREPARE_NO_VTAB
.Sh DESCRIPTION
These constants define various flags that can be passed into "prepFlags"
parameter of the
.Fn sqlite3_prepare_v3
and
.Fn sqlite3_prepare16_v3
interfaces.
.Pp
New flags may be added in future releases of SQLite.
.Bl -tag -width Ds
.It SQLITE_PREPARE_PERSISTENT
The SQLITE_PREPARE_PERSISTENT flag is a hint to the query planner that
the prepared statement will be retained for a long time and probably
reused many times.
Without this flag,
.Fn sqlite3_prepare_v3
and
.Fn sqlite3_prepare16_v3
assume that the prepared statement will be used just once or at most
a few times and then destroyed using
.Fn sqlite3_finalize
relatively soon.
The current implementation acts on this hint by avoiding the use of
lookaside memory so as not to deplete the limited store
of lookaside memory.
Future versions of SQLite may act on this hint differently.
.It SQLITE_PREPARE_NORMALIZE
The SQLITE_PREPARE_NORMALIZE flag is a no-op.
This flag used to be required for any prepared statement that wanted
to use the
.Fn sqlite3_normalized_sql
interface.
However, the
.Fn sqlite3_normalized_sql
interface is now available to all prepared statements, regardless of
whether or not they use this flag.
.It SQLITE_PREPARE_NO_VTAB
The SQLITE_PREPARE_NO_VTAB flag causes the SQL compiler to return an
error (error code SQLITE_ERROR) if the statement uses any virtual tables.
.El
.Pp
.Sh IMPLEMENTATION NOTES
These declarations were extracted from the
interface documentation at line 4137.
.Bd -literal
#define SQLITE_PREPARE_PERSISTENT              0x01
#define SQLITE_PREPARE_NORMALIZE               0x02
#define SQLITE_PREPARE_NO_VTAB                 0x04
.Ed
.Sh SEE ALSO
.Xr sqlite3_finalize 3 ,
.Xr sqlite3_prepare 3 ,
.Xr sqlite3_sql 3