Флаги для sqlite3changeset_apply_v2
#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 #define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 #define SQLITE_CHANGESETAPPLY_FKNOACTION 0x0008
Следующие флаги могут быть переданы в качестве 9-го параметра функциям sqlite3changeset_apply_v2 и sqlite3changeset_apply_v2_strm:
- SQLITE_CHANGESETAPPLY_NOSAVEPOINT
- Обычно, модуль сессий включает все операции, выполняемые одним вызовом apply_v2() или apply_v2_strm() в SAVEPOINT. SAVEPOINT подтверждается, если изменения или патч успешно применены, или отменяется, если произошла ошибка. Указание этого флага заставляет модуль сессий опустить этот savepoint. В этом случае, если у вызывающего объекта есть открытая транзакция или savepoint во время вызова apply_v2(), он может отменить частично применённые изменения, откатив их.
- SQLITE_CHANGESETAPPLY_INVERT
- Инвертировать изменения перед применением. Это эквивалентно инвертированию изменений с помощью sqlite3changeset_invert() перед их применением. Указание этого флага с патчсетом является ошибкой.
- SQLITE_CHANGESETAPPLY_IGNORENOOP
- Не вызывать обратный вызов обработчика конфликтов для любых изменений, которые фактически не изменят базу данных, даже если они были применены. В частности, это означает, что обработчик конфликтов не вызывается для:
- изменения удаления, если строка, подлежащая удалению, не найдена;
- изменения обновления, если изменённые поля уже установлены в новые значения в конфликтующей строке; или
- изменения вставки, если все поля конфликтующей строки соответствуют строке, подлежащей вставке.
- SQLITE_CHANGESETAPPLY_FKNOACTION
- Если этот флаг установлен, все внешние ключи в целевой базе данных ведут себя так, как будто они были объявлены с "ON UPDATE NO ACTION ON DELETE NO ACTION", даже если на самом деле они имеют CASCADE, RESTRICT, SET NULL или SET DEFAULT.
SQLite is in the Public Domain.
https://sqlite.org/session/c_changesetapply_fknoaction.html