Spaces:
Paused
Paused
| -- Creates tables for Trivia. | |
| BEGIN TRANSACTION; | |
| -- Question/Answer storage | |
| -- questions to be used in officials | |
| CREATE TABLE trivia_questions ( | |
| question_id INTEGER NOT NULL PRIMARY KEY, | |
| question TEXT NOT NULL, | |
| category TEXT NOT NULL, | |
| -- unix timestamp in milliseconds | |
| added_at INTEGER NOT NULL, | |
| userid TEXT NOT NULL, | |
| is_submission TINYINT(1) NOT NULL, | |
| UNIQUE(question, category) | |
| ); | |
| CREATE TABLE trivia_answers ( | |
| question_id INTEGER NOT NULL, | |
| answer TEXT NOT NULL, | |
| PRIMARY KEY (question_id, answer), | |
| FOREIGN KEY (question_id) REFERENCES trivia_questions(question_id) ON DELETE CASCADE | |
| ); | |
| CREATE INDEX questions_by_category ON trivia_questions(category, is_submission); | |
| CREATE INDEX questions_by_category_with_time ON trivia_questions(category, added_at, is_submission); | |
| CREATE INDEX answers_by_question ON trivia_answers(question_id); | |
| -- leaderboard for Trivia games | |
| -- the existing Trivia code isn't well documented: | |
| -- triviaData.altLeaderboard is the all-time leaderboard | |
| -- triviaData.leaderboard is the non-all-time leaderboard (I think????) | |
| -- this might be wrong — see #bot-and-script-and-website | |
| -- TriviaScores = [score, total_points, total_correct_answers] | |
| CREATE TABLE trivia_leaderboard ( | |
| userid TEXT NOT NULL, | |
| score INTEGER NOT NULL, | |
| total_points INTEGER NOT NULL, | |
| total_correct_answers INTEGER NOT NULL, | |
| -- indicates if this row is all time | |
| is_all_time TINYINT(1) NOT NULL, | |
| PRIMARY KEY (userid, is_all_time) | |
| ); | |
| CREATE INDEX leaderboard_index ON trivia_leaderboard(userid, is_all_time); | |
| -- Trivia game history | |
| CREATE TABLE trivia_game_history ( | |
| game_id INTEGER NOT NULL PRIMARY KEY, | |
| mode TEXT NOT NULL, | |
| -- either a length name ('long' etc) or a score cap | |
| length TEXT NOT NULL, | |
| category TEXT NOT NULL, | |
| -- unix timestamp in milliseconds | |
| time INTEGER NOT NULL, | |
| creator TEXT, | |
| gives_points TINYINT(1) | |
| ); | |
| CREATE TABLE trivia_game_scores ( | |
| game_id INTEGER NOT NULL, | |
| userid TEXT NOT NULL, | |
| score INTEGER NOT NULL, | |
| PRIMARY KEY (game_id, userid), | |
| FOREIGN KEY (game_id) REFERENCES trivia_game_history(game_id) ON DELETE CASCADE | |
| ); | |
| CREATE INDEX game_history_index ON trivia_game_history(time); | |
| CREATE INDEX score_history ON trivia_game_scores(game_id); | |
| -- Settings | |
| -- this is really just for moveEventQuestions | |
| CREATE TABLE trivia_settings ( | |
| key TEXT NOT NULL PRIMARY KEY, | |
| value TINYINT(1) NOT NULL | |
| ); | |
| -- update database version | |
| UPDATE db_info SET value = '2' WHERE key = 'version'; | |
| COMMIT; | |