summaryrefslogtreecommitdiffstats
path: root/src/VBox/ValidationKit/testmanager/db/tmdb-r10-testresultvalues-2.pgsql
blob: 92164815a6766f160bcde5eb9d22a7b738bd46f8 (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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
-- $Id: tmdb-r10-testresultvalues-2.pgsql $
--- @file
-- VBox Test Manager Database - Adds an idTestSet to TestResultValues.
--

--
-- Copyright (C) 2013-2019 Oracle Corporation
--
-- This file is part of VirtualBox Open Source Edition (OSE), as
-- available from http://www.virtualbox.org. This file is free software;
-- you can redistribute it and/or modify it under the terms of the GNU
-- General Public License (GPL) as published by the Free Software
-- Foundation, in version 2 as it comes in the "COPYING" file of the
-- VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-- hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
--
-- The contents of this file may alternatively be used under the terms
-- of the Common Development and Distribution License Version 1.0
-- (CDDL) only, as it comes in the "COPYING.CDDL" file of the
-- VirtualBox OSE distribution, in which case the provisions of the
-- CDDL are applicable instead of those of the GPL.
--
-- You may elect to license modified versions of this file under the
-- terms and conditions of either the GPL or the CDDL or both.
--

--
-- Cleanup after failed runs.
--
DROP TABLE NewTestResultValues;

--
-- Drop all indexes (might already be dropped).
--
DROP INDEX TestResultValuesIdx;
DROP INDEX TestResultValuesNameIdx;

-- Die on error from now on.
\set ON_ERROR_STOP 1
\set AUTOCOMMIT 0

\d+ TestResultValues;

--
-- Create the new version of the table and filling with the content of the old.
--
CREATE TABLE NewTestResultValues (
    --- The ID of this value.
    idTestResultValue   INTEGER     DEFAULT NEXTVAL('TestResultValueIdSeq'), -- PRIMARY KEY
    --- The test result it was reported within.
    idTestResult        INTEGER     NOT NULL, -- REFERENCES TestResults(idTestResult)  NOT NULL,
    --- The test result it was reported within.
    idTestSet           INTEGER     NOT NULL, -- REFERENCES TestSets(idTestSet) NOT NULL,
    --- Creation time stamp.
    tsCreated           TIMESTAMP WITH TIME ZONE  DEFAULT current_timestamp  NOT NULL,
    --- The name.
    idStrName           INTEGER     NOT NULL, -- REFERENCES TestResultStrTab(idStr)  NOT NULL,
    --- The value.
    lValue              bigint      NOT NULL,
    --- The unit.
    -- @todo This is currently not defined properly. Will fix/correlate this
    --       with the other places we use unit (IPRT/testdriver/VMMDev).
    iUnit               smallint    NOT NULL --CHECK (iUnit >= 0 AND iUnit < 1024)
);
COMMIT;
\d+ NewTestResultValues

-- Note! Using left out join here to speed up things (no hashing).
SELECT COUNT(*) FROM TestResultValues a LEFT OUTER JOIN TestResults b ON (a.idTestResult = b.idTestResult);
SELECT COUNT(*) FROM TestResultValues;

INSERT INTO NewTestResultValues (idTestResultValue, idTestResult, idTestSet, tsCreated, idStrName, lValue, iUnit)
    SELECT a.idTestResultValue, a.idTestResult, b.idTestSet, a.tsCreated, a.idStrName, a.lValue, a.iUnit
    FROM   TestResultValues a LEFT OUTER JOIN TestResults b ON (a.idTestResult = b.idTestResult);
COMMIT;
SELECT COUNT(*) FROM NewTestResultValues;

-- Switch the tables.
ALTER TABLE TestResultValues RENAME TO OldTestResultValues;
ALTER TABLE NewTestResultValues RENAME TO TestResultValues;
COMMIT;

-- Index the table.
CREATE INDEX TestResultValuesIdx ON TestResultValues(idTestResult);
CREATE INDEX TestResultValuesNameIdx ON TestResultValues(idStrName, tsCreated);
COMMIT;

-- Drop the old table.
DROP TABLE OldTestResultValues;
COMMIT;

-- Add the constraints constraint.
ALTER TABLE TestResultValues ADD CONSTRAINT TestResultValues_iUnit_Check CHECK (iUnit >= 0 AND iUnit < 1024);
ALTER TABLE TestResultValues ADD PRIMARY KEY (idTestResultValue);
ALTER TABLE TestResultValues ADD FOREIGN KEY (idStrName)    REFERENCES TestResultstrtab(idStr);
ALTER TABLE TestResultValues ADD FOREIGN KEY (idTestResult) REFERENCES TestResults(idTestResult);
ALTER TABLE TestResultValues ADD FOREIGN KEY (idTestSet)    REFERENCES TestSets(idTestSet);
COMMIT;

\d+ TestResultValues;