mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
Add experimental API sqlite3session_diff().
FossilOrigin-Name: c4340b2ea2115ad97dcac036f9034e132ab789e5
This commit is contained in:
@ -273,6 +273,63 @@ int sqlite3session_changeset(
|
||||
void **ppChangeset /* OUT: Buffer containing changeset */
|
||||
);
|
||||
|
||||
/*
|
||||
** CAPI3REF: Load The Difference Between Tables Into A Session
|
||||
**
|
||||
** If it is not already attached to the session object passed as the first
|
||||
** argument, this function attaches table zTbl in the same manner as the
|
||||
** [sqlite3session_attach()] function. If zTbl does not exist, or if it
|
||||
** does not have a primary key, this function is a no-op (but does not return
|
||||
** an error).
|
||||
**
|
||||
** Argument zFromDb must be the name of a database ("main", "temp" etc.)
|
||||
** attached to the same database handle as the session object that contains
|
||||
** a table compatible with the table attached to the session by this function.
|
||||
** A table is considered compatible if it:
|
||||
**
|
||||
** <ul>
|
||||
** <li> Has the same name,
|
||||
** <li> Has the same set of columns declared in the same order, and
|
||||
** <li> Has the same PRIMARY KEY definition.
|
||||
** </ul>
|
||||
**
|
||||
** This function adds a set of changes to the session object that could be
|
||||
** used to update the table in database zFrom (call this the "from-table")
|
||||
** so that its content is the same as the table attached to the session
|
||||
** object (call this the "to-table"). Specifically:
|
||||
**
|
||||
** <ul>
|
||||
** <li> For each row (primary key) that exists in the to-table but not in
|
||||
** the from-table, an INSERT record is added to the session object.
|
||||
**
|
||||
** <li> For each row (primary key) that exists in the to-table but not in
|
||||
** the from-table, a DELETE record is added to the session object.
|
||||
**
|
||||
** <li> For each row (primary key) that exists in both tables, but features
|
||||
** different in each, an UPDATE record is added to the session.
|
||||
** </ul>
|
||||
**
|
||||
** To clarify, if this function is called and then a changeset constructed
|
||||
** using [sqlite3session_changeset()], then after applying that changeset to
|
||||
** database zFrom the contents of the two compatible tables would be
|
||||
** identical.
|
||||
**
|
||||
** It an error if database zFrom does not exist or does not contain the
|
||||
** required compatible table.
|
||||
**
|
||||
** If the operation successful, SQLITE_OK is returned. Otherwise, an SQLite
|
||||
** error code. In this case, if argument pzErrMsg is not NULL, *pzErrMsg
|
||||
** may be set to point to a buffer containing an English language error
|
||||
** message. It is the responsibility of the caller to free this buffer using
|
||||
** sqlite3_free().
|
||||
*/
|
||||
int sqlite3session_diff(
|
||||
sqlite3_session *pSession,
|
||||
const char *zFromDb,
|
||||
const char *zTbl,
|
||||
char **pzErrMsg
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
** CAPI3REF: Generate A Patchset From A Session Object
|
||||
|
Reference in New Issue
Block a user