122 lines
2.7 KiB
Lua
122 lines
2.7 KiB
Lua
local base_table = SH_REPORTS
|
|
local prefix = "SH_REPORTS."
|
|
|
|
base_table.DatabaseConfig = {
|
|
host = "localhost",
|
|
user = "root",
|
|
password = "",
|
|
database = "mysql",
|
|
port = 3306,
|
|
}
|
|
|
|
function base_table:DBPrint(s)
|
|
local src = debug.getinfo(1)
|
|
local _, __, name = src.short_src:find("addons/(.-)/")
|
|
MsgC(Color(0, 200, 255), "[" .. name:upper() .. " DB] ", color_white, s, "\n")
|
|
end
|
|
|
|
function base_table:ConnectToDatabase()
|
|
local dm = self.DatabaseMode
|
|
if (dm == "mysqloo") then
|
|
require("mysqloo")
|
|
|
|
local cfg = self.DatabaseConfig
|
|
|
|
self:DBPrint("Connecting to database")
|
|
|
|
local db = mysqloo.connect(cfg.host, cfg.user, cfg.password, cfg.database, cfg.port)
|
|
db:setAutoReconnect(true)
|
|
db:setMultiStatements(true)
|
|
db.onConnected = function()
|
|
self:DBPrint("Connected to database!")
|
|
self.m_bConnectedToDB = true
|
|
|
|
if (self.DatabaseConnected) then
|
|
self:DatabaseConnected()
|
|
end
|
|
end
|
|
db.onConnectionFailed = function(me, err)
|
|
self:DBPrint("Failed to connect to database: " .. err .. "\n")
|
|
print(err)
|
|
self.m_bConnectedToDB = false
|
|
end
|
|
db:connect()
|
|
_G[prefix .. "DB"] = db
|
|
else
|
|
self:DBPrint("Defaulting to sqlite")
|
|
self.m_bConnectedToDB = true
|
|
|
|
if (self.DatabaseConnected) then
|
|
self:DatabaseConnected()
|
|
end
|
|
end
|
|
end
|
|
|
|
function base_table:IsConnectedToDB()
|
|
return self.m_bConnectedToDB
|
|
end
|
|
|
|
function base_table:Query(query, callback)
|
|
if (!self:IsConnectedToDB()) then
|
|
return end
|
|
|
|
local dm = self.DatabaseMode
|
|
|
|
callback = callback or function(q, ok, ret) end
|
|
|
|
if (dm == "mysqloo") then
|
|
local q = _G[prefix .. "DB"]:query(query)
|
|
q.onSuccess = function(me, data)
|
|
_SH_QUERY_LAST_INSERT_ID = me:lastInsert()
|
|
callback(query, true, data)
|
|
_SH_QUERY_LAST_INSERT_ID = nil
|
|
end
|
|
q.onError = function(me, err, fq)
|
|
callback(query, false, err .. " (" .. fq .. ")")
|
|
self:DBPrint(err .. " (" .. fq .. ")")
|
|
end
|
|
q:start()
|
|
else
|
|
local d = sql.Query(query)
|
|
if (d ~= false) then
|
|
callback(query, true, d or {})
|
|
else
|
|
callback(query, false, sql.LastError())
|
|
print("sqlite error (" .. query .. "): " .. sql.LastError())
|
|
end
|
|
end
|
|
end
|
|
|
|
function base_table:Escape(s)
|
|
local dm = self.DatabaseMode
|
|
if (dm == "mysqloo") then
|
|
return _G[prefix .. "DB"]:escape(s)
|
|
else
|
|
return sql.SQLStr(s, true)
|
|
end
|
|
end
|
|
|
|
function base_table:BetterQuery(query, args, callback)
|
|
for k, v in pairs (args) do
|
|
if (isstring(v)) then
|
|
v = self:Escape(v)
|
|
end
|
|
v = tostring(v)
|
|
|
|
query = query:Replace("{" .. k .. "}", "'" .. v .. "'")
|
|
query = query:Replace("[" .. k .. "]", v)
|
|
end
|
|
|
|
self:Query(query, callback)
|
|
end
|
|
|
|
hook.Add("InitPostEntity", prefix .. "ConnectToDatabase", function()
|
|
base_table:ConnectToDatabase()
|
|
end)
|
|
|
|
if (_G[prefix .. "DB"]) then
|
|
base_table.m_bConnectedToDB = _G[prefix .. "DB"]:status() == 0
|
|
end
|
|
|
|
-- vk.com/urbanichka
|