I just tried that prepare and it worked very very well xD
everything is now saving in a second
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | local db = sqlite3.open(cPluginManager:Get():GetCurrentPlugin():GetLocalFolder() .. "/storage.sqlite" ) db:exec( "BEGIN TRANSACTION" ) -- Postpone all DB changes into one big step, to save on disk I/O local stmt, err, errmsg = db:prepare( "INSERT INTO marker (X, Y, Z, World, Player_name) VALUES (?, ?, ?, ?, ?)" ) if ( not stmt) then LOG(err .. " " .. errmsg) end for X in pairs(marker_temp) do for Y in pairs(marker_temp[X]) do for Z in pairs(marker_temp[X][Y]) do for World_name in pairs(marker_temp[X][Y][Z]) do for Player_name in pairs(marker_temp[X][Y][Z][World_name]) do LOG( "Saving: " .. X .. "X " .. Y .. "Y " .. Z .. "Z " .. World_name .. " " .. Player_name) stmt:bind_names({X, Y, Z, World_name, Player_name}) stmt:step() -- execute the statement (once) stmt:reset() -- reset the statement so that the next "wall" values can be inserted end end end end end stmt:finalize() db:exec( "COMMIT" ) -- Now put everything queued so far into the DB file marker_temp = {} |