95 lines
3.5 KiB
Lua
95 lines
3.5 KiB
Lua
local db = require("lapis.db")
|
|
local schema = require("lapis.db.schema")
|
|
local types = schema.types
|
|
|
|
return {
|
|
[1] = function ()
|
|
schema.create_table("sessions", {
|
|
{"id", types.integer{primary_key = true}},
|
|
{"key", types.text{unique = true}},
|
|
{"user_id", "INTEGER REFERENCES users(id) ON DELETE CASCADE"},
|
|
{"expires_at", types.integer},
|
|
{"created_at", "INTEGER DEFAULT (unixepoch(CURRENT_TIMESTAMP))"},
|
|
})
|
|
|
|
db.query("CREATE INDEX sessions_user_id ON sessions(user_id)")
|
|
db.query("CREATE INDEX session_keys ON sessions(key)")
|
|
end,
|
|
|
|
[2] = function ()
|
|
schema.add_column("users", "confirmed_on", types.integer{null = true})
|
|
end,
|
|
|
|
[3] = function ()
|
|
schema.add_column("users", "status", types.text{null = true, default=""})
|
|
schema.create_table("avatars", {
|
|
{"id", types.integer{primary_key = true}},
|
|
{"file_path", types.text{unique = true}},
|
|
{"uploaded_at", "INTEGER DEFAULT (unixepoch(CURRENT_TIMESTAMP))"},
|
|
})
|
|
schema.add_column("users", "avatar_id", "REFERENCES avatars(id) ON DELETE SET NULL")
|
|
end,
|
|
|
|
[4] = function ()
|
|
schema.add_column("topics", "description", types.text{default=""})
|
|
|
|
-- topic locked = no new threads can be created in the topic, but posts can be made in threads
|
|
-- thread locked = no new posts can be created in the thread, existing posts can not be edited
|
|
-- admins bypass both restrictions
|
|
schema.add_column("topics", "is_locked", "BOOLEAN DEFAULT FALSE")
|
|
schema.add_column("threads", "is_locked", "BOOLEAN DEFAULT FALSE")
|
|
-- will appear on top of non-stickied threads in topic view
|
|
schema.add_column("threads", "is_stickied", "BOOLEAN DEFAULT FALSE")
|
|
end,
|
|
|
|
[5] = function ()
|
|
db.query("CREATE INDEX idx_posts_thread ON posts(thread_id, created_at, id)")
|
|
db.query("CREATE INDEX idx_users_avatar ON users(avatar_id)")
|
|
db.query("CREATE INDEX idx_topics_slug ON topics(slug)")
|
|
db.query("CREATE INDEX idx_threads_slug ON threads(slug)")
|
|
end,
|
|
|
|
[6] = function ()
|
|
schema.drop_column("post_history", "user_id")
|
|
end,
|
|
|
|
[7] = function ()
|
|
db.query('DROP INDEX "idx_users_avatar"')
|
|
schema.drop_column("users", "avatar_id")
|
|
schema.add_column("users", "avatar_id", "REFERENCES avatars(id) DEFAULT 1")
|
|
end,
|
|
|
|
[8] = function ()
|
|
schema.add_column("topics", "sort_order", types.integer{default = 0})
|
|
db.query("UPDATE topics SET sort_order = (SELECT COUNT(*) FROM topics t2 WHERE t2.ROWID <= topics.ROWID)")
|
|
end,
|
|
|
|
[9] = function ()
|
|
schema.add_column("post_history", "original_markup", types.text{null = false})
|
|
schema.add_column("post_history", "markup_language", types.text{default = "babycode"})
|
|
end,
|
|
|
|
[10] = function ()
|
|
schema.add_column("users", "signature_original_markup", types.text{default = ""})
|
|
schema.add_column("users", "signature_rendered", types.text{default = ""})
|
|
end,
|
|
|
|
[11] = function ()
|
|
local render = require("lib.babycode").to_html
|
|
local html_escape = require("lapis.html").escape
|
|
local phs = db.query("SELECT * from post_history")
|
|
local users = db.query("SELECT * from users")
|
|
db.query("BEGIN")
|
|
|
|
for _, post_history in ipairs(phs) do
|
|
db.query("UPDATE post_history SET content = ? WHERE id = ?", render(post_history.original_markup, html_escape), post_history.id)
|
|
end
|
|
|
|
for _, user in ipairs(users) do
|
|
db.query("UPDATE users SET signature_rendered = ? WHERE id = ?", render(user.signature_original_markup, html_escape), user.id)
|
|
end
|
|
|
|
db.query("COMMIT")
|
|
end,
|
|
}
|