From 0105d181ab3ea1bc6f517c5fcd9805e7d73e3f02 Mon Sep 17 00:00:00 2001 From: Timo Smit Date: Tue, 7 Feb 2017 20:11:18 +0100 Subject: [PATCH] Allow support for Legacy's in-memory database --- luamods/wolfadmin/db/mysql.lua | 4 ++- luamods/wolfadmin/db/sqlite3.lua | 46 +++++++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/luamods/wolfadmin/db/mysql.lua b/luamods/wolfadmin/db/mysql.lua index 898526b..cfc2a15 100644 --- a/luamods/wolfadmin/db/mysql.lua +++ b/luamods/wolfadmin/db/mysql.lua @@ -294,11 +294,13 @@ function mysql.start() con = env:connect(settings.get("db_database"), settings.get("db_username"), settings.get("db_password"), settings.get("db_hostname"), settings.get("db_port")) if not con then - return + error("could not connect to database") end end function mysql.close(doSave) + con:close() + env:close() end return mysql diff --git a/luamods/wolfadmin/db/sqlite3.lua b/luamods/wolfadmin/db/sqlite3.lua index 8fdf3de..5912845 100644 --- a/luamods/wolfadmin/db/sqlite3.lua +++ b/luamods/wolfadmin/db/sqlite3.lua @@ -47,6 +47,34 @@ function sqlite3.getplayerid(clientId) return sqlite3.getplayer(players.getGUID(clientId))["id"] end +function sqlite3.getPlayersCount() + cur = assert(con:execute("SELECT COUNT(`id`) AS `count` FROM `player`")) + + local count = tonumber(cur:fetch({}, "a")["count"]) + cur:close() + + return count +end + +function sqlite3.getPlayers(limit, offset) + limit = limit or 30 + offset = offset or 0 + + cur = assert(con:execute("SELECT * FROM `player` LIMIT "..tonumber(limit).." OFFSET "..tonumber(offset))) + + local players = {} + local row = cur:fetch({}, "a") + + while row do + table.insert(players, tables.copy(row)) + row = cur:fetch(row, "a") + end + + cur:close() + + return players +end + function sqlite3.getplayer(guid) cur = assert(con:execute("SELECT * FROM `player` WHERE `guid`='"..util.escape(guid).."'")) @@ -474,18 +502,28 @@ function sqlite3.isconnected() end function sqlite3.start() - con = env:connect(wolfa_getHomePath()..settings.get("db_file")) + local uri, file = nil, settings.get("db_file") + + if string.find(file, ":memory:?cache=shared") then + uri = file + else + uri = wolfa_getHomePath()..file + end + + con = env:connect(uri) if not con then - return + error("could not connect to database") end -- enable foreign key enforcement - cur = assert(con:execute("PRAGMA foreign_keys=1")) - cur = assert(con:execute("PRAGMA synchronous=0")) + assert(con:execute("PRAGMA foreign_keys=1")) + assert(con:execute("PRAGMA synchronous=0")) end function sqlite3.close(doSave) + con:close() + env:close() end return sqlite3