From 23a72f57502ba694c7adb5f17acbf135046caad9 Mon Sep 17 00:00:00 2001 From: "Aleksander Machniak (Kolab Systems)" Date: Mon, 21 Nov 2011 11:54:42 +0100 Subject: [PATCH] Updated DDL for Postgresql, improved index definitions --- .../calendar/drivers/database/sql/mysql.sql | 8 ++++--- .../drivers/database/sql/postgresql.sql | 22 +++++++++++++++++++ .../calendar/drivers/database/sql/sqlite.sql | 2 +- plugins/calendar/lib/calendar_itip.php | 4 +++- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/plugins/calendar/drivers/database/sql/mysql.sql b/plugins/calendar/drivers/database/sql/mysql.sql index 6b530f07..d7887a9f 100644 --- a/plugins/calendar/drivers/database/sql/mysql.sql +++ b/plugins/calendar/drivers/database/sql/mysql.sql @@ -19,6 +19,7 @@ CREATE TABLE `calendars` ( `color` varchar(8) NOT NULL, `showalarms` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY(`calendar_id`), + INDEX `user_name_idx` (`user_id`, `name`), CONSTRAINT `fk_calendars_user_id` FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; @@ -45,8 +46,9 @@ CREATE TABLE `events` ( `attendees` text DEFAULT NULL, `notifyat` datetime DEFAULT NULL, PRIMARY KEY(`event_id`), - INDEX `uid_idx` (`uid`,`calendar_id`), - INDEX `recurrence_idx` (`recurrence_id`), + INDEX `uid_idx` (`uid`), + INDEX `recurrence_idx` (`recurrence_id`), + INDEX `calendar_notify_idx` (`calendar_id`,`notifyat`), CONSTRAINT `fk_events_calendar_id` FOREIGN KEY (`calendar_id`) REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE ON UPDATE CASCADE ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; @@ -71,7 +73,7 @@ CREATE TABLE `itipinvitations` ( `expires` DATETIME DEFAULT NULL, `cancelled` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY(`token`), - INDEX `uid_idx` (`event_uid`,`user_id`), + INDEX `uid_idx` (`user_id`,`event_uid`), CONSTRAINT `fk_itipinvitations_user_id` FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */; diff --git a/plugins/calendar/drivers/database/sql/postgresql.sql b/plugins/calendar/drivers/database/sql/postgresql.sql index 7e7aafe4..c8f385e1 100644 --- a/plugins/calendar/drivers/database/sql/postgresql.sql +++ b/plugins/calendar/drivers/database/sql/postgresql.sql @@ -30,6 +30,8 @@ CREATE TABLE calendars ( PRIMARY KEY (calendar_id) ); +CREATE INDEX calendars_user_id_idx ON calendars (user_id, name); + CREATE SEQUENCE event_ids INCREMENT BY 1 @@ -62,6 +64,10 @@ CREATE TABLE events ( PRIMARY KEY (event_id) ); +CREATE INDEX events_calendar_id_notifyat_idx ON events (calendar_id, notifyat); +CREATE INDEX events_uid_idx ON events (uid); +CREATE INDEX events_recurrence_id_idx ON events (recurrence_id); + CREATE SEQUENCE attachment_ids INCREMENT BY 1 @@ -79,3 +85,19 @@ CREATE TABLE attachments ( data text NOT NULL DEFAULT '', PRIMARY KEY (attachment_id) ); + +CREATE INDEX attachments_user_id_idx ON attachments (user_id); + + +CREATE TABLE itipinvitations ( + token varchar(64) NOT NULL, + event_uid varchar(255) NOT NULL, + user_id integer NOT NULL + REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE, + event TEXT NOT NULL, + expires timestamp without time zone DEFAULT NULL, + cancelled smallint NOT NULL DEFAULT 0, + PRIMARY KEY (token) +); + +CREATE INDEX itipinvitations_user_id_event_uid_idx ON itipinvitations (user_id, event_uid); diff --git a/plugins/calendar/drivers/database/sql/sqlite.sql b/plugins/calendar/drivers/database/sql/sqlite.sql index 6323d3e3..c89de5e4 100644 --- a/plugins/calendar/drivers/database/sql/sqlite.sql +++ b/plugins/calendar/drivers/database/sql/sqlite.sql @@ -70,5 +70,5 @@ CREATE TABLE itipinvitations ( REFERENCES users(user_id) ); -CREATE INDEX ix_itipinvitations_uid ON itipinvitations(event_uid,user_id); +CREATE INDEX ix_itipinvitations_uid ON itipinvitations(user_id, event_uid); diff --git a/plugins/calendar/lib/calendar_itip.php b/plugins/calendar/lib/calendar_itip.php index e8ce963c..d945d19b 100644 --- a/plugins/calendar/lib/calendar_itip.php +++ b/plugins/calendar/lib/calendar_itip.php @@ -238,7 +238,9 @@ class calendar_itip // already stored this if ($stored[$base]) return $token; - + + // @TODO: REPLACE works only with MySQL + $query = $this->rc->db->query( "REPLACE INTO itipinvitations (token, event_uid, user_id, event, expires)