1 | -- $Id: tmdb-r16-testcaseargs-1-testresultfailures-1.pgsql 106061 2024-09-16 14:03:52Z vboxsync $
|
---|
2 | --- @file
|
---|
3 | -- VBox Test Manager Database - Adds sName to TestCaseArgs, idTestSet
|
---|
4 | -- to TestResultFailures and add some indexes to the latter as well.
|
---|
5 | --
|
---|
6 |
|
---|
7 | --
|
---|
8 | -- Copyright (C) 2013-2024 Oracle and/or its affiliates.
|
---|
9 | --
|
---|
10 | -- This file is part of VirtualBox base platform packages, as
|
---|
11 | -- available from https://www.virtualbox.org.
|
---|
12 | --
|
---|
13 | -- This program is free software; you can redistribute it and/or
|
---|
14 | -- modify it under the terms of the GNU General Public License
|
---|
15 | -- as published by the Free Software Foundation, in version 3 of the
|
---|
16 | -- License.
|
---|
17 | --
|
---|
18 | -- This program is distributed in the hope that it will be useful, but
|
---|
19 | -- WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
20 | -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
21 | -- General Public License for more details.
|
---|
22 | --
|
---|
23 | -- You should have received a copy of the GNU General Public License
|
---|
24 | -- along with this program; if not, see <https://www.gnu.org/licenses>.
|
---|
25 | --
|
---|
26 | -- The contents of this file may alternatively be used under the terms
|
---|
27 | -- of the Common Development and Distribution License Version 1.0
|
---|
28 | -- (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
|
---|
29 | -- in the VirtualBox distribution, in which case the provisions of the
|
---|
30 | -- CDDL are applicable instead of those of the GPL.
|
---|
31 | --
|
---|
32 | -- You may elect to license modified versions of this file under the
|
---|
33 | -- terms and conditions of either the GPL or the CDDL or both.
|
---|
34 | --
|
---|
35 | -- SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
|
---|
36 | --
|
---|
37 |
|
---|
38 |
|
---|
39 | DROP TABLE OldTestCaseArgs;
|
---|
40 | DROP TABLE NewTestCaseArgs;
|
---|
41 |
|
---|
42 |
|
---|
43 | \set ON_ERROR_STOP 1
|
---|
44 | \set AUTOCOMMIT 0
|
---|
45 |
|
---|
46 | LOCK TABLE TestBoxStatuses IN ACCESS EXCLUSIVE MODE;
|
---|
47 | LOCK TABLE TestSets IN ACCESS EXCLUSIVE MODE;
|
---|
48 | LOCK TABLE TestCaseArgs IN ACCESS EXCLUSIVE MODE;
|
---|
49 | LOCK TABLE TestResultFailures IN ACCESS EXCLUSIVE MODE;
|
---|
50 |
|
---|
51 | --
|
---|
52 | -- TestCaseArgs is simple and we can use ALTER TABLE for a change.
|
---|
53 | --
|
---|
54 | \d TestCaseArgs;
|
---|
55 | ALTER TABLE TestCaseArgs ADD COLUMN sSubName text DEFAULT NULL;
|
---|
56 | \d TestCaseArgs;
|
---|
57 |
|
---|
58 |
|
---|
59 | --
|
---|
60 | -- Rename the original table, drop constrains and foreign key references so we
|
---|
61 | -- get the right name automatic when creating the new one.
|
---|
62 | --
|
---|
63 | \d TestResultFailures;
|
---|
64 | ALTER TABLE TestResultFailures DROP CONSTRAINT idTestResultFk;
|
---|
65 | ALTER TABLE TestResultFailures RENAME TO OldTestResultFailures;
|
---|
66 |
|
---|
67 | DROP INDEX IF EXISTS TestResultFailureIdx;
|
---|
68 | DROP INDEX IF EXISTS TestResultFailureIdx2;
|
---|
69 | DROP INDEX IF EXISTS TestResultFailureIdx3;
|
---|
70 |
|
---|
71 |
|
---|
72 | CREATE TABLE TestResultFailures (
|
---|
73 | --- The test result we're disucssing.
|
---|
74 | -- @note The foreign key is declared after TestResults (further down).
|
---|
75 | idTestResult INTEGER NOT NULL,
|
---|
76 | --- When this row starts taking effect (inclusive).
|
---|
77 | tsEffective TIMESTAMP WITH TIME ZONE DEFAULT current_timestamp NOT NULL,
|
---|
78 | --- When this row stops being tsEffective (exclusive).
|
---|
79 | tsExpire TIMESTAMP WITH TIME ZONE DEFAULT TIMESTAMP WITH TIME ZONE 'infinity' NOT NULL,
|
---|
80 | --- The user id of the one who created/modified this entry.
|
---|
81 | -- Non-unique foreign key: Users(uid)
|
---|
82 | uidAuthor INTEGER NOT NULL,
|
---|
83 | --- The testsest this result is a part of.
|
---|
84 | -- This is mainly an aid for bypassing the enormous TestResults table.
|
---|
85 | -- Note! This is a foreign key, but we have to add it after TestSets has
|
---|
86 | -- been created, see further down.
|
---|
87 | idTestSet INTEGER NOT NULL,
|
---|
88 |
|
---|
89 | --- The suggested failure reason.
|
---|
90 | -- Non-unique foreign key: FailureReasons(idFailureReason)
|
---|
91 | idFailureReason INTEGER NOT NULL,
|
---|
92 | --- Optional comment.
|
---|
93 | sComment text DEFAULT NULL,
|
---|
94 |
|
---|
95 | PRIMARY KEY (idTestResult, tsExpire)
|
---|
96 | );
|
---|
97 |
|
---|
98 | INSERT INTO TestResultFailures ( idTestResult, tsEffective, tsExpire, uidAuthor, idTestSet, idFailureReason, sComment )
|
---|
99 | SELECT o.idTestResult, o.tsEffective, o.tsExpire, o.uidAuthor, tr.idTestSet, o.idFailureReason, sComment
|
---|
100 | FROM OldTestResultFailures o,
|
---|
101 | TestResults tr
|
---|
102 | WHERE o.idTestResult = tr.idTestResult;
|
---|
103 |
|
---|
104 | -- Add unique constraint to TestResult for our new foreign key.
|
---|
105 | ALTER TABLE TestResults ADD CONSTRAINT TestResults_idTestResult_idTestSet_key UNIQUE (idTestResult, idTestSet);
|
---|
106 |
|
---|
107 | -- Restore foreign key.
|
---|
108 | ALTER TABLE TestResultFailures ADD CONSTRAINT TestResultFailures_idTestResult_idTestSet_fkey
|
---|
109 | FOREIGN KEY (idTestResult, idTestSet) REFERENCES TestResults(idTestResult, idTestSet) MATCH FULL;
|
---|
110 |
|
---|
111 | -- Add new indexes.
|
---|
112 | CREATE INDEX TestResultFailureIdx ON TestResultFailures (idTestSet, tsExpire DESC, tsEffective ASC);
|
---|
113 | CREATE INDEX TestResultFailureIdx2 ON TestResultFailures (idTestResult, tsExpire DESC, tsEffective ASC);
|
---|
114 | CREATE INDEX TestResultFailureIdx3 ON TestResultFailures (idFailureReason, idTestResult, tsExpire DESC, tsEffective ASC);
|
---|
115 |
|
---|
116 | -- Drop the old table.
|
---|
117 | DROP TABLE OldTestResultFailures;
|
---|
118 |
|
---|
119 | COMMIT;
|
---|
120 |
|
---|
121 | \d TestResultFailures;
|
---|
122 |
|
---|