summaryrefslogtreecommitdiff
path: root/static/netbsd/man3/sqlite3_preupdate_hook.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man3/sqlite3_preupdate_hook.3')
-rw-r--r--static/netbsd/man3/sqlite3_preupdate_hook.3188
1 files changed, 188 insertions, 0 deletions
diff --git a/static/netbsd/man3/sqlite3_preupdate_hook.3 b/static/netbsd/man3/sqlite3_preupdate_hook.3
new file mode 100644
index 00000000..9283e8b9
--- /dev/null
+++ b/static/netbsd/man3/sqlite3_preupdate_hook.3
@@ -0,0 +1,188 @@
+.Dd January 24, 2024
+.Dt SQLITE3_PREUPDATE_HOOK 3
+.Os
+.Sh NAME
+.Nm sqlite3_preupdate_hook ,
+.Nm sqlite3_preupdate_old ,
+.Nm sqlite3_preupdate_count ,
+.Nm sqlite3_preupdate_depth ,
+.Nm sqlite3_preupdate_new ,
+.Nm sqlite3_preupdate_blobwrite
+.Nd the pre-update hook
+.Sh SYNOPSIS
+.In sqlite3.h
+.Ft void *
+.Fo sqlite3_preupdate_hook
+.Fa "sqlite3 *db"
+.Fa "void(*xPreUpdate)( void *pCtx,sqlite3 *db,int op,char const *zDb,char const *zName,sqlite3_int64 iKey1,sqlite3_int64 iKey2)"
+.Fa "void*"
+.Fc
+.Ft int
+.Fo sqlite3_preupdate_old
+.Fa "sqlite3 *"
+.Fa "int"
+.Fa "sqlite3_value **"
+.Fc
+.Ft int
+.Fo sqlite3_preupdate_count
+.Fa "sqlite3 *"
+.Fc
+.Ft int
+.Fo sqlite3_preupdate_depth
+.Fa "sqlite3 *"
+.Fc
+.Ft int
+.Fo sqlite3_preupdate_new
+.Fa "sqlite3 *"
+.Fa "int"
+.Fa "sqlite3_value **"
+.Fc
+.Ft int
+.Fo sqlite3_preupdate_blobwrite
+.Fa "sqlite3 *"
+.Fc
+.Sh DESCRIPTION
+These interfaces are only available if SQLite is compiled using the
+SQLITE_ENABLE_PREUPDATE_HOOK compile-time
+option.
+.Pp
+The
+.Fn sqlite3_preupdate_hook
+interface registers a callback function that is invoked prior to each
+INSERT, UPDATE, and DELETE operation on a database
+table.
+At most one preupdate hook may be registered at a time on a single
+database connection; each call to
+.Fn sqlite3_preupdate_hook
+overrides the previous setting.
+The preupdate hook is disabled by invoking
+.Fn sqlite3_preupdate_hook
+with a NULL pointer as the second parameter.
+The third parameter to
+.Fn sqlite3_preupdate_hook
+is passed through as the first parameter to callbacks.
+.Pp
+The preupdate hook only fires for changes to real database tables;
+the preupdate hook is not invoked for changes to virtual tables
+or to system tables like sqlite_sequence or sqlite_stat1.
+.Pp
+The second parameter to the preupdate callback is a pointer to the
+database connection that registered the preupdate
+hook.
+The third parameter to the preupdate callback is one of the constants
+SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE
+to identify the kind of update operation that is about to occur.
+The fourth parameter to the preupdate callback is the name of the database
+within the database connection that is being modified.
+This will be "main" for the main database or "temp" for TEMP tables
+or the name given after the AS keyword in the ATTACH statement
+for attached databases.
+The fifth parameter to the preupdate callback is the name of the table
+that is being modified.
+.Pp
+For an UPDATE or DELETE operation on a rowid table, the
+sixth parameter passed to the preupdate callback is the initial rowid
+of the row being modified or deleted.
+For an INSERT operation on a rowid table, or any operation on a WITHOUT
+ROWID table, the value of the sixth parameter is undefined.
+For an INSERT or UPDATE on a rowid table the seventh parameter is the
+final rowid value of the row being inserted or updated.
+The value of the seventh parameter passed to the callback function
+is not defined for operations on WITHOUT ROWID tables, or for DELETE
+operations on rowid tables.
+.Pp
+The sqlite3_preupdate_hook(D,C,P) function returns the P argument from
+the previous call on the same database connection
+D, or NULL for the first call on D.
+.Pp
+The
+.Fn sqlite3_preupdate_old ,
+.Fn sqlite3_preupdate_new ,
+.Fn sqlite3_preupdate_count ,
+and
+.Fn sqlite3_preupdate_depth
+interfaces provide additional information about a preupdate event.
+These routines may only be called from within a preupdate callback.
+Invoking any of these routines from outside of a preupdate callback
+or with a database connection pointer that is different
+from the one supplied to the preupdate callback results in undefined
+and probably undesirable behavior.
+.Pp
+The sqlite3_preupdate_count(D) interface
+returns the number of columns in the row that is being inserted, updated,
+or deleted.
+.Pp
+The sqlite3_preupdate_old(D,N,P) interface
+writes into P a pointer to a protected sqlite3_value
+that contains the value of the Nth column of the table row before it
+is updated.
+The N parameter must be between 0 and one less than the number of columns
+or the behavior will be undefined.
+This must only be used within SQLITE_UPDATE and SQLITE_DELETE preupdate
+callbacks; if it is used by an SQLITE_INSERT callback then the behavior
+is undefined.
+The sqlite3_value that P points to will be destroyed when
+the preupdate callback returns.
+.Pp
+The sqlite3_preupdate_new(D,N,P) interface
+writes into P a pointer to a protected sqlite3_value
+that contains the value of the Nth column of the table row after it
+is updated.
+The N parameter must be between 0 and one less than the number of columns
+or the behavior will be undefined.
+This must only be used within SQLITE_INSERT and SQLITE_UPDATE preupdate
+callbacks; if it is used by an SQLITE_DELETE callback then the behavior
+is undefined.
+The sqlite3_value that P points to will be destroyed when
+the preupdate callback returns.
+.Pp
+The sqlite3_preupdate_depth(D) interface
+returns 0 if the preupdate callback was invoked as a result of a direct
+insert, update, or delete operation; or 1 for inserts, updates, or
+deletes invoked by top-level triggers; or 2 for changes resulting from
+triggers called by top-level triggers; and so forth.
+.Pp
+When the
+.Fn sqlite3_blob_write
+API is used to update a blob column, the pre-update hook is invoked
+with SQLITE_DELETE.
+This is because the in this case the new values are not available.
+In this case, when a callback made with op==SQLITE_DELETE is actually
+a write using the sqlite3_blob_write() API, the
+.Fn sqlite3_preupdate_blobwrite
+returns the index of the column being written.
+In other cases, where the pre-update hook is being invoked for some
+other reason, including a regular DELETE, sqlite3_preupdate_blobwrite()
+returns -1.
+.Pp
+.Sh IMPLEMENTATION NOTES
+These declarations were extracted from the
+interface documentation at line 10316.
+.Bd -literal
+#if defined(SQLITE_ENABLE_PREUPDATE_HOOK)
+SQLITE_API void *sqlite3_preupdate_hook(
+ sqlite3 *db,
+ void(*xPreUpdate)(
+ void *pCtx, /* Copy of third arg to preupdate_hook() */
+ sqlite3 *db, /* Database handle */
+ int op, /* SQLITE_UPDATE, DELETE or INSERT */
+ char const *zDb, /* Database name */
+ char const *zName, /* Table name */
+ sqlite3_int64 iKey1, /* Rowid of row about to be deleted/updated */
+ sqlite3_int64 iKey2 /* New rowid value (for a rowid UPDATE) */
+ ),
+ void*
+);
+SQLITE_API int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **);
+SQLITE_API int sqlite3_preupdate_count(sqlite3 *);
+SQLITE_API int sqlite3_preupdate_depth(sqlite3 *);
+SQLITE_API int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **);
+SQLITE_API int sqlite3_preupdate_blobwrite(sqlite3 *);
+#endif
+.Ed
+.Sh SEE ALSO
+.Xr sqlite3 3 ,
+.Xr sqlite3_blob_write 3 ,
+.Xr sqlite3_update_hook 3 ,
+.Xr sqlite3_value 3 ,
+.Xr SQLITE_CREATE_INDEX 3