create type InputProvenance as ENUM ('User', 'AFL', 'QSym', 'Unknown');

create table if not exists boosts
(
	boost_id            serial primary key,
	boost_name          bytea,
	create_time         timestamp
);

create table if not exists boost_versions
(
	ver_id              serial primary key,
	boost_id            integer references boosts(boost_id),
	orig_binary         bytea,
	orig_bin_sha        bytea,
	zafl_binary         bytea,
	zafl_bin_sha        bytea,
	submit_time         timestamp,
	start_time          timestamp,
	end_time            timestamp,
	err                 bool
);

create table if not exists inputs
(
	input_id            serial primary key,
	boost_id            integer references boosts(boost_id),
	create_time         timestamp,
	prov                InputProvenance,
	input_data          bytea,
	sha256              bytea
);

create table if not exists forensics
(
	forensic_id         serial primary key,
	input_id            integer references inputs(input_id),
	ver_id              integer references boost_versions(ver_id),
	exit_code           integer,
	backtrace           bytea,
	prov                InputProvenance
);

create table if not exists seeds
(
	seed_id             serial primary key,
	input_id            integer references inputs(input_id),
	prov                InputProvenance
);


create table if not exists zafl_logs
(
	log_id              serial primary key,
	log                 bytea,
	ver_id              integer references versions(ver_id)
);

create table if not exists fuzz_logs
(
	log_id              serial primary key,
	log                 bytea,
	ver_id              integer references versions(ver_id),
	prov                InputProvenance
);