60 lines
1.3 KiB
Lua
60 lines
1.3 KiB
Lua
local sql = require("lsqlite3")
|
|
|
|
local db = require("db")
|
|
local queries = require("queries")
|
|
local util = require("util")
|
|
local tags = {}
|
|
|
|
local stmnt_get_tags, stmnt_ins_tag, stmnt_drop_tags
|
|
|
|
local oldconfigure = configure
|
|
function configure(...)
|
|
--Tags for a story
|
|
stmnt_ins_tag = assert(db.conn:prepare(queries.insert_tag))
|
|
stmnt_get_tags = assert(db.conn:prepare(queries.select_tags))
|
|
stmnt_drop_tags = assert(db.conn:prepare(queries.delete_tags))
|
|
|
|
return oldconfigure(...)
|
|
end
|
|
|
|
|
|
function tags.get(id)
|
|
local ret = {}
|
|
stmnt_get_tags:bind_names{
|
|
id = id
|
|
}
|
|
local err
|
|
repeat
|
|
err = stmnt_get_tags:step()
|
|
if err == sql.BUSY then
|
|
coroutine.yield()
|
|
elseif err == sql.ROW then
|
|
table.insert(ret,stmnt_get_tags:get_value(0))
|
|
elseif err == sql.DONE then
|
|
stmnt_get_tags:reset()
|
|
return ret
|
|
else
|
|
error(string.format("Failed to get tags for story %d : %d", id, err))
|
|
end
|
|
until false
|
|
end
|
|
|
|
function tags.set(storyid,tags)
|
|
assert(stmnt_drop_tags:bind_names{postid = storyid} == sql.OK)
|
|
db.do_sql(stmnt_drop_tags)
|
|
stmnt_drop_tags:reset()
|
|
local err
|
|
for _,tag in pairs(tags) do
|
|
assert(stmnt_ins_tag:bind(1,storyid) == sql.OK)
|
|
assert(stmnt_ins_tag:bind(2,tag) == sql.OK)
|
|
err = db.do_sql(stmnt_ins_tag)
|
|
stmnt_ins_tag:reset()
|
|
end
|
|
if err ~= sql.DONE then
|
|
log(LOG_CRIT,"Failed to save tags on " .. storyid)
|
|
end
|
|
|
|
end
|
|
|
|
return tags
|