2023-07-19 11:26:00 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
db: add DB:execute_many()
diff --git a/lib/ludweb/sqlite.lua b/lib/ludweb/sqlite.lua index 029d8f2..b4db726 100644 --- a/lib/ludweb/sqlite.lua +++ b/lib/ludweb/sqlite.lua @@ -42,7 +42,9 @@ DB.__index = DB function DB:execute(sql, ...) local pstmt = ffi.new("sqlite3_stmt *[1]") - local res = CODE[C.sqlite3_prepare_v2(self.db, sql, #sql, pstmt, nil)] + local rest = ffi.new("const char *[1]") + local res = CODE[C.sqlite3_prepare_v2(self.db, sql, #sql, pstmt, rest)] + rest = ffi.string(rest[0]) if res ~= "OK" then local error_message = ffi.string(C.sqlite3_errmsg(self.db)) error("SQLite:"..res..": "..error_message) @@ -88,7 +90,18 @@ function DB:execute(sql, ...) end until done C.sqlite3_finalize(stmt) - return rows + return rows, rest +end + +function DB:execute_many(sql, ...) + local results = {} + local rows + repeat + rows, sql = self:execute(sql, ...) + table.insert(results, rows) + local done = #sql:gsub("^%s+", "") == 0 + until done + return results end function DB:close()