mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +03:00
Merge pull request #3065 from firewave/database
plugins/data: added reporting of database errors (nw)
This commit is contained in:
commit
c9b3574e55
@ -1,23 +1,33 @@
|
|||||||
local sql = require("lsqlite3")
|
local sql = require("lsqlite3")
|
||||||
local datfile = {}
|
local datfile = {}
|
||||||
local db
|
local db
|
||||||
|
|
||||||
|
function check_db(msg)
|
||||||
|
if db:errcode() > sqlite3.OK then
|
||||||
|
io.stderr:write("Error: " .. msg .. " (" .. db:errcode() .. " - " .. db:errmsg() .. ")\n")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
do
|
do
|
||||||
local dbpath = lfs.env_replace(mame_manager:ui():options().entries.historypath:value():match("([^;]+)"))
|
local dbpath = lfs.env_replace(mame_manager:ui():options().entries.historypath:value():match("([^;]+)"))
|
||||||
db = sql.open(dbpath .. "/history.db")
|
db = sql.open(dbpath .. "/history.db")
|
||||||
if not db then
|
if not db then
|
||||||
lfs.mkdir(dbpath)
|
lfs.mkdir(dbpath)
|
||||||
db = sql.open(dbpath .. "/history.db")
|
db = sql.open(dbpath .. "/history.db")
|
||||||
|
check_db("opening database")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if db then
|
if db then
|
||||||
local found = false
|
local found = false
|
||||||
db:exec("select * from sqlite_master where name = 'version'", function() found = true return 0 end)
|
db:exec("select * from sqlite_master where name = 'version'", function() found = true return 0 end)
|
||||||
|
check_db("checking for 'version' table")
|
||||||
if not found then
|
if not found then
|
||||||
db:exec([[
|
db:exec([[
|
||||||
CREATE TABLE version (
|
CREATE TABLE version (
|
||||||
version VARCHAR NOT NULL,
|
version VARCHAR NOT NULL,
|
||||||
datfile VARCHAR UNIQUE NOT NULL)]])
|
datfile VARCHAR UNIQUE NOT NULL)]])
|
||||||
|
check_db("creating 'version' table")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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)
|
||||||
stmt:bind_values(tag1, tag2, set)
|
stmt:bind_values(tag1, tag2, set)
|
||||||
if stmt:step() == sql.ROW then
|
if stmt:step() == sql.ROW then
|
||||||
data = stmt:get_value(0)
|
data = stmt:get_value(0)
|
||||||
@ -32,6 +33,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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")
|
||||||
stmt:bind_values(file)
|
stmt:bind_values(file)
|
||||||
if stmt:step() == sql.ROW then
|
if stmt:step() == sql.ROW then
|
||||||
dbver = stmt:get_value(0)
|
dbver = stmt:get_value(0)
|
||||||
@ -49,8 +51,11 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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:exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)")
|
db:exec("CREATE TABLE \"" .. file .. "\" (data CLOB NOT NULL)")
|
||||||
|
check_db("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")
|
||||||
end
|
end
|
||||||
|
|
||||||
if vertag then
|
if vertag then
|
||||||
@ -72,10 +77,14 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
|
|
||||||
if dbver then
|
if dbver then
|
||||||
db:exec("DELETE FROM \"" .. file .. "\"")
|
db:exec("DELETE FROM \"" .. file .. "\"")
|
||||||
|
check_db("deleting")
|
||||||
db:exec("DELETE FROM \"" .. file .. "_idx\"")
|
db:exec("DELETE FROM \"" .. file .. "_idx\"")
|
||||||
|
check_db("deleting index")
|
||||||
stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?")
|
stmt = db:prepare("UPDATE version SET version = ? WHERE datfile = ?")
|
||||||
|
check_db("updating version")
|
||||||
else
|
else
|
||||||
stmt = db:prepare("INSERT INTO version VALUES (?, ?)")
|
stmt = db:prepare("INSERT INTO version VALUES (?, ?)")
|
||||||
|
check_db("inserting version")
|
||||||
end
|
end
|
||||||
stmt:bind_values(ver, file)
|
stmt:bind_values(ver, file)
|
||||||
stmt:step()
|
stmt:step()
|
||||||
@ -86,6 +95,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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")
|
||||||
local function gmatchpos()
|
local function gmatchpos()
|
||||||
local pos = 1
|
local pos = 1
|
||||||
local function iter()
|
local function iter()
|
||||||
@ -127,6 +137,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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")
|
||||||
stmt:bind_values(data)
|
stmt:bind_values(data)
|
||||||
stmt:step()
|
stmt:step()
|
||||||
local row = stmt:last_insert_rowid()
|
local row = stmt:last_insert_rowid()
|
||||||
@ -137,6 +148,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
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")
|
||||||
stmt:bind_values(tag1, tag2, set, row)
|
stmt:bind_values(tag1, tag2, set, row)
|
||||||
stmt:step()
|
stmt:step()
|
||||||
stmt:finalize()
|
stmt:finalize()
|
||||||
@ -146,6 +158,7 @@ function datfile.open(file, vertag, fixupcb)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
db:exec("END TRANSACTION")
|
db:exec("END TRANSACTION")
|
||||||
|
check_db("ending transaction")
|
||||||
end
|
end
|
||||||
fh:close()
|
fh:close()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user