mirror of
https://codeberg.org/icewind/log-normalizer.git
synced 2026-06-03 22:04:05 +02:00
add some generated columns
This commit is contained in:
parent
648d443847
commit
f38b38c6a2
1 changed files with 35 additions and 3 deletions
38
schema.sql
38
schema.sql
|
|
@ -12,6 +12,10 @@ CREATE TYPE event_type AS ENUM ('charge', 'pointcap', 'medic_death', 'round_win'
|
||||||
|
|
||||||
CREATE TYPE medigun AS ENUM ('medigun', 'kritzkrieg', 'quickfix', 'vacinator');
|
CREATE TYPE medigun AS ENUM ('medigun', 'kritzkrieg', 'quickfix', 'vacinator');
|
||||||
|
|
||||||
|
CREATE FUNCTION clean_map_name(map TEXT) RETURNS TEXT AS $$
|
||||||
|
SELECT regexp_replace(map, '(_(a|b|beta|u|r|v|rc|final|comptf|ugc)?[0-9]*[a-z]?$)|([0-9]+[a-z]?$)', '', 'g');
|
||||||
|
$$ LANGUAGE SQL IMMUTABLE;
|
||||||
|
|
||||||
CREATE TABLE logs (
|
CREATE TABLE logs (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
red_score INTEGER NOT NULL,
|
red_score INTEGER NOT NULL,
|
||||||
|
|
@ -19,16 +23,27 @@ CREATE TABLE logs (
|
||||||
length INTEGER NOT NULL,
|
length INTEGER NOT NULL,
|
||||||
game_mode game_mode NOT NULL,
|
game_mode game_mode NOT NULL,
|
||||||
map TEXT NOT NULL,
|
map TEXT NOT NULL,
|
||||||
|
clean_map TEXT GENERATED ALWAYS AS (clean_map_name(map)) STORED,
|
||||||
type map_type NOT NULL,
|
type map_type NOT NULL,
|
||||||
date TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
date TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
||||||
|
winner team GENERATED ALWAYS AS (CASE WHEN red_score > blue_score THEN 'red'::team WHEN blue_score > red_score THEN 'blue'::team ELSE 'other'::team END) STORED
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX logs_map_idx
|
CREATE INDEX logs_map_idx
|
||||||
ON logs USING BTREE (map);
|
ON logs USING BTREE (map);
|
||||||
|
|
||||||
|
CREATE INDEX logs_clean_map_idx
|
||||||
|
ON logs USING BTREE (clean_map);
|
||||||
|
|
||||||
CREATE INDEX logs_mode_idx
|
CREATE INDEX logs_mode_idx
|
||||||
ON logs USING BTREE (game_mode);
|
ON logs USING BTREE (game_mode);
|
||||||
|
|
||||||
|
CREATE INDEX logs_winner_idx
|
||||||
|
ON logs USING BTREE (winner);
|
||||||
|
|
||||||
|
CREATE INDEX logs_date_idx
|
||||||
|
ON logs USING BTREE (date);
|
||||||
|
|
||||||
CREATE TABLE rounds (
|
CREATE TABLE rounds (
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
round INTEGER NOT NULL,
|
round INTEGER NOT NULL,
|
||||||
|
|
@ -155,9 +170,19 @@ CREATE TABLE players (
|
||||||
engineer_kills INTEGER NOT NULL,
|
engineer_kills INTEGER NOT NULL,
|
||||||
medic_kills INTEGER NOT NULL,
|
medic_kills INTEGER NOT NULL,
|
||||||
sniper_kills INTEGER NOT NULL,
|
sniper_kills INTEGER NOT NULL,
|
||||||
spy_kills INTEGER NOT NULL
|
spy_kills INTEGER NOT NULL,
|
||||||
|
is_winner BOOL GENERATED ALWAYS AS (team_is_winner(team, log_id)) STORED
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE FUNCTION team_is_winner(log_id INTEGER, team team) RETURNS BOOL AS $$
|
||||||
|
DECLARE
|
||||||
|
is_winner BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
SELECT team = winner into is_winner FROM logs WHERE id = log_id;
|
||||||
|
RETURN is_winner;
|
||||||
|
END; $$
|
||||||
|
LANGUAGE PLPGSQL IMMUTABLE;
|
||||||
|
|
||||||
CREATE INDEX players_log_id_idx
|
CREATE INDEX players_log_id_idx
|
||||||
ON players USING BTREE (log_id);
|
ON players USING BTREE (log_id);
|
||||||
|
|
||||||
|
|
@ -167,6 +192,12 @@ CREATE UNIQUE INDEX players_log_steam_id_idx
|
||||||
CREATE INDEX players_steam_id_idx
|
CREATE INDEX players_steam_id_idx
|
||||||
ON players USING BTREE (steam_id);
|
ON players USING BTREE (steam_id);
|
||||||
|
|
||||||
|
CREATE INDEX players_team_idx
|
||||||
|
ON players USING BTREE (team);
|
||||||
|
|
||||||
|
CREATE INDEX players_is_winner_idx
|
||||||
|
ON players USING BTREE (is_winner);
|
||||||
|
|
||||||
CREATE TABLE class_stats (
|
CREATE TABLE class_stats (
|
||||||
id BIGSERIAL PRIMARY KEY,
|
id BIGSERIAL PRIMARY KEY,
|
||||||
player_id INTEGER NOT NULL REFERENCES players(id),
|
player_id INTEGER NOT NULL REFERENCES players(id),
|
||||||
|
|
@ -175,7 +206,8 @@ CREATE TABLE class_stats (
|
||||||
kills INTEGER NOT NULL,
|
kills INTEGER NOT NULL,
|
||||||
deaths INTEGER NOT NULL,
|
deaths INTEGER NOT NULL,
|
||||||
assists INTEGER NOT NULL,
|
assists INTEGER NOT NULL,
|
||||||
dmg INTEGER NOT NULL
|
dmg INTEGER NOT NULL,
|
||||||
|
dpm DECIMAL GENERATED ALWAYS AS (dmg::DECIMAL / time) STORED
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX class_stats_player_id_idx
|
CREATE INDEX class_stats_player_id_idx
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue