login

<     >

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()