summaryrefslogtreecommitdiffstats
path: root/database/scripts/add-context-table.sql
blob: 507a5806ef9ad25160138a44b8a44ecb7bfc6e5e (plain)
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
--
-- Upgrade script from previous context-less schema
--

-- Add new tables
CREATE TABLE context
(
    id BIGSERIAL PRIMARY KEY,

    -- Environment:
    hostId BIGINT NOT NULL REFERENCES host ON DELETE CASCADE,
    platformId BIGINT NOT NULL REFERENCES platform ON DELETE CASCADE,

    -- Revision:
    branchId BIGINT NOT NULL REFERENCES branch ON DELETE CASCADE,
    sha1Id BIGINT NOT NULL REFERENCES sha1 ON DELETE CASCADE,

    -- Timestamp: (approximated with earliest known startTime)
    timestamp TIMESTAMP NOT NULL,

    UNIQUE(hostId, platformId, branchId, sha1Id)
) WITH (OIDS=FALSE);
ALTER TABLE context OWNER TO postgres;

-- Import existing data
INSERT INTO context (hostId, platformId, branchId, sha1Id, timestamp)
    SELECT hostId, platformId, branchId, sha1Id, min(startTime) AS timestamp
        FROM
            (SELECT DISTINCT hostId, platformId, branchId, sha1Id, uploadId FROM result) AS dummy
            JOIN upload ON uploadId = upload.id
        GROUP BY hostId, platformId, branchId, sha1Id;

-- Add new indexes
CREATE INDEX context_host_idx ON result (hostId);
CREATE INDEX context_platform_idx ON result (platformId);
CREATE INDEX context_branch_idx ON result (branchId);
CREATE INDEX context_sha1_idx ON result (sha1Id);

-- Update result table schema -- step 1 of 2
ALTER TABLE result ADD COLUMN contextId BIGINT REFERENCES context ON DELETE CASCADE;

UPDATE result
    SET contextId = context.id
    FROM context
    WHERE context.hostId = hostId
        AND context.platformId = platformId
        AND context.branchId = branchId
        AND context.sha1Id = sha1Id;

-- Drop obsolete indexes
DROP INDEX result_host_idx;
DROP INDEX result_platform_idx;
DROP INDEX result_branch_idx;
DROP INDEX result_sha1_idx;

-- Update result table schema -- step 2 of 2
ALTER TABLE result
    ALTER COLUMN contextId SET NOT NULL,
    DROP COLUMN hostId,
    DROP COLUMN platformId,
    DROP COLUMN branchId,
    DROP COLUMN sha1Id;

-- Add new indexes
CREATE INDEX result_context_idx ON result (contextId);