create table builds ( id integer primary key autoincrement not null, timestamp integer not null, -- time this build was added to the db (in Unix time) -- Info about the inputs. project text not null, -- !!! foreign key jobSet text not null, -- !!! foreign key attrName text not null, -- !!! list all the inputs / arguments -- Info about the build result. description text, drvPath text not null, outPath text not null, isCachedBuild integer not null, -- boolean buildStatus integer, -- 0 = succeeded, 1 = Nix build failure, 2 = positive build failure errorMsg text, -- error message in case of a Nix failure startTime integer, -- in Unix time, 0 = used cached build result stopTime integer ); create table buildProducts ( buildId integer not null, type text not null, -- "nix-build", "file", "doc", "report", ... subtype text not null, -- "sources", "rpm", ... path text not null, primary key (buildId, type, subType), foreign key (buildId) references builds(id) on delete cascade -- ignored by sqlite ); create table buildLogs ( buildId integer not null, logPhase text not null, path text not null, type text not null, primary key (buildId, logPhase), foreign key (buildId) references builds(id) on delete cascade -- ignored by sqlite ); -- Emulate "on delete cascade" foreign key constraints. create trigger cascadeBuildDeletion before delete on builds for each row begin delete from buildLogs where buildId = old.id; delete from buildProducts where buildId = old.id; end; create table projects ( name text primary key not null ); -- A jobset consists of a set of inputs (e.g. SVN repositories), one -- of which contains a Nix expression containing an attribute set -- describing build jobs. create table jobSets ( name text not null, project text not null, description text, nixExprInput text not null, -- name of the jobSetInput containing the Nix expression nixExprPath text not null, -- relative path of the Nix expression primary key (project, name), foreign key (project) references projects(name) on delete cascade, -- ignored by sqlite foreign key (project, name, nixExprInput) references jobSetInputs(project, job, name) ); create table jobSetInputs ( project text not null, job text not null, name text not null, type text not null, -- "svn", "cvs", "path", "file" uri text, revision integer, -- for svn tag text, -- for cvs primary key (project, job, name), foreign key (project, job) references jobSets(project, name) on delete cascade -- ignored by sqlite );