add sborka
This commit is contained in:
121
garrysmod/addons/shreports/lua/reports/lib_database.lua
Normal file
121
garrysmod/addons/shreports/lua/reports/lib_database.lua
Normal file
@@ -0,0 +1,121 @@
|
||||
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
|
||||
Reference in New Issue
Block a user