Build fix. Strip out "use strict" everywhere so that the perf dashboard works on...
[WebKit-https.git] / Websites / perf.webkit.org / init-database.sql
1 DROP TABLE IF EXISTS run_iterations CASCADE;
2 DROP TABLE IF EXISTS test_runs CASCADE;
3 DROP TABLE IF EXISTS test_configurations CASCADE;
4 DROP TYPE IF EXISTS test_configuration_type CASCADE;
5 DROP TABLE IF EXISTS aggregators CASCADE;
6 DROP TABLE IF EXISTS builds CASCADE;
7 DROP TABLE IF EXISTS committers CASCADE;
8 DROP TABLE IF EXISTS commits CASCADE;
9 DROP TABLE IF EXISTS build_commits CASCADE;
10 DROP TABLE IF EXISTS build_slaves CASCADE;
11 DROP TABLE IF EXISTS builders CASCADE;
12 DROP TABLE IF EXISTS repositories CASCADE;
13 DROP TABLE IF EXISTS platforms CASCADE;
14 DROP TABLE IF EXISTS test_metrics CASCADE;
15 DROP TABLE IF EXISTS tests CASCADE;
16 DROP TABLE IF EXISTS reports CASCADE;
17 DROP TABLE IF EXISTS tracker_repositories CASCADE;
18 DROP TABLE IF EXISTS bug_trackers CASCADE;
19 DROP TABLE IF EXISTS task_commits CASCADE;
20 DROP TABLE IF EXISTS analysis_tasks CASCADE;
21 DROP TABLE IF EXISTS analysis_strategies CASCADE;
22 DROP TYPE IF EXISTS analysis_task_result_type CASCADE;
23 DROP TABLE IF EXISTS build_triggerables CASCADE;
24 DROP TABLE IF EXISTS triggerable_configurations CASCADE;
25 DROP TABLE IF EXISTS triggerable_repositories CASCADE;
26 DROP TABLE IF EXISTS bugs CASCADE;
27 DROP TABLE IF EXISTS analysis_test_groups CASCADE;
28 DROP TABLE IF EXISTS root_sets CASCADE;
29 DROP TABLE IF EXISTS roots CASCADE;
30 DROP TABLE IF EXISTS build_requests CASCADE;
31 DROP TYPE IF EXISTS build_request_status_type CASCADE;
32
33
34 CREATE TABLE platforms (
35     platform_id serial PRIMARY KEY,
36     platform_name varchar(64) NOT NULL,
37     platform_hidden boolean NOT NULL DEFAULT FALSE);
38
39 CREATE TABLE repositories (
40     repository_id serial PRIMARY KEY,
41     repository_parent integer REFERENCES repositories ON DELETE CASCADE,
42     repository_name varchar(64) NOT NULL,
43     repository_url varchar(1024),
44     repository_blame_url varchar(1024),
45     CONSTRAINT repository_name_must_be_unique UNIQUE(repository_parent, repository_name));
46
47 CREATE TABLE bug_trackers (
48     tracker_id serial PRIMARY KEY,
49     tracker_name varchar(64) NOT NULL,
50     tracker_bug_url varchar(1024),
51     tracker_new_bug_url varchar(1024));
52
53 CREATE TABLE tracker_repositories (
54     tracrepo_tracker integer NOT NULL REFERENCES bug_trackers ON DELETE CASCADE,
55     tracrepo_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE);
56
57 CREATE TABLE builders (
58     builder_id serial PRIMARY KEY,
59     builder_name varchar(256) NOT NULL UNIQUE,
60     builder_password_hash character(64),
61     builder_build_url varchar(1024));
62
63 CREATE TABLE build_slaves (
64     slave_id serial PRIMARY KEY,
65     slave_name varchar(64) NOT NULL UNIQUE,
66     slave_password_hash character(64));
67
68 CREATE TABLE builds (
69     build_id serial PRIMARY KEY,
70     build_builder integer REFERENCES builders ON DELETE CASCADE,
71     build_slave integer REFERENCES build_slaves ON DELETE CASCADE,
72     build_number integer NOT NULL,
73     build_time timestamp NOT NULL,
74     build_latest_revision timestamp,
75     CONSTRAINT builder_build_time_tuple_must_be_unique UNIQUE(build_builder, build_number, build_time));
76 CREATE INDEX build_builder_index ON builds(build_builder);
77
78 CREATE TABLE committers (
79     committer_id serial PRIMARY KEY,
80     committer_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE,
81     committer_account varchar(320) NOT NULL,
82     committer_name varchar(128),
83     CONSTRAINT committer_in_repository_must_be_unique UNIQUE(committer_repository, committer_account));
84 CREATE INDEX committer_account_index ON committers(committer_account);
85 CREATE INDEX committer_name_index ON committers(committer_name);
86
87 CREATE TABLE commits (
88     commit_id serial PRIMARY KEY,
89     commit_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE,
90     commit_revision varchar(64) NOT NULL,
91     commit_parent integer REFERENCES commits ON DELETE CASCADE,
92     commit_time timestamp,
93     commit_order integer,
94     commit_committer integer REFERENCES committers ON DELETE CASCADE,
95     commit_message text,
96     commit_reported boolean NOT NULL DEFAULT FALSE,
97     CONSTRAINT commit_in_repository_must_be_unique UNIQUE(commit_repository, commit_revision));
98 CREATE INDEX commit_time_index ON commits(commit_time);
99 CREATE INDEX commit_order_index ON commits(commit_order);
100
101 CREATE TABLE build_commits (
102     commit_build integer NOT NULL REFERENCES builds ON DELETE CASCADE,
103     build_commit integer NOT NULL REFERENCES commits ON DELETE CASCADE,
104     PRIMARY KEY (commit_build, build_commit));
105
106 CREATE TABLE aggregators (
107     aggregator_id serial PRIMARY KEY,
108     aggregator_name varchar(64),
109     aggregator_definition text);
110
111 CREATE TABLE tests (
112     test_id serial PRIMARY KEY,
113     test_name varchar(255) NOT NULL,
114     test_parent integer REFERENCES tests ON DELETE CASCADE,
115     test_url varchar(1024) DEFAULT NULL,
116     CONSTRAINT parent_test_must_be_unique UNIQUE(test_parent, test_name));
117
118 CREATE TABLE test_metrics (
119     metric_id serial PRIMARY KEY,
120     metric_test integer NOT NULL REFERENCES tests ON DELETE CASCADE,
121     metric_name varchar(64) NOT NULL,
122     metric_aggregator integer REFERENCES aggregators ON DELETE CASCADE);
123
124 CREATE TYPE test_configuration_type as ENUM ('current', 'baseline', 'target');
125 CREATE TABLE test_configurations (
126     config_id serial PRIMARY KEY,
127     config_metric integer NOT NULL REFERENCES test_metrics ON DELETE CASCADE,
128     config_platform integer NOT NULL REFERENCES platforms ON DELETE CASCADE,
129     config_type test_configuration_type NOT NULL,
130     config_is_in_dashboard boolean NOT NULL DEFAULT FALSE,
131     config_runs_last_modified timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
132     CONSTRAINT configuration_must_be_unique UNIQUE(config_metric, config_platform, config_type));
133 CREATE INDEX config_platform_index ON test_configurations(config_platform);
134
135 CREATE TABLE test_runs (
136     run_id serial PRIMARY KEY,
137     run_config integer NOT NULL REFERENCES test_configurations ON DELETE CASCADE,
138     run_build integer NOT NULL REFERENCES builds ON DELETE CASCADE,
139     run_iteration_count_cache smallint,
140     run_mean_cache double precision,
141     run_sum_cache double precision,
142     run_square_sum_cache double precision,
143     run_marked_outlier boolean NOT NULL DEFAULT FALSE,
144     CONSTRAINT test_config_build_must_be_unique UNIQUE(run_config, run_build));
145 CREATE INDEX run_config_index ON test_runs(run_config);
146 CREATE INDEX run_build_index ON test_runs(run_build);
147
148 CREATE TABLE run_iterations (
149     iteration_run integer NOT NULL REFERENCES test_runs ON DELETE CASCADE,
150     iteration_order smallint NOT NULL CHECK(iteration_order >= 0),
151     iteration_group smallint CHECK(iteration_group >= 0),
152     iteration_value double precision,
153     iteration_relative_time float,
154     PRIMARY KEY (iteration_run, iteration_order));
155
156 CREATE OR REPLACE FUNCTION update_config_last_modified() RETURNS TRIGGER AS $update_config_last_modified$
157     BEGIN
158         IF TG_OP != 'DELETE' THEN
159             UPDATE test_configurations SET config_runs_last_modified = (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') WHERE config_id = NEW.run_config;
160         ELSE
161             UPDATE test_configurations SET config_runs_last_modified = (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') WHERE config_id = OLD.run_config;
162         END IF;
163         RETURN NULL;
164     END;
165 $update_config_last_modified$ LANGUAGE plpgsql;
166
167 CREATE TRIGGER update_config_last_modified AFTER INSERT OR UPDATE OR DELETE ON test_runs
168     FOR EACH ROW EXECUTE PROCEDURE update_config_last_modified();
169
170 CREATE TABLE reports (
171     report_id serial PRIMARY KEY,
172     report_builder integer NOT NULL REFERENCES builders ON DELETE RESTRICT,
173     report_slave integer REFERENCES build_slaves ON DELETE RESTRICT,
174     report_build_number integer,
175     report_build integer REFERENCES builds,
176     report_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
177     report_committed_at timestamp,
178     report_content text,
179     report_failure varchar(64),
180     report_failure_details text);
181
182 CREATE TABLE analysis_strategies (
183     strategy_id serial PRIMARY KEY,
184     strategy_name varchar(64) NOT NULL);
185
186 CREATE TYPE analysis_task_result_type as ENUM ('progression', 'regression', 'unchanged', 'inconclusive');
187 CREATE TABLE analysis_tasks (
188     task_id serial PRIMARY KEY,
189     task_name varchar(256) NOT NULL,
190     task_author varchar(256),
191     task_segmentation integer REFERENCES analysis_strategies,
192     task_test_range integer REFERENCES analysis_strategies,
193     task_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
194     task_platform integer REFERENCES platforms NOT NULL,
195     task_metric integer REFERENCES test_metrics NOT NULL,
196     task_start_run integer REFERENCES test_runs,
197     task_start_run_time timestamp,
198     task_end_run integer REFERENCES test_runs,
199     task_end_run_time timestamp,
200     task_result analysis_task_result_type,
201     task_needed boolean,
202     CONSTRAINT analysis_task_should_be_unique_for_range UNIQUE(task_start_run, task_end_run),
203     CONSTRAINT analysis_task_should_not_be_associated_with_single_run
204         CHECK ((task_start_run IS NULL AND task_end_run IS NULL) OR (task_start_run IS NOT NULL AND task_end_run IS NOT NULL)));
205
206 CREATE TABLE task_commits (
207     taskcommit_task integer NOT NULL REFERENCES analysis_tasks ON DELETE CASCADE,
208     taskcommit_commit integer NOT NULL REFERENCES commits ON DELETE CASCADE,
209     taskcommit_is_fix boolean NOT NULL,
210     CONSTRAINT task_commit_must_be_unique UNIQUE(taskcommit_task, taskcommit_commit));
211
212 CREATE TABLE bugs (
213     bug_id serial PRIMARY KEY,
214     bug_task integer REFERENCES analysis_tasks NOT NULL,
215     bug_tracker integer REFERENCES bug_trackers NOT NULL,
216     bug_number integer NOT NULL);
217
218 CREATE TABLE build_triggerables (
219     triggerable_id serial PRIMARY KEY,
220     triggerable_name varchar(64) NOT NULL UNIQUE);
221
222 CREATE TABLE triggerable_repositories (
223     trigrepo_triggerable integer REFERENCES build_triggerables NOT NULL,
224     trigrepo_repository integer REFERENCES repositories NOT NULL,
225     trigrepo_sub_roots boolean NOT NULL DEFAULT FALSE);
226
227 CREATE TABLE triggerable_configurations (
228     trigconfig_test integer REFERENCES tests NOT NULL,
229     trigconfig_platform integer REFERENCES platforms NOT NULL,
230     trigconfig_triggerable integer REFERENCES build_triggerables NOT NULL,
231     CONSTRAINT triggerable_must_be_unique_for_test_and_platform UNIQUE(trigconfig_test, trigconfig_platform));
232
233 CREATE TABLE analysis_test_groups (
234     testgroup_id serial PRIMARY KEY,
235     testgroup_task integer REFERENCES analysis_tasks NOT NULL,
236     testgroup_name varchar(256),
237     testgroup_author varchar(256),
238     testgroup_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
239     testgroup_hidden boolean NOT NULL DEFAULT FALSE,
240     CONSTRAINT testgroup_name_must_be_unique_for_each_task UNIQUE(testgroup_task, testgroup_name));
241 CREATE INDEX testgroup_task_index ON analysis_test_groups(testgroup_task);
242
243 CREATE TABLE root_sets (
244     rootset_id serial PRIMARY KEY);
245
246 CREATE TABLE roots (
247     root_set integer REFERENCES root_sets NOT NULL,
248     root_commit integer REFERENCES commits NOT NULL);
249
250 CREATE TYPE build_request_status_type as ENUM ('pending', 'scheduled', 'running', 'failed', 'completed', 'canceled');
251 CREATE TABLE build_requests (
252     request_id serial PRIMARY KEY,
253     request_triggerable integer REFERENCES build_triggerables NOT NULL,
254     request_platform integer REFERENCES platforms NOT NULL,
255     request_test integer REFERENCES tests NOT NULL,
256     request_group integer REFERENCES analysis_test_groups NOT NULL,
257     request_order integer NOT NULL,
258     request_root_set integer REFERENCES root_sets NOT NULL,
259     request_status build_request_status_type NOT NULL DEFAULT 'pending',
260     request_url varchar(1024),
261     request_build integer REFERENCES builds,
262     request_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
263     CONSTRAINT build_request_order_must_be_unique_in_group UNIQUE(request_group, request_order));
264 CREATE INDEX build_request_triggerable ON build_requests(request_triggerable);    
265 CREATE INDEX build_request_build ON build_requests(request_build);