RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

Session Module C Interface

Добавьте Changeset к Changegroup

int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pData);

Добавьте все изменения в changeset (или patchset) в буфере pData (размеом nData байт) к changegroup.

Если буфер содержит patchset, то все предшествующие обращения к этой функции на том же самом объекте changegroup, должно быть, также определили patchsets. Или, если буфер содержит changeset, должны быть более ранние обращения к этой функции. Иначе SQLITE_ERROR возвращен, и никакие изменения не добавляются к changegroup.

Строки в changeset и changegroup определяются значениями в их колонках PRIMARY KEY. Изменение в changeset, как полагают, относится к той же самой строке, как изменение, уже существующее в changegroup, если у этих двух строк есть тот же самый первичный ключ.

Изменения строк, которые уже не появляются в changegroup, просто копируются в него. Или, если новый changeset и changegroup содержат изменения, которые относятся к единственной строке, заключительное содержание changegroup зависит от типа каждого изменения, следующим образом:

Существующее изменение Новое изменение Изменение на выходе
INSERT INSERT Новое изменение проигнорировано. Этот случай не происходит, если новый changeset был немедленно зарегистрирован после changesets, уже добавленного к changegroup.
INSERT UPDATE Изменение INSERT остается в changegroup. Значения в изменении INSERT изменяются, как будто строка была вставлена существующим изменением и затем обновлена согласно новому изменению.
INSERT DELETE Существующий INSERT удален из changegroup. DELETE не добавляется.
UPDATE INSERT Новое изменение проигнорировано. Этот случай не происходит, если новый changeset был немедленно зарегистрирован после changeset, уже добавленного к changegroup.
UPDATE UPDATE Существующий UPDATE остается в changegroup. Это исправлено так, чтобы сопровождающие значения состояли в том, как будто строка была обновлена однажды существующим изменением, а затем еще и новым изменением.
UPDATE DELETE Существующий UPDATE заменяется новым DELETE в changegroup.
DELETE INSERT Если одно или больше значений столбцов в строке, вставленной новым изменением, отличаются от таких же в строке, удаленной существующим изменением, существующий DELETE заменяется UPDATE в changegroup. Иначе, если вставленная строка это точно то же самое как удаленная, от существующего DELETE просто отказываются.
DELETE UPDATE Новое изменение проигнорировано. Этот случай не происходит, если новый changeset был немедленно зарегистрирован после changeset, уже добавленного к changegroup.
DELETE DELETE Новое изменение проигнорировано. Этот случай не происходит, если новый changeset был немедленно зарегистрирован после changeset, добавленного к changegroup.

Если новый changeset содержит изменения, которые уже присутствуют в changegroup, то количество колонок и положение колонок первичного ключа для таблицы должны быть последовательными. Если дело обстоит не так, эта функция терпит неудачу с SQLITE_SCHEMA. Кроме того, если объект changegroup формировался со схемой базы данных, используя sqlite3changegroup_schema() API, возможно объединить changeset с различными числами колонок для единственной таблицы при условии, что они в других отношениях совместимы.

Во всех случаях, если ошибка происходит, статус заключительного содержания changegroup не определен. Если никакая ошибка не происходит, SQLITE_OK возвращен.

Если вход changeset, кажется, поврежден, SQLITE_CORRUPT возвращен. Или, если переполнение памяти происходит во время обработки, эта функция возвращает SQLITE_NOMEM.