database schema: add (in)feasibility tables, add detrimental_characters

This commit is contained in:
Maximilian Keßler 2023-07-07 22:30:53 +02:00
parent b893a65a64
commit 11279a1c68
Signed by: max
GPG Key ID: BCC5A619923C0BA5
2 changed files with 34 additions and 17 deletions

View File

@ -13,18 +13,35 @@ CREATE INDEX seeds_variant_idx ON seeds (variant_id);
DROP TABLE IF EXISTS games CASCADE; DROP TABLE IF EXISTS games CASCADE;
CREATE TABLE games ( CREATE TABLE games (
id INT PRIMARY KEY, id INT PRIMARY KEY,
seed TEXT NOT NULL REFERENCES seeds, seed TEXT NOT NULL REFERENCES seeds,
num_players SMALLINT NOT NULL, num_players SMALLINT NOT NULL,
score SMALLINT NOT NULL, score SMALLINT NOT NULL,
variant_id SMALLINT NOT NULL, variant_id SMALLINT NOT NULL,
deck_plays BOOLEAN, deck_plays BOOLEAN,
one_extra_card BOOLEAN, one_extra_card BOOLEAN,
one_less_card BOOLEAN, one_less_card BOOLEAN,
all_or_nothing BOOLEAN, all_or_nothing BOOLEAN,
num_turns SMALLINT, detrimental_characters BOOLEAN,
actions TEXT num_turns SMALLINT,
actions TEXT
); );
CREATE INDEX games_seed_score_idx ON games (seed, score); CREATE INDEX games_seed_score_idx ON games (seed, score);
CREATE INDEX games_var_seed_idx ON games (variant_id, seed); CREATE INDEX games_var_seed_idx ON games (variant_id, seed);
CREATE INDEX games_player_idx ON games (num_players); CREATE INDEX games_player_idx ON games (num_players);
DROP TABLE IF EXISTS infeasibility_certs;
CREATE TABLE infeasibility_certs (
seed TEXT NOT NULL REFERENCES seeds ON DELETE CASCADE,
score_upper_bound SMALLINT NOT NULL,
reason SMALLINT NOT NULL
);
DROP TABLE IF EXISTS feasibility_certs;
CREATE TABLE feasibility_certs (
seed TEXT NOT NULL REFERENCES seeds ON DELETE CASCADE,
game_id INT REFERENCES games ON DELETE CASCADE,
actions TEXT,
CHECK (num_nonnulls(game_id, actions) = 1)
);

View File

@ -155,18 +155,18 @@ def detailed_export_game(
database.cur.execute( database.cur.execute(
"INSERT INTO games (" "INSERT INTO games ("
"id, num_players, score, seed, variant_id, deck_plays, one_extra_card, one_less_card," "id, num_players, score, seed, variant_id, deck_plays, one_extra_card, one_less_card,"
"all_or_nothing, actions" "all_or_nothing, detrimental_characters, actions"
")" ")"
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
"ON CONFLICT (id) DO UPDATE SET (" "ON CONFLICT (id) DO UPDATE SET ("
"deck_plays, one_extra_card, one_less_card, all_or_nothing, actions" "deck_plays, one_extra_card, one_less_card, all_or_nothing, actions, detrimental_characters"
") = (" ") = ("
"EXCLUDED.deck_plays, EXCLUDED.one_extra_card, EXCLUDED.one_less_card, EXCLUDED.all_or_nothing," "EXCLUDED.deck_plays, EXCLUDED.one_extra_card, EXCLUDED.one_less_card, EXCLUDED.all_or_nothing,"
"EXCLUDED.actions" "EXCLUDED.actions, EXCLUDED.detrimental_characters"
")", ")",
( (
game_id, num_players, score, seed, var_id, deck_plays, one_extra_card, one_less_card, game_id, num_players, score, seed, var_id, deck_plays, one_extra_card, one_less_card,
all_or_nothing, compressed_actions all_or_nothing, detrimental_characters, compressed_actions
) )
) )
logger.debug("Imported game {}".format(game_id)) logger.debug("Imported game {}".format(game_id))