plugins/data: don't pollute the namespace and use emu.print_error (nw)

This commit is contained in:
cracyc 2018-01-14 08:39:37 -06:00
parent cea7ff08ac
commit 380bff2202
3 changed files with 51 additions and 50 deletions

View File

@ -1,6 +1,6 @@
-- get marp high score file from http://replay.marpirc.net/txt/scores3.htm -- get marp high score file from http://replay.marpirc.net/txt/scores3.htm
local dat = {} local dat = {}
local db, sql = require("data/database")() local db = require("data/database")
local ver, info local ver, info
local function init() local function init()
@ -17,9 +17,9 @@ local function init()
end end
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) stmt:bind_values(file)
if stmt:step() == sql.ROW then if stmt:step() == db.ROW then
dbver = stmt:get_value(0) dbver = stmt:get_value(0)
end end
stmt:finalize() stmt:finalize()
@ -31,10 +31,10 @@ local function init()
elseif not fh then elseif not fh then
return return
elseif not dbver then elseif not dbver then
db:exec("CREATE TABLE \"" .. file .. [[" ( db.exec("CREATE TABLE \"" .. file .. [[" (
romset VARCHAR NOT NULL, romset VARCHAR NOT NULL,
data CLOB 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 end
for line in fh:lines() do for line in fh:lines() do
@ -56,11 +56,11 @@ local function init()
end end
if dbver then if dbver then
db:exec("DELETE FROM \"" .. file .. "\"") db.exec("DELETE FROM \"" .. file .. "\"")
db:exec("DELETE FROM \"" .. file .. "_idx\"") db.exec("DELETE FROM \"" .. file .. "_idx\"")
stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?") stmt = db.prepare("UPDATE version SET version = ? WHERE datfile = ?")
else else
stmt = db:prepare("INSERT INTO version VALUES (?, ?)") stmt = db.prepare("INSERT INTO version VALUES (?, ?)")
end end
stmt:bind_values(ver, file) stmt:bind_values(ver, file)
stmt:step() stmt:step()
@ -68,7 +68,7 @@ local function init()
fh:seek("set") fh:seek("set")
local buffer = fh:read("a") local buffer = fh:read("a")
db:exec("BEGIN TRANSACTION") db.exec("BEGIN TRANSACTION")
local function gmatchpos() local function gmatchpos()
local pos = 1 local pos = 1
@ -102,25 +102,23 @@ local function init()
end end
for set, data in gmatchpos() do 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:bind_values(set, data)
stmt:step() stmt:step()
stmt:finalize() stmt:finalize()
end end
fh:close() fh:close()
db:exec("END TRANSACTION") db.exec("END TRANSACTION")
end end
if db then init()
init()
end
function dat.check(set, softlist) function dat.check(set, softlist)
if softlist or not ver or not db then if softlist or not ver then
return nil return nil
end end
info = nil 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) stmt:bind_values(set)
if stmt:step() == sql.ROW then if stmt:step() == sql.ROW then
info = "#j2\n" .. stmt:get_value(0) info = "#j2\n" .. stmt:get_value(0)

View File

@ -2,9 +2,9 @@ local sql = require("lsqlite3")
local datfile = {} local datfile = {}
local db local db
function check_db(msg) local function check_db(msg)
if db:errcode() > sqlite3.OK then if db:errcode() > sql.OK then
io.stderr:write("Error: " .. msg .. " (" .. db:errcode() .. " - " .. db:errmsg() .. ")\n") emu.print_error("Error: " .. msg .. " (" .. db:errcode() .. " - " .. db:errmsg() .. ")\n")
end end
end end
@ -31,4 +31,7 @@ if db then
end end
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

View File

@ -1,5 +1,5 @@
local datfile = {} local datfile = {}
local db, sql = require("data/database")() local db = require("data/database")
function datfile.open(file, vertag, fixupcb) function datfile.open(file, vertag, fixupcb)
if not db then if not db then
@ -7,11 +7,11 @@ function datfile.open(file, vertag, fixupcb)
end end
local function read(tag1, tag2, set) local function read(tag1, tag2, set)
local data 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]]) 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) stmt:bind_values(tag1, tag2, set)
if stmt:step() == sql.ROW then if stmt:step() == db.ROW then
data = stmt:get_value(0) data = stmt:get_value(0)
end end
stmt:finalize() stmt:finalize()
@ -32,10 +32,10 @@ function datfile.open(file, vertag, fixupcb)
-- remove unsafe chars from file for use in sql statement -- remove unsafe chars from file for use in sql statement
file = file:gsub("[^%w%._]", "") file = file:gsub("[^%w%._]", "")
local stmt = db:prepare("SELECT version FROM version WHERE datfile = ?") local stmt = db.prepare("SELECT version FROM version WHERE datfile = ?")
check_db("reading version") db.check("reading version")
stmt:bind_values(file) stmt:bind_values(file)
if stmt:step() == sql.ROW then if stmt:step() == db.ROW then
dbver = stmt:get_value(0) dbver = stmt:get_value(0)
end end
stmt:finalize() stmt:finalize()
@ -46,16 +46,16 @@ function datfile.open(file, vertag, fixupcb)
elseif not fh then elseif not fh then
return nil return nil
elseif not dbver then elseif not dbver then
db:exec("CREATE TABLE \"" .. file .. [[_idx" ( db.exec("CREATE TABLE \"" .. file .. [[_idx" (
type VARCHAR NOT NULL, type VARCHAR NOT NULL,
val VARCHAR NOT NULL, val VARCHAR NOT NULL,
romset VARCHAR NOT NULL, romset VARCHAR NOT NULL,
data INTEGER NOT NULL)]]) data INTEGER NOT NULL)]])
check_db("creating index") db.check("creating index")
db:exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)") db.exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)")
check_db("creating table") db.check("creating table")
db:exec("CREATE INDEX \"typeval_" .. file .. "\" ON \"" .. file .. "_idx\"(type, val)") db.exec("CREATE INDEX \"typeval_" .. file .. "\" ON \"" .. file .. "_idx\"(type, val)")
check_db("creating typeval index") db.check("creating typeval index")
end end
if vertag then if vertag then
@ -76,15 +76,15 @@ function datfile.open(file, vertag, fixupcb)
end end
if dbver then if dbver then
db:exec("DELETE FROM \"" .. file .. "\"") db.exec("DELETE FROM \"" .. file .. "\"")
check_db("deleting") db.check("deleting")
db:exec("DELETE FROM \"" .. file .. "_idx\"") db.exec("DELETE FROM \"" .. file .. "_idx\"")
check_db("deleting index") db.check("deleting index")
stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?") stmt = db.prepare("UPDATE version SET version = ? WHERE datfile = ?")
check_db("updating version") db.check("updating version")
else else
stmt = db:prepare("INSERT INTO version VALUES (?, ?)") stmt = db.prepare("INSERT INTO version VALUES (?, ?)")
check_db("inserting version") db.check("inserting version")
end end
stmt:bind_values(ver, file) stmt:bind_values(ver, file)
stmt:step() stmt:step()
@ -94,8 +94,8 @@ function datfile.open(file, vertag, fixupcb)
local inblock = false local inblock = false
fh:seek("set") fh:seek("set")
local buffer = fh:read("a") local buffer = fh:read("a")
db:exec("BEGIN TRANSACTION") db.exec("BEGIN TRANSACTION")
check_db("beginning transaction") db.check("beginning transaction")
local function gmatchpos() local function gmatchpos()
local pos = 1 local pos = 1
local function iter() local function iter()
@ -136,8 +136,8 @@ function datfile.open(file, vertag, fixupcb)
if fixupcb then if fixupcb then
data = fixupcb(data) data = fixupcb(data)
end end
stmt = db:prepare("INSERT INTO \"" .. file .. "\" VALUES (?)") stmt = db.prepare("INSERT INTO \"" .. file .. "\" VALUES (?)")
check_db("inserting values") db.check("inserting values")
stmt:bind_values(data) stmt:bind_values(data)
stmt:step() stmt:step()
local row = stmt:last_insert_rowid() local row = stmt:last_insert_rowid()
@ -147,8 +147,8 @@ function datfile.open(file, vertag, fixupcb)
if fixupcb then if fixupcb then
fixupcb(data) fixupcb(data)
end end
stmt = db:prepare("INSERT INTO \"" .. file .. "_idx\" VALUES (?, ?, ?, ?)") stmt = db.prepare("INSERT INTO \"" .. file .. "_idx\" VALUES (?, ?, ?, ?)")
check_db("inserting into index") db.check("inserting into index")
stmt:bind_values(tag1, tag2, set, row) stmt:bind_values(tag1, tag2, set, row)
stmt:step() stmt:step()
stmt:finalize() stmt:finalize()
@ -157,8 +157,8 @@ function datfile.open(file, vertag, fixupcb)
end end
end end
end end
db:exec("END TRANSACTION") db.exec("END TRANSACTION")
check_db("ending transaction") db.check("ending transaction")
end end
fh:close() fh:close()