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

Загрузите различие между таблицами в сессию

int sqlite3session_diff(sqlite3_session *pSession, const char *zFromDb,
                        const char *zTbl, char **pzErrMsg);

Если это еще не присоединено к объекту сессии, переданному как первый аргумент, эта функция прилагает таблицу zTbl таким же образом, как функция sqlite3session_attach(). Если zTbl не существует или если у нее нет первичного ключа, эта функция не делает (но не возвращает ошибку).

zFromDb должно быть название базы данных ("main", "temp", ...) приложенной к тому же самому дескриптору базы данных как объект сессии, который содержит таблицу, совместимую с таблицей, приложенной к сессии этой функцией. Таблицу считают совместимой, если:

  • Имеет то же самое имя
  • Имеет тот же самый набор колонок, объявленных в том же самом порядке
  • Имеет то же самое определение PRIMARY KEY

Если таблицы не совместимы, SQLITE_SCHEMA возвращен. Если таблицы совместимы, но не имеют никаких колонок PRIMARY KEY, это не ошибка, но никакие изменения не добавляются к объекту сессии. Как с другой сессией API, просто проигнорированы таблицы без PRIMARY KEY.

Эта функция добавляет ряд изменений объекта сессии, который мог использоваться, чтобы обновить таблицу в базе данных zFrom (назовите это "from-table") так, чтобы ее содержание совпало с таблицей, приложенной к объекту сессии (назовите это "to-table"):

  • Для каждой строки (первичный ключ), которая существует в to-table, но не в from-table, запись INSERT добавляется к объекту сессии.

  • Для каждой строки (первичный ключ), которая есть в to-table, но не в from-table, запись DELETE добавляется к объекту сессии.

  • Для каждой строки (первичный ключ), которая существует в обоих таблицых, но показывает различные значения non-PK, запись UPDATE добавляется к сессии.

Если эта функция вызвана и затем changeset построен с использованием sqlite3session_changeset(), то после применения этого changeset к базе данных zFrom содержание двух совместимых таблиц будет идентичным.

Это ошибка, если база данных zFrom не существует или не содержит необходимую совместимую таблицу.

Если операция успешна, SQLITE_OK возвращен. Иначе вернется код ошибки SQLite. В этом случае, если аргументом pzErrMsg не является NULL, *pzErrMsg может указать на буфер, содержащий английское языковое сообщение об ошибке. Обязанность вызывающего освободить этот буфер, используя sqlite3_free().