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.

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