Perf dashboard should have the ability to post A/B testing builds
[WebKit-https.git] / Websites / perf.webkit.org / init-database.sql
1 DROP TABLE run_iterations CASCADE;
2 DROP TABLE test_runs CASCADE;
3 DROP TABLE test_configurations CASCADE;
4 DROP TYPE test_configuration_type CASCADE;
5 DROP TABLE aggregators CASCADE;
6 DROP TABLE builds CASCADE;
7 DROP TABLE committers CASCADE;
8 DROP TABLE commits CASCADE;
9 DROP TABLE build_commits CASCADE;
10 DROP TABLE build_slaves CASCADE;
11 DROP TABLE builders CASCADE;
12 DROP TABLE repositories CASCADE;
13 DROP TABLE platforms CASCADE;
14 DROP TABLE test_metrics CASCADE;
15 DROP TABLE tests CASCADE;
16 DROP TABLE reports CASCADE;
17 DROP TABLE tracker_repositories CASCADE;
18 DROP TABLE bug_trackers CASCADE;
19 DROP TABLE analysis_tasks CASCADE;
20 DROP TABLE build_triggerables CASCADE;
21 DROP TABLE triggerable_configurations CASCADE;
22 DROP TABLE triggerable_repositories CASCADE;
23 DROP TABLE bugs CASCADE;
24 DROP TABLE analysis_test_groups CASCADE;
25 DROP TABLE root_sets CASCADE;
26 DROP TABLE roots CASCADE;
27 DROP TABLE build_requests CASCADE;
28 DROP TYPE build_request_status_type CASCADE;
29
30
31 CREATE TABLE platforms (
32     platform_id serial PRIMARY KEY,
33     platform_name varchar(64) NOT NULL,
34     platform_hidden boolean NOT NULL DEFAULT FALSE);
35
36 CREATE TABLE repositories (
37     repository_id serial PRIMARY KEY,
38     repository_name varchar(64) NOT NULL,
39     repository_url varchar(1024),
40     repository_blame_url varchar(1024));
41
42 CREATE TABLE bug_trackers (
43     tracker_id serial PRIMARY KEY,
44     tracker_name varchar(64) NOT NULL,
45     tracker_bug_url varchar(1024),
46     tracker_new_bug_url varchar(1024));
47
48 CREATE TABLE tracker_repositories (
49     tracrepo_tracker integer NOT NULL REFERENCES bug_trackers ON DELETE CASCADE,
50     tracrepo_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE);
51
52 CREATE TABLE builders (
53     builder_id serial PRIMARY KEY,
54     builder_name varchar(64) NOT NULL UNIQUE,
55     builder_password_hash character(64),
56     builder_build_url varchar(1024));
57
58 CREATE TABLE build_slaves (
59     slave_id serial PRIMARY KEY,
60     slave_name varchar(64) NOT NULL UNIQUE,
61     slave_password_hash character(64));
62
63 CREATE TABLE builds (
64     build_id serial PRIMARY KEY,
65     build_builder integer REFERENCES builders ON DELETE CASCADE,
66     build_slave integer REFERENCES build_slaves ON DELETE CASCADE,
67     build_number integer NOT NULL,
68     build_time timestamp NOT NULL,
69     build_latest_revision timestamp,
70     CONSTRAINT builder_build_time_tuple_must_be_unique UNIQUE(build_builder, build_number, build_time));
71 CREATE INDEX build_builder_index ON builds(build_builder);
72
73 CREATE TABLE committers (
74     committer_id serial PRIMARY KEY,
75     committer_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE,
76     committer_account varchar(320) NOT NULL,
77     committer_name varchar(128),
78     CONSTRAINT committer_in_repository_must_be_unique UNIQUE(committer_repository, committer_account));
79 CREATE INDEX committer_account_index ON committers(committer_account);
80 CREATE INDEX committer_name_index ON committers(committer_name);
81
82 CREATE TABLE commits (
83     commit_id serial PRIMARY KEY,
84     commit_repository integer NOT NULL REFERENCES repositories ON DELETE CASCADE,
85     commit_revision varchar(64) NOT NULL,
86     commit_parent integer REFERENCES commits ON DELETE CASCADE,
87     commit_time timestamp,
88     commit_committer integer REFERENCES committers ON DELETE CASCADE,
89     commit_message text,
90     commit_reported boolean NOT NULL DEFAULT FALSE,
91     CONSTRAINT commit_in_repository_must_be_unique UNIQUE(commit_repository, commit_revision));
92 CREATE INDEX commit_time_index ON commits(commit_time);
93
94 CREATE TABLE build_commits (
95     commit_build integer NOT NULL REFERENCES builds ON DELETE CASCADE,
96     build_commit integer NOT NULL REFERENCES commits ON DELETE CASCADE,
97     PRIMARY KEY (commit_build, build_commit));
98
99 CREATE TABLE aggregators (
100     aggregator_id serial PRIMARY KEY,
101     aggregator_name varchar(64),
102     aggregator_definition text);
103
104 CREATE TABLE tests (
105     test_id serial PRIMARY KEY,
106     test_name varchar(255) NOT NULL,
107     test_parent integer REFERENCES tests ON DELETE CASCADE,
108     test_url varchar(1024) DEFAULT NULL,
109     CONSTRAINT parent_test_must_be_unique UNIQUE(test_parent, test_name));
110
111 CREATE TABLE test_metrics (
112     metric_id serial PRIMARY KEY,
113     metric_test integer NOT NULL REFERENCES tests ON DELETE CASCADE,
114     metric_name varchar(64) NOT NULL,
115     metric_aggregator integer REFERENCES aggregators ON DELETE CASCADE);
116
117 CREATE TYPE test_configuration_type as ENUM ('current', 'baseline', 'target');
118 CREATE TABLE test_configurations (
119     config_id serial PRIMARY KEY,
120     config_metric integer NOT NULL REFERENCES test_metrics ON DELETE CASCADE,
121     config_platform integer NOT NULL REFERENCES platforms ON DELETE CASCADE,
122     config_type test_configuration_type NOT NULL,
123     config_is_in_dashboard boolean NOT NULL DEFAULT FALSE,
124     CONSTRAINT configuration_must_be_unique UNIQUE(config_metric, config_platform, config_type));
125 CREATE INDEX config_platform_index ON test_configurations(config_platform);
126
127 CREATE TABLE test_runs (
128     run_id serial PRIMARY KEY,
129     run_config integer NOT NULL REFERENCES test_configurations ON DELETE CASCADE,
130     run_build integer NOT NULL REFERENCES builds ON DELETE CASCADE,
131     run_iteration_count_cache smallint,
132     run_mean_cache double precision,
133     run_sum_cache double precision,
134     run_square_sum_cache double precision,
135     CONSTRAINT test_config_build_must_be_unique UNIQUE(run_config, run_build));
136 CREATE INDEX run_config_index ON test_runs(run_config);
137 CREATE INDEX run_build_index ON test_runs(run_build);
138
139 CREATE TABLE run_iterations (
140     iteration_run integer NOT NULL REFERENCES test_runs ON DELETE CASCADE,
141     iteration_order smallint NOT NULL CHECK(iteration_order >= 0),
142     iteration_group smallint CHECK(iteration_group >= 0),
143     iteration_value double precision,
144     iteration_relative_time float,
145     PRIMARY KEY (iteration_run, iteration_order));
146
147 CREATE TABLE reports (
148     report_id serial PRIMARY KEY,
149     report_builder integer NOT NULL REFERENCES builders ON DELETE RESTRICT,
150     report_slave integer REFERENCES build_slaves ON DELETE RESTRICT,
151     report_build_number integer,
152     report_build integer REFERENCES builds,
153     report_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
154     report_committed_at timestamp,
155     report_content text,
156     report_failure varchar(64),
157     report_failure_details text);
158
159 CREATE TABLE analysis_tasks (
160     task_id serial PRIMARY KEY,
161     task_name varchar(256) NOT NULL,
162     task_author varchar(256),
163     task_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
164     task_platform integer REFERENCES platforms NOT NULL,
165     task_metric integer REFERENCES test_metrics NOT NULL,
166     task_start_run integer REFERENCES test_runs,
167     task_end_run integer REFERENCES test_runs,
168     CONSTRAINT analysis_task_should_be_unique_for_range UNIQUE(task_start_run, task_end_run),
169     CONSTRAINT analysis_task_should_not_be_associated_with_single_run
170         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)));
171
172 CREATE TABLE bugs (
173     bug_id serial PRIMARY KEY,
174     bug_task integer REFERENCES analysis_tasks NOT NULL,
175     bug_tracker integer REFERENCES bug_trackers NOT NULL,
176     bug_number integer NOT NULL,
177     CONSTRAINT bug_task_and_tracker_must_be_unique UNIQUE(bug_task, bug_tracker));
178
179 CREATE TABLE build_triggerables (
180     triggerable_id serial PRIMARY KEY,
181     triggerable_name varchar(64) NOT NULL UNIQUE);
182
183 CREATE TABLE triggerable_repositories (
184     trigrepo_triggerable integer REFERENCES build_triggerables NOT NULL,
185     trigrepo_repository integer REFERENCES repositories NOT NULL,
186     trigrepo_sub_roots boolean NOT NULL DEFAULT FALSE);
187
188 CREATE TABLE triggerable_configurations (
189     trigconfig_test integer REFERENCES tests NOT NULL,
190     trigconfig_platform integer REFERENCES platforms NOT NULL,
191     trigconfig_triggerable integer REFERENCES build_triggerables NOT NULL,
192     CONSTRAINT triggerable_must_be_unique_for_test_and_platform UNIQUE(trigconfig_test, trigconfig_platform));
193
194 CREATE TABLE analysis_test_groups (
195     testgroup_id serial PRIMARY KEY,
196     testgroup_task integer REFERENCES analysis_tasks NOT NULL,
197     testgroup_name varchar(256),
198     testgroup_author varchar(256),
199     testgroup_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
200     CONSTRAINT testgroup_name_must_be_unique_for_each_task UNIQUE(testgroup_task, testgroup_name));
201 CREATE INDEX testgroup_task_index ON analysis_test_groups(testgroup_task);
202
203 CREATE TABLE root_sets (
204     rootset_id serial PRIMARY KEY);
205
206 CREATE TABLE roots (
207     root_set integer REFERENCES root_sets NOT NULL,
208     root_commit integer REFERENCES commits NOT NULL);
209
210 CREATE TYPE build_request_status_type as ENUM ('pending', 'scheduled', 'running', 'failed', 'completed');
211 CREATE TABLE build_requests (
212     request_id serial PRIMARY KEY,
213     request_triggerable integer REFERENCES build_triggerables NOT NULL,
214     request_platform integer REFERENCES platforms NOT NULL,
215     request_test integer REFERENCES tests NOT NULL,
216     request_group integer REFERENCES analysis_test_groups NOT NULL,
217     request_order integer NOT NULL,
218     request_root_set integer REFERENCES root_sets NOT NULL,
219     request_status build_request_status_type NOT NULL DEFAULT 'pending',
220     request_url varchar(1024),
221     request_build integer REFERENCES builds,
222     request_created_at timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP AT TIME ZONE 'UTC'),
223     CONSTRAINT build_request_order_must_be_unique_in_group UNIQUE(request_group, request_order));
224 CREATE INDEX build_request_triggerable ON build_requests(request_triggerable);    
225 CREATE INDEX build_request_build ON build_requests(request_build);