47 lines
1.4 KiB
MySQL
47 lines
1.4 KiB
MySQL
|
BEGIN TRANSACTION;
|
||
|
|
||
|
ALTER TABLE Evaluations RENAME TO tmp_Evaluations;
|
||
|
|
||
|
CREATE TABLE Evaluations (
|
||
|
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||
|
specification TEXT NOT NULL,
|
||
|
in_progress INTEGER NOT NULL,
|
||
|
FOREIGN KEY (specification) REFERENCES Specifications (name)
|
||
|
);
|
||
|
|
||
|
CREATE TABLE Checkouts (
|
||
|
specification TEXT NOT NULL,
|
||
|
revision TEXT NOT NULL,
|
||
|
evaluation INTEGER NOT NULL,
|
||
|
input TEXT NOT NULL,
|
||
|
directory TEXT NOT NULL,
|
||
|
PRIMARY KEY (specification, revision),
|
||
|
FOREIGN KEY (evaluation) REFERENCES Evaluations (id),
|
||
|
FOREIGN KEY (specification) REFERENCES Specifications (name),
|
||
|
FOREIGN KEY (input) REFERENCES Inputs (name)
|
||
|
);
|
||
|
|
||
|
INSERT INTO Evaluations (id, specification, in_progress)
|
||
|
SELECT id, specification, false
|
||
|
FROM tmp_Evaluations;
|
||
|
|
||
|
-- Copied from https://www.samuelbosch.com/2018/02/split-into-rows-sqlite.html.
|
||
|
INSERT OR IGNORE INTO Checkouts (specification, revision, evaluation, input, directory)
|
||
|
WITH RECURSIVE split(id, specification, revision, rest) AS (
|
||
|
SELECT id, specification, '', commits || ' ' FROM tmp_Evaluations
|
||
|
UNION ALL
|
||
|
SELECT id,
|
||
|
specification,
|
||
|
substr(rest, 0, instr(rest, ' ')),
|
||
|
substr(rest, instr(rest, ' ') + 1)
|
||
|
FROM split
|
||
|
WHERE rest <> '')
|
||
|
SELECT specification, revision, id, 'unknown', 'unknown'
|
||
|
FROM split
|
||
|
WHERE revision <> '';
|
||
|
|
||
|
DROP TABLE tmp_Evaluations;
|
||
|
DROP TABLE Stamps;
|
||
|
|
||
|
COMMIT;
|