| |
| #if !defined(SQLITECHANGEBATCH_H_) |
| #define SQLITECHANGEBATCH_H_ 1 |
| |
| typedef struct sqlite3_changebatch sqlite3_changebatch; |
| |
| /* |
| ** Create a new changebatch object for detecting conflicts between |
| ** changesets associated with a schema equivalent to that of the "main" |
| ** database of the open database handle db passed as the first |
| ** parameter. It is the responsibility of the caller to ensure that |
| ** the database handle is not closed until after the changebatch |
| ** object has been deleted. |
| ** |
| ** A changebatch object is used to detect batches of non-conflicting |
| ** changesets. Changesets that do not conflict may be applied to the |
| ** target database in any order without affecting the final state of |
| ** the database. |
| ** |
| ** The changebatch object only works reliably if PRIMARY KEY and UNIQUE |
| ** constraints on tables affected by the changesets use collation |
| ** sequences that are equivalent to built-in collation sequence |
| ** BINARY for the == operation. |
| ** |
| ** If successful, SQLITE_OK is returned and (*pp) set to point to |
| ** the new changebatch object. If an error occurs, an SQLite error |
| ** code is returned and the final value of (*pp) is undefined. |
| */ |
| int sqlite3changebatch_new(sqlite3 *db, sqlite3_changebatch **pp); |
| |
| /* |
| ** Argument p points to a buffer containing a changeset n bytes in |
| ** size. Assuming no error occurs, this function returns SQLITE_OK |
| ** if the changeset does not conflict with any changeset passed |
| ** to an sqlite3changebatch_add() call made on the same |
| ** sqlite3_changebatch* handle since the most recent call to |
| ** sqlite3changebatch_zero(). If the changeset does conflict with |
| ** an earlier such changeset, SQLITE_CONSTRAINT is returned. Or, |
| ** if an error occurs, some other SQLite error code may be returned. |
| ** |
| ** One changeset is said to conflict with another if |
| ** either: |
| ** |
| ** * the two changesets contain operations (INSERT, UPDATE or |
| ** DELETE) on the same row, identified by primary key, or |
| ** |
| ** * the two changesets contain operations (INSERT, UPDATE or |
| ** DELETE) on rows with identical values in any combination |
| ** of fields constrained by a UNIQUE constraint. |
| ** |
| ** Even if this function returns SQLITE_CONFLICT, the current |
| ** changeset is added to the internal data structures - so future |
| ** calls to this function may conflict with it. If this function |
| ** returns any result code other than SQLITE_OK or SQLITE_CONFLICT, |
| ** the result of any future call to sqlite3changebatch_add() is |
| ** undefined. |
| ** |
| ** Only changesets may be passed to this function. Passing a |
| ** patchset to this function results in an SQLITE_MISUSE error. |
| */ |
| int sqlite3changebatch_add(sqlite3_changebatch*, void *p, int n); |
| |
| /* |
| ** Zero a changebatch object. This causes the records of all earlier |
| ** calls to sqlite3changebatch_add() to be discarded. |
| */ |
| void sqlite3changebatch_zero(sqlite3_changebatch*); |
| |
| /* |
| ** Return a copy of the first argument passed to the sqlite3changebatch_new() |
| ** call used to create the changebatch object passed as the only argument |
| ** to this function. |
| */ |
| sqlite3 *sqlite3changebatch_db(sqlite3_changebatch*); |
| |
| /* |
| ** Delete a changebatch object. |
| */ |
| void sqlite3changebatch_delete(sqlite3_changebatch*); |
| |
| #endif /* !defined(SQLITECHANGEBATCH_H_) */ |
| |