Small. Fast. Reliable.
Choose any three.

## Session Module C Interface

## Obtain The Current Operation From A Changeset Iterator

>     int sqlite3changeset_op(
>       sqlite3_changeset_iter *pIter,  /* Iterator object */
>       const char **pzTab,             /* OUT: Pointer to table name */
>       int *pnCol,                     /* OUT: Number of columns in table */
>       int *pOp,                       /* OUT: SQLITE_INSERT, DELETE or UPDATE */
>       int *pbIndirect                 /* OUT: True for an 'indirect' change */
>     );

The pIter argument passed to this function may either be an iterator passed to a conflict-handler by sqlite3changeset_apply(), or an iterator created by sqlite3changeset_start(). In the latter case, the most recent call to sqlite3changeset_next() must have returned SQLITE_ROW. If this is not the case, this function returns SQLITE_MISUSE.

If argument pzTab is not NULL, then *pzTab is set to point to a nul-terminated utf-8 encoded string containing the name of the table affected by the current change. The buffer remains valid until either sqlite3changeset_next() is called on the iterator or until the conflict-handler function returns. If pnCol is not NULL, then *pnCol is set to the number of columns in the table affected by the change. If pbIncorrect is not NULL, then *pbIndirect is set to true (1) if the change is an indirect change, or false (0) otherwise. See the documentation for sqlite3session_indirect() for a description of direct and indirect changes. Finally, if pOp is not NULL, then *pOp is set to one of SQLITE_INSERT, SQLITE_DELETE or SQLITE_UPDATE, depending on the type of change that the iterator currently points to.

If no error occurs, SQLITE_OK is returned. If an error does occur, an SQLite error code is returned. The values of the output variables may not be trusted in this case.

See also lists of Objects, Constants, and Functions.