Spec-Zone.ru › SQLite

Прикрепление таблицы к объекту сеанса

Если аргумент zTab не равен NULL, то это имя таблицы, которую нужно прикрепить к объекту сеанса, переданному в качестве первого аргумента. Все последующие изменения, внесенные в таблицу, пока объект сеанса активен, будут записаны. Подробнее см. документацию по sqlite3session_changeset().

Или, если аргумент zTab равен NULL, изменения записываются для всех таблиц в базе данных. Если после этого вызова в базу данных добавляются дополнительные таблицы (с помощью операторов «CREATE TABLE»), изменения для новых таблиц также записываются.

Изменения могут быть записаны только для таблиц, у которых явно определен PRIMARY KEY в операторе CREATE TABLE. Неважно, является ли PRIMARY KEY «INTEGER PRIMARY KEY» (псевдоним rowid) или нет. PRIMARY KEY может состоять из одного столбца или быть составным ключом.

Если названная таблица не существует в базе данных, это не ошибка. Также не ошибка, если названная таблица не имеет PRIMARY KEY. Однако в этих сценариях изменения не будут записаны.

Изменения не записываются для отдельных строк, в которых в одном или нескольких столбцах PRIMARY KEY хранятся NULL-значения.

Если вызов завершился без ошибок, возвращается SQLITE_OK. В противном случае, при возникновении ошибки, возвращается код ошибки SQLite (например, SQLITE_NOMEM).

Обработка специальной таблицы sqlite_stat1

Начиная с версии SQLite 3.22.0, таблица «sqlite_stat1» является исключением из некоторых правил выше. В SQLite схема sqlite_stat1 имеет вид:

       CREATE TABLE sqlite_stat1(tbl,idx,stat)  
 

Несмотря на то, что sqlite_stat1 не имеет PRIMARY KEY, изменения для неё записываются так, как если бы PRIMARY KEY был (tbl,idx). Кроме того, изменения записываются для строк, для которых (idx IS NULL) истинно. Однако для таких строк в наборе изменений или патче вместо NULL-значения хранится пустой blob (SQL-значение X''). Это позволяет обрабатывать такие наборы изменений с помощью устаревших реализаций sqlite3changeset_invert(), concat() и аналогичных функций.

Функция sqlite3changeset_apply() автоматически преобразует пустой blob обратно в NULL-значение при обновлении таблицы sqlite_stat1. Однако, если приложение вызывает sqlite3changeset_new(), sqlite3changeset_old() или sqlite3changeset_conflict для итератора набора изменений напрямую (в том числе для итератора набора изменений, переданного в обработчик конфликтов), то возвращается значение X''. При необходимости приложение должно само перевести X'' в NULL.

Устаревшие (более ранние, чем 3.22.0) версии модуля сессий не могут захватывать изменения, внесенные в таблицу sqlite_stat1. Устаревшие версии функции sqlite3changeset_apply() игнорируют любые изменения в таблице sqlite_stat1, которые являются частью набора изменений или патча.

См. также списки Объектов, Констант и Функций.

SQLite is in the Public Domain.
https://sqlite.org/session/sqlite3session_attach.html

Spec-Zone.ru

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