Загрузка Разницы между Таблицами в Сессию
int sqlite3session_diff( sqlite3_session *pSession, const char *zFromDb, const char *zTbl, char **pzErrMsg );
Если таблица zTbl ещё не прикреплена к объекту сессии, переданному в качестве первого аргумента, эта функция прикрепляет её таким же образом, как и функция sqlite3session_attach(). Если zTbl не существует или не имеет первичного ключа, эта функция не выполняет никаких действий (но не возвращает ошибку).
Аргумент zFromDb должен быть именем базы данных («main», «temp» и т.д.), присоединённой к тому же обработчику базы данных, что и объект сессии, содержащий таблицу, совместимую с таблицей, прикреплённой к сессии этой функцией. Таблица считается совместимой, если:
- Имеет то же имя,
- Имеет тот же набор столбцов, объявленных в том же порядке, и
- Имеет такое же определение PRIMARY KEY.
Если таблицы не совместимы, возвращается SQLITE_SCHEMA. Если таблицы совместимы, но не имеют столбцов PRIMARY KEY, это не ошибка, но к объекту сессии не добавляются изменения. Как и в других API сессии, таблицы без PRIMARY KEY просто игнорируются.
Эта функция добавляет набор изменений в объект сессии, которые можно использовать для обновления таблицы в базе данных zFrom (назовём её "таблицей-источником"), чтобы её содержимое совпадало с таблицей, прикреплённой к объекту сессии (назовём её "таблицей-назначением"). В частности:
- Для каждой строки (первичный ключ), которая существует в таблице-назначении, но не в таблице-источнике, в объект сессии добавляется запись INSERT.
- Для каждой строки (первичный ключ), которая существует в таблице-назначении, но не в таблице-источнике, в объект сессии добавляется запись DELETE.
- Для каждой строки (первичный ключ), которая существует в обеих таблицах, но имеет разные значения не-PK в каждой, в сессию добавляется запись UPDATE.
Для ясности, если эта функция вызывается, а затем создаётся набор изменений с помощью sqlite3session_changeset(), то после применения этого набора изменений к базе данных zFrom содержимое двух совместимых таблиц будет идентичным.
Возникает ошибка, если база данных zFrom не существует или не содержит необходимую совместимую таблицу.
Если операция выполнена успешно, возвращается SQLITE_OK. В противном случае — код ошибки SQLite. В этом случае, если аргумент pzErrMsg не равен NULL, *pzErrMsg может быть установлен в указатель на буфер, содержащий сообщение об ошибке на английском языке. Ответственность за освобождение этого буфера лежит на вызывающей стороне с помощью sqlite3_free().
См. также списки Объектов, Констант и Функций.
SQLite is in the Public Domain.
https://sqlite.org/session/sqlite3session_diff.html