summaryrefslogtreecommitdiff
path: root/static/netbsd/man3/sqlite3session_attach.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man3/sqlite3session_attach.3')
-rw-r--r--static/netbsd/man3/sqlite3session_attach.386
1 files changed, 86 insertions, 0 deletions
diff --git a/static/netbsd/man3/sqlite3session_attach.3 b/static/netbsd/man3/sqlite3session_attach.3
new file mode 100644
index 00000000..99b73e7e
--- /dev/null
+++ b/static/netbsd/man3/sqlite3session_attach.3
@@ -0,0 +1,86 @@
+.Dd January 24, 2024
+.Dt SQLITE3SESSION_ATTACH 3
+.Os
+.Sh NAME
+.Nm sqlite3session_attach
+.Nd attach a table to a session object
+.Sh SYNOPSIS
+.In sqlite3.h
+.Ft int
+.Fo sqlite3session_attach
+.Fa "sqlite3_session *pSession"
+.Fa "const char *zTab"
+.Fc
+.Sh DESCRIPTION
+If argument zTab is not NULL, then it is the name of a table to attach
+to the session object passed as the first argument.
+All subsequent changes made to the table while the session object is
+enabled will be recorded.
+See documentation for
+.Fn sqlite3session_changeset
+for further details.
+.Pp
+Or, if argument zTab is NULL, then changes are recorded for all tables
+in the database.
+If additional tables are added to the database (by executing "CREATE
+TABLE" statements) after this call is made, changes for the new tables
+are also recorded.
+.Pp
+Changes can only be recorded for tables that have a PRIMARY KEY explicitly
+defined as part of their CREATE TABLE statement.
+It does not matter if the PRIMARY KEY is an "INTEGER PRIMARY KEY" (rowid
+alias) or not.
+The PRIMARY KEY may consist of a single column, or may be a composite
+key.
+.Pp
+It is not an error if the named table does not exist in the database.
+Nor is it an error if the named table does not have a PRIMARY KEY.
+However, no changes will be recorded in either of these scenarios.
+.Pp
+Changes are not recorded for individual rows that have NULL values
+stored in one or more of their PRIMARY KEY columns.
+.Pp
+SQLITE_OK is returned if the call completes without error.
+Or, if an error occurs, an SQLite error code (e.g. SQLITE_NOMEM) is
+returned.
+.Ss Special sqlite_stat1 Handling
+As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception
+to some of the rules above.
+In SQLite, the schema of sqlite_stat1 is:
+.Bd -literal
+ CREATE TABLE sqlite_stat1(tbl,idx,stat)
+.Ed
+.Pp
+Even though sqlite_stat1 does not have a PRIMARY KEY, changes are recorded
+for it as if the PRIMARY KEY is (tbl,idx).
+Additionally, changes are recorded for rows for which (idx IS NULL)
+is true.
+However, for such rows a zero-length blob (SQL value X'') is stored
+in the changeset or patchset instead of a NULL value.
+This allows such changesets to be manipulated by legacy implementations
+of sqlite3changeset_invert(), concat() and similar.
+.Pp
+The sqlite3changeset_apply() function automatically converts the zero-length
+blob back to a NULL value when updating the sqlite_stat1 table.
+However, if the application calls sqlite3changeset_new(), sqlite3changeset_old()
+or sqlite3changeset_conflict on a changeset iterator directly (including
+on a changeset iterator passed to a conflict-handler callback) then
+the X'' value is returned.
+The application must translate X'' to NULL itself if required.
+.Pp
+Legacy (older than 3.22.0) versions of the sessions module cannot capture
+changes made to the sqlite_stat1 table.
+Legacy versions of the sqlite3changeset_apply() function silently ignore
+any modifications to the sqlite_stat1 table that are part of a changeset
+or patchset.
+.Sh IMPLEMENTATION NOTES
+These declarations were extracted from the
+interface documentation at line 11101.
+.Bd -literal
+SQLITE_API int sqlite3session_attach(
+ sqlite3_session *pSession, /* Session object */
+ const char *zTab /* Table name */
+);
+.Ed
+.Sh SEE ALSO
+.Xr sqlite3session_changeset 3