mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
120 lines
2.9 KiB
Lua
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
|