.Dd January 24, 2024
.Dt SQLITE3CHANGESET_START 3
.Os
.Sh NAME
.Nm sqlite3changeset_start ,
.Nm sqlite3changeset_start_v2
.Nd create an iterator to traverse a changeset
.Sh SYNOPSIS
.In sqlite3.h
.Ft int
.Fo sqlite3changeset_start
.Fa "sqlite3_changeset_iter **pp"
.Fa "int nChangeset"
.Fa "void *pChangeset"
.Fc
.Ft int
.Fo sqlite3changeset_start_v2
.Fa "sqlite3_changeset_iter **pp"
.Fa "int nChangeset"
.Fa "void *pChangeset"
.Fa "int flags"
.Fc
.Sh DESCRIPTION
Create an iterator used to iterate through the contents of a changeset.
If successful, *pp is set to point to the iterator handle and SQLITE_OK
is returned.
Otherwise, if an error occurs, *pp is set to zero and an SQLite error
code is returned.
.Pp
The following functions can be used to advance and query a changeset
iterator created by this function:
.Bl -bullet
.It
.Fn sqlite3changeset_next
.It
.Fn sqlite3changeset_op
.It
.Fn sqlite3changeset_new
.It
.Fn sqlite3changeset_old
.El
.Pp
It is the responsibility of the caller to eventually destroy the iterator
by passing it to
.Fn sqlite3changeset_finalize .
The buffer containing the changeset (pChangeset) must remain valid
until after the iterator is destroyed.
.Pp
Assuming the changeset blob was created by one of the
.Fn sqlite3session_changeset ,
.Fn sqlite3changeset_concat
or
.Fn sqlite3changeset_invert
functions, all changes within the changeset that apply to a single
table are grouped together.
This means that when an application iterates through a changeset using
an iterator created by this function, all changes that relate to a
single table are visited consecutively.
There is no chance that the iterator will visit a change the applies
to table X, then one for table Y, and then later on visit another change
for table X.
.Pp
The behavior of sqlite3changeset_start_v2() and its streaming equivalent
may be modified by passing a combination of supported flags
as the 4th parameter.
.Pp
Note that the sqlite3changeset_start_v2() API is still \fBexperimental\fP
and therefore subject to change.
.Sh IMPLEMENTATION NOTES
These declarations were extracted from the
interface documentation at line 11435.
.Bd -literal
SQLITE_API int sqlite3changeset_start(
  sqlite3_changeset_iter **pp,    /* OUT: New changeset iterator handle */
  int nChangeset,                 /* Size of changeset blob in bytes */
  void *pChangeset                /* Pointer to blob containing changeset */
);
SQLITE_API int sqlite3changeset_start_v2(
  sqlite3_changeset_iter **pp,    /* OUT: New changeset iterator handle */
  int nChangeset,                 /* Size of changeset blob in bytes */
  void *pChangeset,               /* Pointer to blob containing changeset */
  int flags                       /* SESSION_CHANGESETSTART_* flags */
);
.Ed
.Sh SEE ALSO
.Xr sqlite3changeset_concat 3 ,
.Xr sqlite3changeset_finalize 3 ,
.Xr sqlite3changeset_invert 3 ,
.Xr sqlite3changeset_new 3 ,
.Xr sqlite3changeset_next 3 ,
.Xr sqlite3changeset_old 3 ,
.Xr sqlite3changeset_op 3 ,
.Xr sqlite3session_changeset 3 ,
.Xr SQLITE_CHANGESETSTART_INVERT 3