Загрузить различия между таблицами в сеанс
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.
- Для каждой строки (первичного ключа), которая есть в обеих таблицах, но имеет разные значения, отличные от значений первичного ключа, в каждой из них, в сеанс добавляется запись 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