mirror of https://notabug.org/mthl/cuirass.git
db: Forbid inserting the same specification twice.
* src/schema.sql (Specifications): Make 'repo_name' the primary key. (Stamps, Evaluations): Adapt. * src/cuirass/database.scm (db-get-specifications): Likewise. (db-add-specification): Ignore if SPEC has already been added. * tests/database.scm (example-spec): Adapt.pull/3/head
parent
a948f556eb
commit
bfd395c09f
|
@ -115,8 +115,8 @@ database object."
|
|||
(define (db-add-specification db spec)
|
||||
"Store specification SPEC in database DB and return its ID."
|
||||
(apply sqlite-exec db "\
|
||||
INSERT INTO Specifications (repo_name, url, load_path, file, proc, arguments, \
|
||||
branch, tag, revision, no_compile_p) \
|
||||
INSERT OR IGNORE INTO Specifications (repo_name, url, load_path, file, \
|
||||
proc, arguments, branch, tag, revision, no_compile_p) \
|
||||
VALUES ('~A', '~A', '~A', '~A', '~S', '~S', '~A', '~A', '~A', ~A);"
|
||||
(append
|
||||
(assq-refs spec '(#:name #:url #:load-path #:file #:proc #:arguments))
|
||||
|
@ -129,11 +129,10 @@ INSERT INTO Specifications (repo_name, url, load_path, file, proc, arguments, \
|
|||
(specs '()))
|
||||
(match rows
|
||||
(() specs)
|
||||
((#(id name url load-path file proc args branch tag rev no-compile?)
|
||||
((#(name url load-path file proc args branch tag rev no-compile?)
|
||||
. rest)
|
||||
(loop rest
|
||||
(cons `((#:id . ,id)
|
||||
(#:name . ,name)
|
||||
(cons `((#:name . ,name)
|
||||
(#:url . ,url)
|
||||
(#:load-path . ,load-path)
|
||||
(#:file . ,file)
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
BEGIN TRANSACTION;
|
||||
|
||||
CREATE TABLE Specifications (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
repo_name TEXT NOT NULL,
|
||||
repo_name TEXT NOT NULL PRIMARY KEY,
|
||||
url TEXT NOT NULL,
|
||||
load_path TEXT NOT NULL,
|
||||
file TEXT NOT NULL,
|
||||
|
@ -16,16 +15,16 @@ CREATE TABLE Specifications (
|
|||
);
|
||||
|
||||
CREATE TABLE Stamps (
|
||||
specification INTEGER NOT NULL PRIMARY KEY,
|
||||
specification TEXT NOT NULL PRIMARY KEY,
|
||||
stamp TEXT NOT NULL,
|
||||
FOREIGN KEY (specification) REFERENCES Specifications (id)
|
||||
FOREIGN KEY (specification) REFERENCES Specifications (repo_name)
|
||||
);
|
||||
|
||||
CREATE TABLE Evaluations (
|
||||
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
specification INTEGER NOT NULL,
|
||||
specification TEXT NOT NULL,
|
||||
revision TEXT NOT NULL,
|
||||
FOREIGN KEY (specification) REFERENCES Specifications (id)
|
||||
FOREIGN KEY (specification) REFERENCES Specifications (repo_name)
|
||||
);
|
||||
|
||||
CREATE TABLE Derivations (
|
||||
|
|
|
@ -21,8 +21,7 @@
|
|||
(srfi srfi-64))
|
||||
|
||||
(define example-spec
|
||||
'((#:id . 1)
|
||||
(#:name . "guix")
|
||||
'((#:name . "guix")
|
||||
(#:url . "git://git.savannah.gnu.org/guix.git")
|
||||
(#:load-path . ".")
|
||||
(#:file . "/tmp/gnu-system.scm")
|
||||
|
|
Loading…
Reference in New Issue