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, }