Инвертирование набора изменений
int sqlite3changeset_invert( int nIn, const void *pIn, /* Input changeset */ int *pnOut, void **ppOut /* OUT: Inverse of input */ );
Эта функция используется для «инвертирования» объекта набора изменений. Применение инвертированного набора изменений к базе данных отменяет эффект применения исходного набора изменений. В частности:
- Каждое изменение DELETE заменяется на INSERT, и
- Каждое изменение INSERT заменяется на DELETE, и
- Для каждого изменения UPDATE значения old.* и new.* меняются местами.
Эта функция не изменяет порядок, в котором изменения появляются в наборе изменений. Она лишь изменяет смысл каждого отдельного изменения.
Если функция выполнена успешно, указатель на буфер, содержащий инвертированный набор изменений, хранится в *ppOut, размер этого буфера хранится в *pnOut, и возвращается SQLITE_OK. Если произошла ошибка, *pnOut и *ppOut обнуляются, и возвращается код ошибки SQLite.
Ответственность за вызов sqlite3_free() на указателе *ppOut для освобождения выделенного буфера после успешного вызова этой функции лежит на вызывающей стороне.
ПРЕДУПРЕЖДЕНИЕ/TODO: В настоящее время эта функция предполагает, что входные данные являются корректным набором изменений. Если это не так, результаты не определены.
См. также списки Объектов, Констант и Функций.
SQLite is in the Public Domain.
https://sqlite.org/session/sqlite3changeset_invert.html