3931c76154
* nix/libstore/schema.sql: Rename to... * guix/store/schema.sql: ... this. * Makefile.am (nobase_dist_guilemodule_DATA): Add it. * nix/local.mk (%D%/libstore/schema.sql.hh): Adjust accordingly. * guix/store/database.scm (sql-schema): New variable. (sqlite-exec, initialize-database, call-with-database): New procedures. (with-database): Rewrite in terms of 'call-with-database'. * tests/store-database.scm ("new database"): New test. * guix/self.scm (compiled-guix)[*core-modules*]: Add 'schema.sql' to #:extra-files.
45 lines
1.6 KiB
SQL
45 lines
1.6 KiB
SQL
create table if not exists ValidPaths (
|
|
id integer primary key autoincrement not null,
|
|
path text unique not null,
|
|
hash text not null,
|
|
registrationTime integer not null,
|
|
deriver text,
|
|
narSize integer
|
|
);
|
|
|
|
create table if not exists Refs (
|
|
referrer integer not null,
|
|
reference integer not null,
|
|
primary key (referrer, reference),
|
|
foreign key (referrer) references ValidPaths(id) on delete cascade,
|
|
foreign key (reference) references ValidPaths(id) on delete restrict
|
|
);
|
|
|
|
create index if not exists IndexReferrer on Refs(referrer);
|
|
create index if not exists IndexReference on Refs(reference);
|
|
|
|
-- Paths can refer to themselves, causing a tuple (N, N) in the Refs
|
|
-- table. This causes a deletion of the corresponding row in
|
|
-- ValidPaths to cause a foreign key constraint violation (due to `on
|
|
-- delete restrict' on the `reference' column). Therefore, explicitly
|
|
-- get rid of self-references.
|
|
create trigger if not exists DeleteSelfRefs before delete on ValidPaths
|
|
begin
|
|
delete from Refs where referrer = old.id and reference = old.id;
|
|
end;
|
|
|
|
create table if not exists DerivationOutputs (
|
|
drv integer not null,
|
|
id text not null, -- symbolic output id, usually "out"
|
|
path text not null,
|
|
primary key (drv, id),
|
|
foreign key (drv) references ValidPaths(id) on delete cascade
|
|
);
|
|
|
|
create index if not exists IndexDerivationOutputs on DerivationOutputs(path);
|
|
|
|
create table if not exists FailedPaths (
|
|
path text primary key not null,
|
|
time integer not null
|
|
);
|