-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path08_materialize.sql
66 lines (60 loc) · 1.52 KB
/
08_materialize.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
-- liquibase formatted sql
-- changeset dabico:9
CREATE MATERIALIZED VIEW table_row_count AS
SELECT
'user' AS "table",
COUNT(id) AS "count"
FROM "user"
UNION
SELECT
'task' AS "table",
COUNT(id) AS "count"
FROM task
UNION
SELECT
'git_repo' AS "table",
COUNT(id) AS "count"
FROM git_repo
UNION
SELECT
'file' AS "table",
COUNT(id) AS "count"
FROM file
UNION
SELECT
'function' AS "table",
COUNT(id) AS "count"
FROM function;
CREATE MATERIALIZED VIEW git_repo_count_by_language AS
SELECT
language.id AS lang_id,
COUNT(git_repo.id) AS count
FROM language
LEFT JOIN git_repo_language
ON git_repo_language.lang_id = language.id
LEFT JOIN git_repo
ON git_repo.id = git_repo_language.repo_id
GROUP BY language.id;
CREATE MATERIALIZED VIEW file_count_by_language AS
SELECT
language.id AS lang_id,
COUNT(file.id) AS count
FROM language
LEFT JOIN file
ON file.lang_id = language.id
GROUP BY language.id;
CREATE MATERIALIZED VIEW function_count_by_language AS
SELECT
language.id AS lang_id,
COUNT(function.id) AS count
FROM language
LEFT JOIN function
ON function.lang_id = language.id
GROUP BY language.id;
CREATE MATERIALIZED VIEW total_code_size_in_bytes AS
SELECT SUM(characters) AS size FROM file;
CREATE UNIQUE INDEX ON table_row_count("table");
CREATE UNIQUE INDEX ON git_repo_count_by_language(lang_id);
CREATE UNIQUE INDEX ON file_count_by_language(lang_id);
CREATE UNIQUE INDEX ON function_count_by_language(lang_id);
CREATE UNIQUE INDEX ON total_code_size_in_bytes(size);