piler/util/db-mysql.sql

322 lines
9.5 KiB
MySQL
Raw Normal View History

2011-12-30 15:52:59 +01:00
create database if not exists `piler` character set 'utf8';
2011-12-07 15:24:52 +01:00
use `piler`;
2011-11-14 15:57:52 +01:00
drop table if exists `sph_counter`;
2011-12-05 17:18:03 +01:00
create table if not exists `sph_counter` (
2011-11-14 15:57:52 +01:00
`counter_id` int not null,
`max_doc_id` int not null,
primary key (`counter_id`)
);
2011-12-07 15:24:52 +01:00
2011-11-14 15:57:52 +01:00
drop table if exists `sph_index`;
2011-12-05 17:18:03 +01:00
create table if not exists `sph_index` (
2011-12-03 23:05:00 +01:00
`id` bigint not null,
2011-11-14 15:57:52 +01:00
`from` char(255) default null,
2012-02-02 15:29:07 +01:00
`to` text(8192) default null,
`fromdomain` char(255) default null,
`todomain` text(512) default null,
2011-11-14 15:57:52 +01:00
`subject` text(512) default null,
2012-04-27 14:39:10 +02:00
`arrived` int unsigned not null,
`sent` int unsigned not null,
2011-11-14 15:57:52 +01:00
`body` text,
`size` int default '0',
`direction` int default 0,
`folder` int default 0,
2011-11-28 14:21:14 +01:00
`attachments` int default 0,
2011-12-30 15:52:59 +01:00
`attachment_types` text(512) default null,
2011-11-14 15:57:52 +01:00
primary key (`id`)
) Engine=InnoDB;
2011-11-28 14:21:14 +01:00
2011-11-14 15:57:52 +01:00
drop table if exists `metadata`;
2011-12-05 17:18:03 +01:00
create table if not exists `metadata` (
2011-11-14 15:57:52 +01:00
`id` bigint unsigned not null auto_increment,
`from` char(255) not null,
`fromdomain` char(48) not null,
2011-11-14 15:57:52 +01:00
`subject` text(512) default null,
2012-01-26 14:35:51 +01:00
`spam` tinyint(1) default 0,
2012-04-27 14:39:10 +02:00
`arrived` int unsigned not null,
`sent` int unsigned not null,
`retained` int unsigned not null,
2011-12-13 17:05:22 +01:00
`deleted` tinyint(1) default 0,
2011-11-14 15:57:52 +01:00
`size` int default 0,
`hlen` int default 0,
`direction` int default 0,
2011-11-22 12:31:54 +01:00
`attachments` int default 0,
2011-11-14 15:57:52 +01:00
`piler_id` char(36) not null,
`message_id` char(128) character set 'latin1' not null,
2012-02-10 13:57:04 +01:00
`reference` char(64) character set 'latin1' not null,
2011-11-22 12:31:54 +01:00
`digest` char(64) not null,
2011-11-14 15:57:52 +01:00
`bodydigest` char(64) not null,
`vcode` char(64) default null,
2011-11-30 23:42:15 +01:00
primary key (`id`), unique(`message_id`)
2011-11-14 15:57:52 +01:00
) Engine=InnoDB;
create index metadata_idx on metadata(`piler_id`);
create index metadata_idx2 on metadata(`message_id`);
2012-02-08 23:14:28 +01:00
create index metadata_idx3 on metadata(`reference`);
create index metadata_idx4 on metadata(`bodydigest`);
create index metadata_idx5 on metadata(`deleted`);
create index metadata_idx6 on metadata(`arrived`);
2012-02-19 22:59:47 +01:00
create index metadata_idx7 on metadata(`retained`);
2011-11-14 15:57:52 +01:00
2011-12-03 23:05:00 +01:00
drop table if exists `rcpt`;
2011-12-05 17:18:03 +01:00
create table if not exists `rcpt` (
2011-12-03 23:05:00 +01:00
`id` bigint unsigned not null,
`to` char(64) not null,
`todomain` char(48) not null,
2011-12-03 23:05:00 +01:00
unique(`id`,`to`)
) Engine=InnoDB;
create index `rcpt_idx` on `rcpt`(`id`);
create index `rcpt_idx2` on `rcpt`(`to`);
2012-04-27 14:39:10 +02:00
drop view if exists `v_messages`;
create view `v_messages` AS select `metadata`.`id` AS `id`,`metadata`.`piler_id` AS `piler_id`,`metadata`.`from` AS `from`,`metadata`.`fromdomain` AS `fromdomain`,`rcpt`.`to` AS `to`,`rcpt`.`todomain` AS `todomain`,`metadata`.`subject` AS `subject`, `metadata`.`size` AS `size`, `metadata`.`direction` AS `direction`, `metadata`.`sent` AS `sent`, `metadata`.`digest` AS `digest`, `metadata`.`bodydigest` AS `bodydigest` from (`metadata` join `rcpt`) where (`metadata`.`id` = `rcpt`.`id`);
2011-12-05 17:18:03 +01:00
2011-11-19 21:25:44 +01:00
drop table if exists `attachment`;
2011-12-05 17:18:03 +01:00
create table if not exists `attachment` (
2011-11-19 21:25:44 +01:00
`id` bigint unsigned not null auto_increment,
`piler_id` char(36) not null,
`attachment_id` int not null,
2011-11-28 14:21:14 +01:00
`name` char(64) default null,
`type` char(72) default null,
2011-11-19 21:25:44 +01:00
`sig` char(64) not null,
2011-11-23 12:24:21 +01:00
`size` int default 0,
2011-11-19 21:25:44 +01:00
`ptr` int default 0,
2011-12-19 23:11:40 +01:00
`deleted` tinyint(1) default 0,
2011-11-19 21:25:44 +01:00
primary key (`id`)
) Engine=InnoDB;
create index `attachment_idx` on `attachment`(`piler_id`);
create index `attachment_idx2` on `attachment`(`sig`);
2012-03-10 14:52:50 +01:00
create index `attachment_idx3` on `attachment`(`ptr`);
drop view if exists `v_attachment`;
create view `v_attachment` AS select `id` as `i`, `piler_id`, `attachment_id`, `ptr`, (select count(*) from `attachment` where `ptr`=`i`) as `refcount` from `attachment`;
2011-11-19 21:25:44 +01:00
2011-12-03 23:05:00 +01:00
2011-12-05 17:18:03 +01:00
drop table if exists `tag`;
create table if not exists `tag` (
2012-09-06 15:27:20 +02:00
`_id` bigint unsigned auto_increment not null,
2012-09-02 23:21:41 +02:00
`id` bigint not null,
`uid` int not null,
2012-09-02 23:21:41 +02:00
`tag` char(255) default null,
2012-09-06 15:27:20 +02:00
unique(`id`, `uid`),
key (`_id`)
) ENGINE=InnoDB;
2011-12-05 17:18:03 +01:00
2011-11-19 21:25:44 +01:00
drop table if exists `archiving_rule`;
2011-12-05 17:18:03 +01:00
create table if not exists `archiving_rule` (
2011-11-19 21:25:44 +01:00
`id` bigint unsigned not null auto_increment,
2012-02-12 09:18:07 +01:00
`from` char(128) character set 'latin1' default null,
`to` char(255) character set 'latin1' default null,
`subject` char(255) character set 'latin1' default null,
2011-11-19 21:25:44 +01:00
`_size` char(2) default null,
`size` int default 0,
2012-02-12 09:18:07 +01:00
`attachment_type` char(128) character set 'latin1' default null,
2011-11-23 12:24:21 +01:00
`_attachment_size` char(2) default null,
`attachment_size` int default 0,
2012-02-19 22:59:47 +01:00
`spam` tinyint(1) default -1,
`days` int default 0,
2012-01-28 20:52:13 +01:00
primary key (`id`),
2012-02-19 22:59:47 +01:00
unique(`from`,`to`,`subject`,`_size`,`size`,`attachment_type`,`_attachment_size`,`attachment_size`,`spam`)
) ENGINE=InnoDB;
drop table if exists `retention_rule`;
create table if not exists `retention_rule` (
`id` bigint unsigned not null auto_increment,
`from` char(128) character set 'latin1' default null,
`to` char(255) character set 'latin1' default null,
`subject` char(255) character set 'latin1' default null,
`_size` char(2) default null,
`size` int default 0,
`attachment_type` char(128) character set 'latin1' default null,
`_attachment_size` char(2) default null,
`attachment_size` int default 0,
`spam` tinyint(1) default -1,
`days` int default 0,
primary key (`id`),
unique(`from`,`to`,`subject`,`_size`,`size`,`attachment_type`,`_attachment_size`,`attachment_size`,`spam`)
2011-11-23 12:24:21 +01:00
) ENGINE=InnoDB;
2011-11-19 21:25:44 +01:00
2011-11-14 15:57:52 +01:00
drop table if exists `counter`;
create table if not exists `counter` (
`rcvd` bigint unsigned default 0,
`virus` bigint unsigned default 0,
2011-12-30 15:52:59 +01:00
`duplicate` bigint unsigned default 0,
2012-02-12 09:18:07 +01:00
`ignore` bigint unsigned default 0,
2012-02-10 13:57:04 +01:00
`size` bigint unsigned default 0
2011-11-14 15:57:52 +01:00
) Engine=InnoDB;
2012-02-10 13:57:04 +01:00
insert into `counter` values(0, 0, 0, 0, 0);
2011-11-14 15:57:52 +01:00
2012-04-27 14:39:10 +02:00
drop table if exists `option`;
create table if not exists `option` (
`key` char(64) not null,
`value` char(32) not null
) Engine=InnoDB;
insert into `option` (`key`, `value`) values('enable_purge', '1');
2011-11-30 23:42:15 +01:00
drop table if exists `search`;
2011-12-05 17:18:03 +01:00
create table if not exists `search` (
2011-11-30 23:42:15 +01:00
`email` char(128) not null,
`ts` int default 0,
`term` text(512) not null
) Engine=InnoDB;
create index `search_idx` on `search`(`email`);
2011-12-19 23:11:40 +01:00
drop table if exists `user_settings`;
create table if not exists `user_settings` (
`username` char(64) not null unique,
`pagelen` int default 20,
`theme` char(8) default 'default',
`lang` char(2) default 'en'
);
create index `user_settings_idx` on `user_settings`(`username`);
2011-12-27 20:51:56 +01:00
drop table if exists `user`;
2011-12-27 20:51:56 +01:00
create table if not exists `user` (
`uid` int unsigned not null primary key,
`username` char(64) not null unique,
`realname` char(64) default null,
`password` char(128) default null,
2011-12-27 20:51:56 +01:00
`domain` char(64) default null,
`dn` char(255) default '*',
`isadmin` tinyint default 0
) Engine=InnoDB;
insert into `user` (`uid`, `username`, `realname`, `password`, `isadmin`, `domain`) values (0, 'admin', 'built-in piler admin', '$1$PItc7d$zsUgON3JRrbdGS11t9JQW1', 1, 'local');
2011-12-27 20:51:56 +01:00
drop table if exists `email`;
2011-12-27 20:51:56 +01:00
create table if not exists `email` (
`uid` int unsigned not null,
`email` char(128) not null primary key
) ENGINE=InnoDB;
insert into `email` (`uid`, `email`) values(0, 'admin@local');
create table if not exists `email_groups` (
`uid` int unsigned not null,
`gid` int unsigned not null,
unique key `uid` (`uid`,`gid`),
key `email_groups_idx` (`uid`,`gid`)
) ENGINE=InnoDB;
2012-06-22 12:30:55 +02:00
create table if not exists `group` (
`id` bigint unsigned not null auto_increment primary key,
`groupname` char(255) not null unique
) ENGINE=InnoDB;
create table if not exists `group_user` (
`id` bigint unsigned not null,
`uid` int unsigned not null,
key `group_user_idx` (`id`),
key `group_user_idx2` (`uid`)
) ENGINE=InnoDB;
2012-06-22 12:30:55 +02:00
create table if not exists `group_email` (
`id` bigint unsigned not null,
`email` char(128) not null,
key `group_email_idx` (`id`)
) ENGINE=InnoDB;
2012-08-28 22:00:45 +02:00
create table if not exists `folder` (
`id` int not null auto_increment,
`parent_id` int default 0,
`name` char(64) not null unique,
primary key (`id`)
) Engine=InnoDB;
2012-09-06 15:27:20 +02:00
create table if not exists `folder_user` (
`id` bigint unsigned not null,
`uid` int unsigned not null,
key `folder_user_idx` (`id`),
key `folder_user_idx2` (`uid`)
) ENGINE=InnoDB;
create table if not exists `folder_extra` (
`id` int unsigned not null auto_increment,
`uid` int unsigned not null,
`name` char(64) not null,
2012-09-17 16:49:27 +02:00
unique(uid, name),
key (`id`)
) ENGINE=InnoDB;
create table if not exists `folder_message` (
folder_id bigint not null,
id bigint not null,
unique(folder_id, id)
) ENGINE=InnoDB;
2012-09-02 23:21:41 +02:00
create table if not exists `note` (
2012-09-06 15:27:20 +02:00
`_id` bigint unsigned auto_increment not null,
2012-08-28 22:00:45 +02:00
`id` bigint unsigned not null,
2012-09-02 23:21:41 +02:00
`uid` int not null,
2012-08-28 22:00:45 +02:00
`note` text default null,
2012-09-02 23:21:41 +02:00
unique(`id`, `uid`),
2012-09-06 15:27:20 +02:00
key (`_id`)
2012-08-28 22:00:45 +02:00
) ENGINE=InnoDB;
2011-12-27 20:51:56 +01:00
create table if not exists `remote` (
`remotedomain` char(64) not null primary key,
`remotehost` char(64) not null,
2012-08-06 14:01:56 +02:00
`basedn` char(255) not null,
`binddn` char(255) not null,
2011-12-27 20:51:56 +01:00
`sitedescription` char(64) default null
) ENGINE=InnoDB;
drop table if exists `domain`;
2011-12-27 20:51:56 +01:00
create table if not exists `domain` (
`domain` char(64) not null primary key,
`mapped` char(64) not null
) ENGINE=InnoDB;
insert into `domain` (`domain`, `mapped`) values('local', 'local');
drop table if exists `audit`;
create table if not exists `audit` (
`id` bigint unsigned not null auto_increment,
`ts` int not null,
`email` char(128) not null,
`action` int not null,
`ipaddr` char(15) not null,
`meta_id` bigint unsigned not null,
`description` char(255) default null,
`vcode` char(64) default null,
primary key (`id`)
) ENGINE=InnoDB;
2012-01-26 14:35:51 +01:00
create index `audit_idx` on `audit`(`email`);
create index `audit_idx2` on `audit`(`action`);
create index `audit_idx3` on `audit`(`ipaddr`);
create index `audit_idx4` on `audit`(`ts`);