diff options
-rw-r--r-- | plugins/data/data_marp.lua | 32 | ||||
-rw-r--r-- | plugins/data/database.lua | 11 | ||||
-rw-r--r-- | plugins/data/load_dat.lua | 58 |
3 files changed, 51 insertions, 50 deletions
diff --git a/plugins/data/data_marp.lua b/plugins/data/data_marp.lua index 0919683d3e6..f74e098226b 100644 --- a/plugins/data/data_marp.lua +++ b/plugins/data/data_marp.lua @@ -1,6 +1,6 @@ -- get marp high score file from http://replay.marpirc.net/txt/scores3.htm local dat = {} -local db, sql = require("data/database")() +local db = require("data/database") local ver, info local function init() @@ -17,9 +17,9 @@ local function init() end end - local stmt = db:prepare("SELECT version FROM version WHERE datfile = ?") + local stmt = db.prepare("SELECT version FROM version WHERE datfile = ?") stmt:bind_values(file) - if stmt:step() == sql.ROW then + if stmt:step() == db.ROW then dbver = stmt:get_value(0) end stmt:finalize() @@ -31,10 +31,10 @@ local function init() elseif not fh then return elseif not dbver then - db:exec("CREATE TABLE \"" .. file .. [[" ( + db.exec("CREATE TABLE \"" .. file .. [[" ( romset VARCHAR NOT NULL, data CLOB NOT NULL)]]) - db:exec("CREATE INDEX \"romset_" .. file .. "\" ON \"" .. file .. "_idx\"(romset)") + db.exec("CREATE INDEX \"romset_" .. file .. "\" ON \"" .. file .. "_idx\"(romset)") end for line in fh:lines() do @@ -56,11 +56,11 @@ local function init() end if dbver then - db:exec("DELETE FROM \"" .. file .. "\"") - db:exec("DELETE FROM \"" .. file .. "_idx\"") - stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?") + db.exec("DELETE FROM \"" .. file .. "\"") + db.exec("DELETE FROM \"" .. file .. "_idx\"") + stmt = db.prepare("UPDATE version SET version = ? WHERE datfile = ?") else - stmt = db:prepare("INSERT INTO version VALUES (?, ?)") + stmt = db.prepare("INSERT INTO version VALUES (?, ?)") end stmt:bind_values(ver, file) stmt:step() @@ -68,7 +68,7 @@ local function init() fh:seek("set") local buffer = fh:read("a") - db:exec("BEGIN TRANSACTION") + db.exec("BEGIN TRANSACTION") local function gmatchpos() local pos = 1 @@ -102,25 +102,23 @@ local function init() end for set, data in gmatchpos() do - stmt = db:prepare("INSERT INTO \"" .. file .. "\" VALUES (?, ?)") + stmt = db.prepare("INSERT INTO \"" .. file .. "\" VALUES (?, ?)") stmt:bind_values(set, data) stmt:step() stmt:finalize() end fh:close() - db:exec("END TRANSACTION") + db.exec("END TRANSACTION") end -if db then - init() -end +init() function dat.check(set, softlist) - if softlist or not ver or not db then + if softlist or not ver then return nil end info = nil - local stmt = db:prepare("SELECT data FROM \"scores3.htm\" AS f WHERE romset = ?") + local stmt = db.prepare("SELECT data FROM \"scores3.htm\" AS f WHERE romset = ?") stmt:bind_values(set) if stmt:step() == sql.ROW then info = "#j2\n" .. stmt:get_value(0) diff --git a/plugins/data/database.lua b/plugins/data/database.lua index 9e1fd7ae855..aff74c9bc87 100644 --- a/plugins/data/database.lua +++ b/plugins/data/database.lua @@ -2,9 +2,9 @@ local sql = require("lsqlite3") local datfile = {} local db -function check_db(msg) - if db:errcode() > sqlite3.OK then - io.stderr:write("Error: " .. msg .. " (" .. db:errcode() .. " - " .. db:errmsg() .. ")\n") +local function check_db(msg) + if db:errcode() > sql.OK then + emu.print_error("Error: " .. msg .. " (" .. db:errcode() .. " - " .. db:errmsg() .. ")\n") end end @@ -31,4 +31,7 @@ if db then end end -return function() return db, sql end +local dbtable = { prepare = function(...) return db:prepare(...) end, + exec = function(...) return db:exec(...) end, ROW = sql.ROW, check = check_db } + +return db and dbtable or nil diff --git a/plugins/data/load_dat.lua b/plugins/data/load_dat.lua index 9f365921328..3521820f078 100644 --- a/plugins/data/load_dat.lua +++ b/plugins/data/load_dat.lua @@ -1,5 +1,5 @@ local datfile = {} -local db, sql = require("data/database")() +local db = require("data/database") function datfile.open(file, vertag, fixupcb) if not db then @@ -7,11 +7,11 @@ function datfile.open(file, vertag, fixupcb) end local function read(tag1, tag2, set) local data - local stmt = db:prepare("SELECT f.data FROM \"" .. file .. "_idx\" AS fi, \"" .. file .. [[" + local stmt = db.prepare("SELECT f.data FROM \"" .. file .. "_idx\" AS fi, \"" .. file .. [[" AS f WHERE fi.type = ? AND fi.val = ? AND fi.romset = ? AND f.rowid = fi.data]]) - check_db("reading " .. tag1 .. " - " .. tag2 .. " - " .. set) + db.check("reading " .. tag1 .. " - " .. tag2 .. " - " .. set) stmt:bind_values(tag1, tag2, set) - if stmt:step() == sql.ROW then + if stmt:step() == db.ROW then data = stmt:get_value(0) end stmt:finalize() @@ -32,10 +32,10 @@ function datfile.open(file, vertag, fixupcb) -- remove unsafe chars from file for use in sql statement file = file:gsub("[^%w%._]", "") - local stmt = db:prepare("SELECT version FROM version WHERE datfile = ?") - check_db("reading version") + local stmt = db.prepare("SELECT version FROM version WHERE datfile = ?") + db.check("reading version") stmt:bind_values(file) - if stmt:step() == sql.ROW then + if stmt:step() == db.ROW then dbver = stmt:get_value(0) end stmt:finalize() @@ -46,16 +46,16 @@ function datfile.open(file, vertag, fixupcb) elseif not fh then return nil elseif not dbver then - db:exec("CREATE TABLE \"" .. file .. [[_idx" ( + db.exec("CREATE TABLE \"" .. file .. [[_idx" ( type VARCHAR NOT NULL, val VARCHAR NOT NULL, romset VARCHAR NOT NULL, data INTEGER NOT NULL)]]) - check_db("creating index") - db:exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)") - check_db("creating table") - db:exec("CREATE INDEX \"typeval_" .. file .. "\" ON \"" .. file .. "_idx\"(type, val)") - check_db("creating typeval index") + db.check("creating index") + db.exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)") + db.check("creating table") + db.exec("CREATE INDEX \"typeval_" .. file .. "\" ON \"" .. file .. "_idx\"(type, val)") + db.check("creating typeval index") end if vertag then @@ -76,15 +76,15 @@ function datfile.open(file, vertag, fixupcb) end if dbver then - db:exec("DELETE FROM \"" .. file .. "\"") - check_db("deleting") - db:exec("DELETE FROM \"" .. file .. "_idx\"") - check_db("deleting index") - stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?") - check_db("updating version") + db.exec("DELETE FROM \"" .. file .. "\"") + db.check("deleting") + db.exec("DELETE FROM \"" .. file .. "_idx\"") + db.check("deleting index") + stmt = db.prepare("UPDATE version SET version = ? WHERE datfile = ?") + db.check("updating version") else - stmt = db:prepare("INSERT INTO version VALUES (?, ?)") - check_db("inserting version") + stmt = db.prepare("INSERT INTO version VALUES (?, ?)") + db.check("inserting version") end stmt:bind_values(ver, file) stmt:step() @@ -94,8 +94,8 @@ function datfile.open(file, vertag, fixupcb) local inblock = false fh:seek("set") local buffer = fh:read("a") - db:exec("BEGIN TRANSACTION") - check_db("beginning transaction") + db.exec("BEGIN TRANSACTION") + db.check("beginning transaction") local function gmatchpos() local pos = 1 local function iter() @@ -136,8 +136,8 @@ function datfile.open(file, vertag, fixupcb) if fixupcb then data = fixupcb(data) end - stmt = db:prepare("INSERT INTO \"" .. file .. "\" VALUES (?)") - check_db("inserting values") + stmt = db.prepare("INSERT INTO \"" .. file .. "\" VALUES (?)") + db.check("inserting values") stmt:bind_values(data) stmt:step() local row = stmt:last_insert_rowid() @@ -147,8 +147,8 @@ function datfile.open(file, vertag, fixupcb) if fixupcb then fixupcb(data) end - stmt = db:prepare("INSERT INTO \"" .. file .. "_idx\" VALUES (?, ?, ?, ?)") - check_db("inserting into index") + stmt = db.prepare("INSERT INTO \"" .. file .. "_idx\" VALUES (?, ?, ?, ?)") + db.check("inserting into index") stmt:bind_values(tag1, tag2, set, row) stmt:step() stmt:finalize() @@ -157,8 +157,8 @@ function datfile.open(file, vertag, fixupcb) end end end - db:exec("END TRANSACTION") - check_db("ending transaction") + db.exec("END TRANSACTION") + db.check("ending transaction") end fh:close() |