mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-24 14:56:15 +02:00
e0ff8da9d5
Fixes #10558 Co-Authored-By: Eugene Butler <eugene@eugene4.com> Co-authored-by: Eelco Dolstra <edolstra@gmail.com>
41 lines
1.8 KiB
SQL
41 lines
1.8 KiB
SQL
-- Extension of the sql schema for content-addressed derivations.
|
||
-- Won't be loaded unless the experimental feature `ca-derivations`
|
||
-- is enabled
|
||
|
||
create table if not exists Realisations (
|
||
id integer primary key autoincrement not null,
|
||
drvPath text not null,
|
||
outputName text not null, -- symbolic output id, usually "out"
|
||
outputPath integer not null,
|
||
signatures text, -- space-separated list
|
||
foreign key (outputPath) references ValidPaths(id) on delete cascade
|
||
);
|
||
|
||
create index if not exists IndexRealisations on Realisations(drvPath, outputName);
|
||
|
||
-- We can end-up in a weird edge-case where a path depends on itself because
|
||
-- it’s an output of a CA derivation, that happens to be the same as one of its
|
||
-- dependencies.
|
||
-- In that case we have a dependency loop (path -> realisation1 -> realisation2
|
||
-- -> path) that we need to break by removing the dependencies between the
|
||
-- realisations
|
||
create trigger if not exists DeleteSelfRefsViaRealisations before delete on ValidPaths
|
||
begin
|
||
delete from RealisationsRefs where realisationReference in (
|
||
select id from Realisations where outputPath = old.id
|
||
);
|
||
end;
|
||
|
||
create table if not exists RealisationsRefs (
|
||
referrer integer not null,
|
||
realisationReference integer,
|
||
foreign key (referrer) references Realisations(id) on delete cascade,
|
||
foreign key (realisationReference) references Realisations(id) on delete restrict
|
||
);
|
||
-- used by deletion trigger
|
||
create index if not exists IndexRealisationsRefsRealisationReference on RealisationsRefs(realisationReference);
|
||
|
||
-- used by QueryRealisationReferences
|
||
create index if not exists IndexRealisationsRefs on RealisationsRefs(referrer);
|
||
-- used by cascade deletion when ValidPaths is deleted
|
||
create index if not exists IndexRealisationsRefsOnOutputPath on Realisations(outputPath);
|