55 lines
1.7 KiB
Lua
55 lines
1.7 KiB
Lua
--[[
|
|
Does most of the database interaction.
|
|
Notably, holds a connection to the open sqlite3 database in .conn
|
|
]]
|
|
local sql = require("lsqlite3")
|
|
|
|
local queries = require("queries")
|
|
local util = require("util")
|
|
local config = require("config")
|
|
|
|
local db = {}
|
|
local oldconfigure = configure
|
|
db.conn = util.sqlassert(sql.open(config.db))
|
|
function configure(...)
|
|
|
|
--Create sql tables
|
|
assert(db.conn:exec(queries.create_table_authors))
|
|
--Create a fake "anonymous" user, so we don't run into trouble
|
|
--so that no one runs into trouble being able to paste under this account.
|
|
assert(db.conn:exec(queries.insert_anon_author))
|
|
--If/when an author deletes their account, all posts
|
|
--and comments by that author are also deleted (on
|
|
--delete cascade) this is intentional. This also
|
|
--means that all comments by other users on a post
|
|
--an author makes will also be deleted.
|
|
--
|
|
--Post text uses zlib compression
|
|
assert(db.conn:exec(queries.create_table_posts))
|
|
--Store the raw text so people can download it later, maybe
|
|
--we can use it for "download as image" or "download as pdf"
|
|
--in the future too. Stil stored zlib compressed
|
|
assert(db.conn:exec(queries.create_table_raw_text))
|
|
--Maybe we want to store images one day?
|
|
assert(db.conn:exec(queries.create_table_images))
|
|
--Comments on a post
|
|
assert(db.conn:exec(queries.create_table_comments))
|
|
--Tags for a post
|
|
assert(db.conn:exec(queries.create_table_tags))
|
|
--Index for tags
|
|
assert(db.conn:exec(queries.create_index_tags))
|
|
--Store a cookie for logged in users. Logged in users can edit
|
|
--their own posts, and edit their biographies.
|
|
assert(db.conn:exec(queries.create_table_session))
|
|
|
|
return oldconfigure(...)
|
|
end
|
|
configure()
|
|
|
|
function db.close()
|
|
db.conn:close()
|
|
end
|
|
|
|
|
|
return db
|