Files
wnsrc/lua/includes/util/sql.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

120 lines
2.9 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
-- Return if there's nothing to add on to
if ( !sql ) then return end
--[[----------------------------------------------------------
Attempts to make a string safe to put into the database
------------------------------------------------------------]]
function sql.SQLStr( str_in, bNoQuotes )
local str = tostring( str_in )
str = str:gsub( "'", "''" )
local null_chr = string.find( str, "\0" )
if ( null_chr ) then
str = string.sub( str, 1, null_chr - 1 )
end
if ( bNoQuotes ) then
return str
end
return "'" .. str .. "'"
end
SQLStr = sql.SQLStr
--[[---------------------------------------------------------
Returns true if the table exists. False if it doesn't
-----------------------------------------------------------]]
function sql.TableExists( name )
local r = sql.Query( "SELECT name FROM sqlite_master WHERE name=" .. SQLStr( name ) .. " AND type='table'" )
return r and true or false
end
--[[---------------------------------------------------------
Returns true if the index exists. False if it doesn't
-----------------------------------------------------------]]
function sql.IndexExists( name )
local r = sql.Query( "SELECT name FROM sqlite_master WHERE name=" .. SQLStr( name ) .. " AND type='index'" )
return r and true or false
end
--[[---------------------------------------------------------
Query and get a single row
eg sql.QueryRow( "SELECT * from ratings LIMIT 1" )
-----------------------------------------------------------]]
function sql.QueryRow( query, row )
row = row or 1
local r = sql.Query( query )
if ( r ) then return r[ row ] end
return r
end
--[[---------------------------------------------------------
Query and get a single value
eg sql.QueryValue( "SELECT count(*) from ratings" )
-----------------------------------------------------------]]
function sql.QueryValue( query )
local r = sql.QueryRow( query )
if ( r ) then
-- Is this really the best way to get the first/only value in a table
for k, v in pairs( r ) do return v end
end
return r
end
--[[---------------------------------------------------------
Call before lots of inserts (100+), will hold off writing to disk
until Commit is called, which will increase performance (a lot)
-----------------------------------------------------------]]
function sql.Begin()
sql.Query( "BEGIN;" )
end
--[[---------------------------------------------------------
See Above
-----------------------------------------------------------]]
function sql.Commit()
sql.Query( "COMMIT;" )
end
--[[----------------------------------------------------------
m_strError is set by the dll
------------------------------------------------------------]]
function sql.LastError()
return sql.m_strError
end