60 lines
1.4 KiB
Lua
60 lines
1.4 KiB
Lua
local sql = require("lsqlite3")
|
|
|
|
local db = require("db")
|
|
local queries = require("queries")
|
|
local util = require("util")
|
|
local libtags = require("tags")
|
|
local pages = require("pages")
|
|
local config = require("config")
|
|
|
|
local stmnt_search
|
|
local oldconfigure = configure
|
|
function configure(...)
|
|
stmnt_search = assert(db.conn:prepare(queries.select_post_tags))
|
|
return oldconfigure(...)
|
|
end
|
|
|
|
local function search_get(req)
|
|
local host = http_request_get_host(req)
|
|
local path = http_request_get_path(req)
|
|
http_request_populate_qs(req)
|
|
local tag = http_argument_get_string(req,"tag")
|
|
if tag then
|
|
stmnt_search:bind_names{
|
|
tag = tag
|
|
}
|
|
local results = {}
|
|
local err
|
|
repeat
|
|
err = stmnt_search:step()
|
|
if err == sql.BUSY then
|
|
coroutine.yield()
|
|
elseif err == sql.ROW then
|
|
local id, title, anon, time, author = unpack(stmnt_search:get_values())
|
|
local idp = util.encode_id(id)
|
|
local tags = libtags.get(id)
|
|
table.insert(results,{
|
|
id = idp,
|
|
title = title,
|
|
anon = anon,
|
|
time = os.date("%B %d %Y",tonumber(time)),
|
|
author = author,
|
|
tags = tags
|
|
})
|
|
elseif err == sql.DONE then
|
|
stmnt_search:reset()
|
|
else
|
|
error("Failed to search, sql error:" .. tostring(err))
|
|
end
|
|
until err == sql.DONE
|
|
local ret = pages.search{
|
|
domain = config.domain,
|
|
results = results,
|
|
tag = tag,
|
|
}
|
|
http_response(req,200,ret)
|
|
end
|
|
end
|
|
|
|
return search_get
|