lua-resty-tarantool
lua-resty-tarantool copied to clipboard
Tarantool SQL
tarantool.lua:
function M.exec(self, q, args)
q = q:gsub("'%?'", '?'):gsub('"%?"', '?'):gsub("'", "\\'")
if args then
local replacements = { ['\0'] = '\\0', ['\\'] = '\\\\', ["'"] = "\\'\\'", ["%"] = "%%" }
if type(args) == 'table' then
for i, arg in pairs(args) do
arg = arg:gsub('?', '_________')
arg = arg:gsub('[\'\\%z%%]', replacements)
q = q:gsub('?', "\\'"..arg.."\\'", 1)
end
else
args = args:gsub('?', '_________')
args = args:gsub('[\'\\%z%%]', replacements)
q = q:gsub('?', "\\'"..args.."\\'", 1)
end
q = q:gsub('_________', '?')
end
local eval, err = M.eval(self, "return box.execute('"..q.."')", {})
if err then
return nil, err
end
if eval[1] then
return eval[1].row_count or eval[1].rows, nil
end
if eval[1]==nil and eval[2] then
return nil, eval[2]
end
return eval, nil
end
how to use:
local res, err = tar:exec('CREATE TABLE tester (s1 INT PRIMARY KEY, s2 VARCHAR(6))')
local res, err = tar:exec('INSERT INTO tester VALUES (?,?)', {100, 'QWERTY'})
local res, err = tar:exec('SELECT * FROM tester WHERE s1=100')
local res, err = tar:exec('SELECT * FROM tester WHERE s1=?', 100)
local res, err = tar:exec('SELECT * FROM tester WHERE s1=? AND s2=?', {100, 'QWERTY'})