From 0dcce516a8d502b484f4b09988467b0219f10616 Mon Sep 17 00:00:00 2001 From: Paul Kulchenko Date: Sun, 6 Nov 2022 08:45:02 -0800 Subject: [PATCH] Add pk/fk_conflicts iterator methods to SQLite Lua API --- tool/net/lsqlite3.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tool/net/lsqlite3.c b/tool/net/lsqlite3.c index eb72079ea..ff7485c6b 100644 --- a/tool/net/lsqlite3.c +++ b/tool/net/lsqlite3.c @@ -1896,6 +1896,32 @@ static int liter_conflict(lua_State *L) { return liter_table(L, sqlite3changeset_conflict); } +static int liter_fk_conflicts(lua_State *L) { + int rc, nOut; + liter *litr = lsqlite_checkiter(L, 1); + if ((rc = sqlite3changeset_fk_conflicts(litr->itr, &nOut)) != LUA_OK) { + return pusherr(L, rc); + } + lua_pushinteger(L, nOut); + return 1; +} + +static int liter_pk(lua_State *L) { + const char *zTab; + int n, rc, nCol; + unsigned char *abPK; + liter *litr = lsqlite_checkiter(L, 1); + if ((rc = sqlite3changeset_pk(litr->itr, &abPK, &nCol)) != LUA_OK) { + return pusherr(L, rc); + } + lua_createtable(L, nCol, 0); + for (n = 0; n < nCol; n++) { + lua_pushboolean(L, abPK[n]); + lua_rawseti(L, -2, n+1); + } + return 1; +} + /* ** ======================================================= ** Rebaser functions (for session support) @@ -2626,9 +2652,11 @@ static const luaL_Reg reblib[] = { }; static const luaL_Reg itrlib[] = { + {"pk", liter_pk }, {"new", liter_new }, {"old", liter_old }, {"conflict", liter_conflict }, + {"fk_conflicts", liter_fk_conflicts }, {"__tostring", liter_tostring }, {NULL, NULL}