From ace511a771656c983046919333cee501339c98a1 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 06 Oct 2010 09:00:12 -0400
Subject: [PATCH] - Add unique index on users.username+users.mail_host

---
 CHANGELOG                |    1 +
 SQL/sqlite.update.sql    |    6 ++++++
 SQL/postgres.update.sql  |    8 +++++++-
 SQL/mysql.update.sql     |    6 ++++++
 SQL/postgres.initial.sql |   10 +++++-----
 SQL/mysql.initial.sql    |    2 +-
 SQL/sqlite.initial.sql   |    2 +-
 SQL/mssql.initial.sql    |    2 +-
 SQL/mssql.upgrade.sql    |    7 +++++++
 9 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index a0b0f36..0b7c850 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -18,6 +18,7 @@
 - Fix confirmation message isn't displayed after sending mail on Chrome (#1486177)
 - Fix keyboard doesn't work with autocomplete list with Chrome (#1487029)
 - Improve tabs to fixed width and add tabs in identities info (#1486974)
+- Add unique index on users.username+users.mail_host
 
 RELEASE 0.4.2
 -------------
diff --git a/SQL/mssql.initial.sql b/SQL/mssql.initial.sql
index 553e68a..6b031a2 100644
--- a/SQL/mssql.initial.sql
+++ b/SQL/mssql.initial.sql
@@ -255,7 +255,7 @@
 	CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]
 GO
 
-CREATE  INDEX [IX_users_username] ON [dbo].[users]([username]) ON [PRIMARY]
+CREATE  UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
 GO
 
 CREATE  INDEX [IX_users_alias] ON [dbo].[users]([alias]) ON [PRIMARY]
diff --git a/SQL/mssql.upgrade.sql b/SQL/mssql.upgrade.sql
index 1aa771b..6b3cd6d 100644
--- a/SQL/mssql.upgrade.sql
+++ b/SQL/mssql.upgrade.sql
@@ -87,3 +87,10 @@
     ON DELETE CASCADE ON UPDATE CASCADE
 GO
 
+-- Updates from version 0.4.2
+
+DROP INDEX [IX_users_username]
+GO
+CREATE UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]
+GO
+
diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql
index fdab115..456a483 100644
--- a/SQL/mysql.initial.sql
+++ b/SQL/mysql.initial.sql
@@ -28,7 +28,7 @@
  `language` varchar(5),
  `preferences` text,
  PRIMARY KEY(`user_id`),
- INDEX `username_index` (`username`),
+ UNIQUE `username` (`username`, `mail_host`),
  INDEX `alias_index` (`alias`)
 ) /*!40000 ENGINE=INNODB */ /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
 
diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql
index 28ebf6f..b9ab59e 100644
--- a/SQL/mysql.update.sql
+++ b/SQL/mysql.update.sql
@@ -123,3 +123,9 @@
 
 ALTER TABLE `users` CHANGE `last_login` `last_login` datetime DEFAULT NULL;
 UPDATE `users` SET `last_login` = NULL WHERE `last_login` = '1000-01-01 00:00:00';
+
+-- Updates from version 0.4.2
+
+ALTER TABLE `users` DROP INDEX `username_index`;
+ALTER TABLE `users` ADD UNIQUE `username` (`username`, `mail_host`);
+
diff --git a/SQL/postgres.initial.sql b/SQL/postgres.initial.sql
index ac59efb..84a9afd 100644
--- a/SQL/postgres.initial.sql
+++ b/SQL/postgres.initial.sql
@@ -24,10 +24,10 @@
     created timestamp with time zone DEFAULT now() NOT NULL,
     last_login timestamp with time zone DEFAULT NULL,
     "language" varchar(5),
-    preferences text DEFAULT ''::text NOT NULL
+    preferences text DEFAULT ''::text NOT NULL,
+    UNIQUE (username, mail_host)
 );
 
-CREATE INDEX users_username_id_idx ON users (username);
 CREATE INDEX users_alias_id_idx ON users (alias);
 
   
@@ -146,7 +146,7 @@
 -- Table "contactgroupmembers"
 -- Name: contactgroupmembers; Type: TABLE; Schema: public; Owner: postgres
 --
-					    
+
 CREATE TABLE contactgroupmembers (
     contactgroup_id integer NOT NULL
         REFERENCES contactgroups(contactgroup_id) ON DELETE CASCADE ON UPDATE CASCADE,
@@ -216,9 +216,9 @@
     date timestamp with time zone NOT NULL,
     size integer DEFAULT 0 NOT NULL,
     headers text NOT NULL,
-    structure text
+    structure text,
+    UNIQUE (user_id, cache_key, uid)
 );
 
-ALTER TABLE messages ADD UNIQUE (user_id, cache_key, uid);
 CREATE INDEX messages_index_idx ON messages (user_id, cache_key, idx);
 CREATE INDEX messages_created_idx ON messages (created);
diff --git a/SQL/postgres.update.sql b/SQL/postgres.update.sql
index 1ef93d8..99b9c0e 100644
--- a/SQL/postgres.update.sql
+++ b/SQL/postgres.update.sql
@@ -56,7 +56,7 @@
     NO MAXVALUE
     NO MINVALUE
     CACHE 1;
-		
+
 CREATE TABLE contactgroups (
     contactgroup_id integer DEFAULT nextval('contactgroups_ids'::text) PRIMARY KEY,
     user_id 	integer		NOT NULL
@@ -81,3 +81,9 @@
 
 ALTER TABLE users ALTER last_login DROP NOT NULL;
 ALTER TABLE users ALTER last_login SET DEFAULT NULL;
+
+-- Updates from version 0.4.2
+
+DROP INDEX users_username_id_idx;
+ALTER TABLE users ADD UNIQUE (username, mail_host);
+
diff --git a/SQL/sqlite.initial.sql b/SQL/sqlite.initial.sql
index e7faeed..ea7650c 100644
--- a/SQL/sqlite.initial.sql
+++ b/SQL/sqlite.initial.sql
@@ -97,7 +97,7 @@
   preferences text NOT NULL default ''
 );
 
-CREATE INDEX ix_users_username ON users(username);
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
 CREATE INDEX ix_users_alias ON users(alias);
 
 -- --------------------------------------------------------
diff --git a/SQL/sqlite.update.sql b/SQL/sqlite.update.sql
index 2db7821..78e283e 100644
--- a/SQL/sqlite.update.sql
+++ b/SQL/sqlite.update.sql
@@ -140,3 +140,9 @@
 CREATE INDEX ix_users_username ON users(username);
 CREATE INDEX ix_users_alias ON users(alias);
 DROP TABLE tmp_users;
+
+-- Updates from version 0.4.2
+
+DROP INDEX ix_users_username;
+CREATE UNIQUE INDEX ix_users_username ON users(username, mail_host);
+

--
Gitblit v1.9.1