44 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			44 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
 | |
| );
 |