/* -*-sql-*-
 *
 * Plain old SQL for setting up the tables for Odin mail redirection.
 *
 * (c) 2015 Mark Wooding
 */

/*----- Licensing notice ----------------------------------------------------
 *
 * This file is part of the `odin.gg' service, `odin-cgi'.
 *
 * `odin-cgi' is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation; either version 3 of the
 * License, or (at your option) any later version.
 *
 * `odin-cgi' is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with `odin-cgi'; if not, see
 * <http://www.gnu.org/licenses/>.
 */

/* The various tools assume that the database is appropriate configured with
 * the SERIALIZABLE isolation level.
 */

begin;

drop view if exists odin_maildeliver;

create table odin_mailredir
	(lpart varchar(64) not null,
	 dom varchar(128) not null,
	 owner varchar(64) not null,
	 creator varchar(64) not null,
	 recip text not null default '',
	 expire bigint not null,
	 st varchar(16) not null default 'live',
	 comment text not null default '',
	 primary key (lpart, dom));
create index odin_mailredir_by_owner_st on odin_mailredir (owner, st);
create index odin_mailredir_by_expire_st on odin_mailredir (expire, st);
create index odin_mailredir_by_recip on odin_mailredir (recip);

create view odin_maildeliver as
	select lpart, dom, recip from odin_mailredir
	where st = 'live' and
	  (expire = -1 or
	   expire > extract(epoch from current_timestamp));

commit;
