/* 
To create the database, run this file through psql like so:
prompt> psql -f 0_6watch_tables_reset 6watch [username]
*/

DROP INDEX peers_n1;
DROP INDEX prefix_index;
DROP INDEX ppm_index;
DROP TABLE timeranges;
DROP TABLE ppms;
DROP TABLE peers;
DROP TABLE prefixes;
DROP TABLE rib_import;
DROP TABLE update_import;

CREATE TABLE rib_import(
	peer INET,
	collector VARCHAR(30),
	prefix CIDR,
	ts TIMESTAMP WITHOUT TIME ZONE,
	origin INTEGER,
	lasthop INTEGER,
	aspath INTEGER ARRAY
);
CREATE TABLE update_import(
	peer INET,
	collector VARCHAR(30),
	prefix CIDR,
        update BOOLEAN,
	ts TIMESTAMP WITHOUT TIME ZONE,
	origin VARCHAR,
	lasthop VARCHAR,
	aspath VARCHAR ARRAY
);
	

CREATE TABLE prefixes (
	pref CIDR UNIQUE NOT NULL, 
	dbid SERIAL NOT NULL, 
	PRIMARY KEY (dbid)
);
comment on table prefixes is 'Holds prefixes and associated db_ids with them.';

CREATE TABLE peers (
	dbid SERIAL NOT NULL, 
	name VARCHAR(30), 
	addr INET NOT NULL, 
	collector VARCHAR(30) NOT NULL,
        UNIQUE(addr,collector),
	PRIMARY KEY (dbid)
);
comment on table peers is 'Holds addresses of BGP peer routers.';
create index peers_n1 on peers (addr,collector);

CREATE TABLE ppms (
	dbid SERIAL NOT NULL,
	peer_dbid INTEGER NOT NULL, 
	prefix_dbid INTEGER NOT NULL, 
	last_timerange_dbid INTEGER NULL, 
	prefix_safi INTEGER, 
	PRIMARY KEY (dbid), 
        UNIQUE(prefix_dbid,peer_dbid),
	FOREIGN KEY(peer_dbid) REFERENCES peers (dbid), 
	FOREIGN KEY(prefix_dbid) REFERENCES prefixes (dbid)
);
comment on table ppms is 'Associative class between peers and prefixes.';
/*create index ppm_index on ppms (prefix_dbid,peer_dbid);*/

CREATE TABLE timeranges (
	dbid SERIAL NOT NULL, 
	ppm_dbid INTEGER NOT NULL,
	start_time TIMESTAMP WITHOUT TIME ZONE, 
	end_time TIMESTAMP WITHOUT TIME ZONE, 
	last_hop VARCHAR, 
	origin_as VARCHAR, 
	as_path VARCHAR ARRAY,
	PRIMARY KEY (dbid), 
	FOREIGN KEY (ppm_dbid) REFERENCES ppms (dbid)
);
comment on table timeranges is 'Tracks active timeranges in a given ppm mapping';


