Завершение добавления изменений по одному в группу изменений
int sqlite3changegroup_change_finish( sqlite3_changegroup*, int bDiscard, char **pzErr );
Эту функцию можно вызывать только после успешного вызова sqlite3changegroup_change_begin(). В противном случае возникает ошибка SQLITE_MISUSE.
Если параметр bDiscard отличен от нуля, текущее изменение просто отбрасывается. В этом случае функция всегда завершается успешно и возвращает SQLITE_OK.
Если параметр bDiscard равен нулю, предпринимается попытка добавить текущее изменение в группу изменений. Если группа изменений настроена на создание набора изменений (а не набора исправлений), необходимо, чтобы выполнялись следующие условия:
* Если изменение представляет собой INSERT или DELETE, для всех столбцов записи new.* или old.* соответственно должно быть указано значение.
* Если изменение представляет собой запись UPDATE, для столбцов PRIMARY KEY записи old.* необходимо указать значения, а для столбцов PRIMARY KEY записи new.* значения указывать нельзя.
* Если изменение представляет собой запись UPDATE, то для каждого столбца, не входящего в PRIMARY KEY, в записи old.*, для которого указано значение, также должно быть указано значение для того же столбца в записи new.*. Аналогично, для каждого столбца, не входящего в PK, в записи old.*, для которого значение не указано, нельзя указывать значение для того же столбца в записи new.*.
* Все значения, указанные для столбцов PRIMARY KEY, должны быть не NULL.
В противном случае возникает ошибка.
Если группа изменений уже содержит изменение для той же строки (определяемой столбцами PRIMARY KEY), текущее изменение объединяется с существующим так же, как при вызове sqlite3changegroup_add().
Для набора исправлений применяются все перечисленные выше правила, за исключением того, что для столбцов записи old.*, не входящих в PK, не имеет значения, указаны ли значения при изменении UPDATE или DELETE. Это означает, что код, используемый для создания набора изменений с помощью API sqlite3changegroup_change_xxx(), также можно использовать для создания наборов исправлений.
Если вызов завершается успешно, возвращается SQLITE_OK. В противном случае, если возникает ошибка, возвращается код ошибки SQLite. Если возвращена ошибка и параметр pzErr не равен NULL, то (*pzErr) может указывать на буфер, содержащий завершаемое нулевым символом сообщение об ошибке на английском языке в кодировке utf-8. Вызывающая сторона должна впоследствии освободить такой буфер сообщения об ошибке с помощью sqlite3_free().
См. также списки объектов, констант и функций.
SQLite is in the Public Domain.
https://sqlite.org/session/sqlite3changegroup_change_finish.html