int sqlite3changeset_op( sqlite3_changeset_iter *pIter, /* Iterator object */ const char **pzTab, /* OUT: Pointer to table name */ int *pnCol, /* OUT: Number of columns in table */ int *pOp, /* OUT: SQLITE_INSERT, DELETE or UPDATE */ int *pbIndirect /* OUT: True for an 'indirect' change */ );
Аргументом pIter, переданным к этой функции, может быть iterator, переданный обработчику конфликта sqlite3changeset_apply(), или итератор, созданный sqlite3changeset_start(). В последнем случае новое обращение к sqlite3changeset_next() должно вернуть SQLITE_ROW. Если дело обстоит не так, эта функция возвращает SQLITE_MISUSE.
Аргументы pOp, pnCol и pzTab не могут быть NULL. По возвращению три вывода установлены через эти указатели:
*pOp установлен в один из SQLITE_INSERT, SQLITE_DELETE или SQLITE_UPDATE, в зависимости от типа изменения, на которое в настоящее время указывает iterator.
*pnCol установлен в количество колонок в таблице, затронутых изменением
*pzTab указывает на nul-законченную utf-8 последовательность, содержащую название таблицы, затронутой текущим изменением. Буфер остается действительным до вызова sqlite3changeset_next() на iterator или до возврата функции-обработчика конфликта.
Если pbIndirect не NULL, *pbIndirect = true (1), если изменение косвенное, или в false (0) иначе. См. документацию для sqlite3session_indirect() для описания прямых и косвенных изменений.
Если никакая ошибка не происходит, SQLITE_OK возвращен. Если ошибка происходит, код ошибки SQLite возвращен. Значениям выходных переменных нельзя доверять в этом случае.