Spec-Zone.ru › SQLite

Загрузка Разницы между Таблицами в Сессию

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API