![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Если zTab не NULL, это название таблицы, чтобы присоединить к
объекту сессии, переданному как первый аргумент. Будут зарегистрированы все
последующие изменения, внесенные в таблицу
в то время, как объект сессии позволен. См. документацию для
sqlite3session_changeset(). Если zTab = NULL, изменения зарегистрированы для всех таблиц
в базе данных. Если дополнительные таблицы добавляются к базе данных
(выполняя "CREATE) после того, как этот вызов
сделан, изменения для новых таблиц также зарегистрированы. Изменения могут быть зарегистрированы только для таблиц, которым
определили PRIMARY KEY явно как часть их CREATE TABLE.
Не имеет значения, является ли PRIMARY KEY это "INTEGER PRIMARY KEY"
(псевдоним rowid) или нет. PRIMARY KEY может состоять из отдельного столбца
или может быть составным ключом. Это не ошибка, если названная таблица
не существует в базе данных. И при этом это не ошибка, если у названной
таблицы нет PRIMARY KEY. Однако, никакие изменения не будут зарегистрированы
ни в одном из этих сценариев. Изменения не зарегистрированы для отдельных строк, которым сохранили NULL
в одну или больше их колонок PRIMARY KEY. SQLITE_OK возвращен, если обращение заканчивается без ошибки.
Если ошибка происходит, код ошибки SQLite (например,
SQLITE_NOMEM) возвращен. С SQLite version 3.22.0 таблица "sqlite_stat1" это исключение
из правил выше. В SQLite схема sqlite_stat1:
Даже при том, что у sqlite_stat1 нет PRIMARY KEY, изменения
зарегистрированы, как будто PRIMARY KEY это (tbl,idx).
Кроме того, изменения зарегистрированы для строк, для которых (idx IS NULL)
верно. Однако, для таких строк blob нулевой длины (SQL value X'')
сохранен в changeset или patchset вместо NULL.
Это позволяет такому changesets управляться устаревшими внедрениями
sqlite3changeset_invert(), concat() и подобными. Функция sqlite3changeset_apply() автоматически преобразовывает
blob нулевой длины назад в NULL, обновляя таблицу sqlite_stat1.
Однако, если применение вызывает sqlite3changeset_new(),
sqlite3changeset_old() или sqlite3changeset_conflict на итераторе changeset
непосредственно (включая передачу changeset iterator отзыву обработчика
конфликта), тогда возвращено значение X''.
Применение должно перевести X'' к NULL при необходимости. Старые (до 3.22.0) версии модуля сессий не могут захватить изменения,
внесенные в таблицу sqlite_stat1. Старые версии функции
sqlite3changeset_apply() тихо игнорируют любые модификации таблицы
sqlite_stat1, которые являются частью changeset или patchset.
Choose any three.
Session Module C Interface
Присоединить таблицу к объекту сессии
int sqlite3session_attach
(
sqlite3_session *pSession, /* Session object */
const char *zTab /* Table name */
);
Специальная обработка sqlite_stat1
CREATE TABLE sqlite_stat1(tbl,idx,stat)