会话模块 C 接口

传递给冲突处理程序的常量

#define SQLITE_CHANGESET_DATA        1
#define SQLITE_CHANGESET_NOTFOUND    2
#define SQLITE_CHANGESET_CONFLICT    3
#define SQLITE_CHANGESET_CONSTRAINT  4
#define SQLITE_CHANGESET_FOREIGN_KEY 5

可以作为第二个参数传递给冲突处理程序的值。

SQLITE_CHANGESET_DATA
如果数据库中存在具有所需 PRIMARY KEY 字段的行,但一个或多个其他(非主键)字段被更新修改,则在处理 DELETE 或 UPDATE 更改时,冲突处理程序将以 CHANGESET_DATA 作为第二个参数调用不包含预期的“之前”值。

在这种情况下,冲突行是具有匹配主键的数据库行。

SQLITE_CHANGESET_NOTFOUND
如果数据库中不存在具有所需 PRIMARY KEY 字段的行,则在处理 DELETE 或 UPDATE 更改时,将使用 CHANGESET_NOTFOUND 作为第二个参数调用冲突处理程序。

在这种情况下没有冲突的行。调用 sqlite3changeset_conflict() API 的结果是未定义的。

SQLITE_CHANGESET_CONFLICT
如果操作会导致重复的主键值,则 CHANGESET_CONFLICT 在处理 INSERT 更改时作为第二个参数传递给冲突处理程序。

在这种情况下,冲突行是具有匹配主键的数据库行。

SQLITE_CHANGESET_FOREIGN_KEY
如果启用了外键处理,并且应用变更集会使数据库处于包含外键违规的状态,则在提交变更集之前,将使用 CHANGESET_FOREIGN_KEY 作为第二个参数调用冲突处理程序。如果冲突处理程序返回 CHANGESET_OMIT,则提交更改,包括那些导致违反外键约束的更改。或者,如果它返回 CHANGESET_ABORT,则回滚变更集。

未提供当前或冲突的行信息。唯一可以调用提供的 sqlite3_changeset_iter 句柄的函数是 sqlite3changeset_fk_conflicts()。

SQLITE_CHANGESET_CONSTRAINT
如果在应用更改时发生任何其他约束冲突(即 UNIQUE、CHECK 或 NOT NULL 约束),将使用 CHANGESET_CONSTRAINT 作为第二个参数调用冲突处理程序。

在这种情况下没有冲突的行。调用 sqlite3changeset_conflict() API 的结果是未定义的。

另请参阅 对象常量函数的列表。