Spec-Zone.ru › SQLite

Завершение добавления изменений по одному в группу изменений

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

Spec-Zone.ru

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