]> git.donarmstrong.com Git - roundcube.git/blob - SQL/mssql.initial.sql
Imported Upstream version 0.7
[roundcube.git] / SQL / mssql.initial.sql
1 CREATE TABLE [dbo].[cache] (\r
2         [cache_id] [int] IDENTITY (1, 1) NOT NULL ,\r
3         [user_id] [int] NOT NULL ,\r
4         [cache_key] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
5         [created] [datetime] NOT NULL ,\r
6         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
7 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
8 GO\r
9 \r
10 CREATE TABLE [dbo].[cache_index] (\r
11         [user_id] [int] NOT NULL ,\r
12         [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
13         [changed] [datetime] NOT NULL ,\r
14         [valid] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
15         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
16 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
17 GO\r
18 \r
19 CREATE TABLE [dbo].[cache_thread] (\r
20         [user_id] [int] NOT NULL ,\r
21         [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
22         [changed] [datetime] NOT NULL ,\r
23         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
24 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
25 GO\r
26 \r
27 CREATE TABLE [dbo].[cache_messages] (\r
28         [user_id] [int] NOT NULL ,\r
29         [mailbox] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
30         [uid] [int] NOT NULL ,\r
31         [changed] [datetime] NOT NULL ,\r
32         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
33         [flags] [int](1) NOT NULL ,\r
34 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
35 GO\r
36 \r
37 CREATE TABLE [dbo].[contacts] (\r
38         [contact_id] [int] IDENTITY (1, 1) NOT NULL ,\r
39         [user_id] [int] NOT NULL ,\r
40         [changed] [datetime] NOT NULL ,\r
41         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
42         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
43         [email] [varchar] (255) COLLATE Latin1_General_CI_AI NOT NULL ,\r
44         [firstname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
45         [surname] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
46         [vcard] [text] COLLATE Latin1_General_CI_AI NULL ,\r
47         [words] [text] COLLATE Latin1_General_CI_AI NULL \r
48 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
49 GO\r
50 \r
51 CREATE TABLE [dbo].[contactgroups] (\r
52         [contactgroup_id] [int] IDENTITY (1, 1) NOT NULL ,\r
53         [user_id] [int] NOT NULL ,\r
54         [changed] [datetime] NOT NULL ,\r
55         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
56         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL\r
57 ) ON [PRIMARY] \r
58 GO\r
59 \r
60 CREATE TABLE [dbo].[contactgroupmembers] (\r
61         [contactgroup_id] [int] NOT NULL ,\r
62         [contact_id] [int] NOT NULL ,\r
63         [created] [datetime] NOT NULL\r
64 ) ON [PRIMARY] \r
65 GO\r
66 \r
67 CREATE TABLE [dbo].[identities] (\r
68         [identity_id] [int] IDENTITY (1, 1) NOT NULL ,\r
69         [user_id] [int] NOT NULL ,\r
70         [changed] [datetime] NOT NULL ,\r
71         [del] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
72         [standard] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL ,\r
73         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
74         [organization] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
75         [email] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
76         [reply-to] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
77         [bcc] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
78         [signature] [text] COLLATE Latin1_General_CI_AI NULL, \r
79         [html_signature] [char] (1) COLLATE Latin1_General_CI_AI NOT NULL\r
80 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
81 GO\r
82 \r
83 CREATE TABLE [dbo].[session] (\r
84         [sess_id] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
85         [created] [datetime] NOT NULL ,\r
86         [changed] [datetime] NULL ,\r
87         [ip] [varchar] (40) COLLATE Latin1_General_CI_AI NOT NULL ,\r
88         [vars] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
89 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
90 GO\r
91 \r
92 CREATE TABLE [dbo].[users] (\r
93         [user_id] [int] IDENTITY (1, 1) NOT NULL ,\r
94         [username] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
95         [mail_host] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
96         [alias] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
97         [created] [datetime] NOT NULL ,\r
98         [last_login] [datetime] NULL ,\r
99         [language] [varchar] (5) COLLATE Latin1_General_CI_AI NULL ,\r
100         [preferences] [text] COLLATE Latin1_General_CI_AI NULL \r
101 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
102 GO\r
103 \r
104 CREATE TABLE [dbo].[dictionary] (\r
105         [user_id] [int] ,\r
106         [language] [varchar] (5) COLLATE Latin1_General_CI_AI NOT NULL ,\r
107         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
108 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
109 GO\r
110 \r
111 CREATE TABLE [dbo].[searches] (\r
112         [search_id] [int] IDENTITY (1, 1) NOT NULL ,\r
113         [user_id] [int] NOT NULL ,\r
114         [type] [tinyint] NOT NULL ,\r
115         [name] [varchar] (128) COLLATE Latin1_General_CI_AI NOT NULL ,\r
116         [data] [text] COLLATE Latin1_General_CI_AI NOT NULL \r
117 ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]\r
118 GO\r
119 \r
120 ALTER TABLE [dbo].[cache] WITH NOCHECK ADD \r
121          PRIMARY KEY  CLUSTERED \r
122         (\r
123                 [cache_id]\r
124         )  ON [PRIMARY] \r
125 GO\r
126 \r
127 ALTER TABLE [dbo].[cache_index] WITH NOCHECK ADD \r
128          PRIMARY KEY CLUSTERED \r
129         (\r
130                 [user_id],[mailbox]\r
131         ) ON [PRIMARY] \r
132 GO\r
133 \r
134 ALTER TABLE [dbo].[cache_thread] WITH NOCHECK ADD \r
135          PRIMARY KEY CLUSTERED \r
136         (\r
137                 [user_id],[mailbox]\r
138         ) ON [PRIMARY] \r
139 GO\r
140 \r
141 ALTER TABLE [dbo].[cache_messages] WITH NOCHECK ADD \r
142          PRIMARY KEY CLUSTERED \r
143         (\r
144                 [user_id],[mailbox],[uid]\r
145         ) ON [PRIMARY] \r
146 GO\r
147 \r
148 ALTER TABLE [dbo].[contacts] WITH NOCHECK ADD \r
149         CONSTRAINT [PK_contacts_contact_id] PRIMARY KEY  CLUSTERED \r
150         (\r
151                 [contact_id]\r
152         )  ON [PRIMARY] \r
153 GO\r
154 \r
155 ALTER TABLE [dbo].[contactgroups] WITH NOCHECK ADD \r
156         CONSTRAINT [PK_contactgroups_contactgroup_id] PRIMARY KEY CLUSTERED \r
157         (\r
158                 [contactgroup_id]\r
159         )  ON [PRIMARY] \r
160 GO\r
161 \r
162 ALTER TABLE [dbo].[contactgroupmembers] WITH NOCHECK ADD \r
163         CONSTRAINT [PK_contactgroupmembers_id] PRIMARY KEY CLUSTERED \r
164         (\r
165                 [contactgroup_id], [contact_id]\r
166         )  ON [PRIMARY] \r
167 GO\r
168 \r
169 ALTER TABLE [dbo].[identities] WITH NOCHECK ADD \r
170          PRIMARY KEY  CLUSTERED \r
171         (\r
172                 [identity_id]\r
173         )  ON [PRIMARY] \r
174 GO\r
175 \r
176 ALTER TABLE [dbo].[session] WITH NOCHECK ADD \r
177         CONSTRAINT [PK_session_sess_id] PRIMARY KEY  CLUSTERED \r
178         (\r
179                 [sess_id]\r
180         )  ON [PRIMARY] \r
181 GO\r
182 \r
183 ALTER TABLE [dbo].[users] WITH NOCHECK ADD \r
184         CONSTRAINT [PK_users_user_id] PRIMARY KEY  CLUSTERED \r
185         (\r
186                 [user_id]\r
187         )  ON [PRIMARY] \r
188 GO\r
189 \r
190 ALTER TABLE [dbo].[searches] WITH NOCHECK ADD \r
191         CONSTRAINT [PK_searches_search_id] PRIMARY KEY CLUSTERED \r
192         (\r
193                 [search_id]\r
194         ) ON [PRIMARY] \r
195 GO\r
196 \r
197 ALTER TABLE [dbo].[cache] ADD \r
198         CONSTRAINT [DF_cache_user_id] DEFAULT ('0') FOR [user_id],\r
199         CONSTRAINT [DF_cache_cache_key] DEFAULT ('') FOR [cache_key],\r
200         CONSTRAINT [DF_cache_created] DEFAULT (getdate()) FOR [created]\r
201 GO\r
202 \r
203 CREATE  INDEX [IX_cache_user_id] ON [dbo].[cache]([user_id]) ON [PRIMARY]\r
204 GO\r
205 \r
206 CREATE  INDEX [IX_cache_cache_key] ON [dbo].[cache]([cache_key]) ON [PRIMARY]\r
207 GO\r
208 \r
209 CREATE  INDEX [IX_cache_created] ON [dbo].[cache]([created]) ON [PRIMARY]\r
210 GO\r
211 \r
212 ALTER TABLE [dbo].[cache_index] ADD \r
213         CONSTRAINT [DF_cache_index_changed] DEFAULT (getdate()) FOR [changed],\r
214         CONSTRAINT [DF_cache_index_valid] DEFAULT ('0') FOR [valid]\r
215 GO\r
216 \r
217 CREATE  INDEX [IX_cache_index_user_id] ON [dbo].[cache_index]([user_id]) ON [PRIMARY]\r
218 GO\r
219 \r
220 ALTER TABLE [dbo].[cache_thread] ADD \r
221         CONSTRAINT [DF_cache_thread_changed] DEFAULT (getdate()) FOR [changed]\r
222 GO\r
223 \r
224 CREATE  INDEX [IX_cache_thread_user_id] ON [dbo].[cache_thread]([user_id]) ON [PRIMARY]\r
225 GO\r
226 \r
227 ALTER TABLE [dbo].[cache_messages] ADD \r
228         CONSTRAINT [DF_cache_messages_changed] DEFAULT (getdate()) FOR [changed],\r
229         CONSTRAINT [DF_cache_messages_flags] DEFAULT (0) FOR [flags],\r
230 GO\r
231 \r
232 CREATE  INDEX [IX_cache_messages_user_id] ON [dbo].[cache_messages]([user_id]) ON [PRIMARY]\r
233 GO\r
234 \r
235 ALTER TABLE [dbo].[contacts] ADD \r
236         CONSTRAINT [DF_contacts_user_id] DEFAULT (0) FOR [user_id],\r
237         CONSTRAINT [DF_contacts_changed] DEFAULT (getdate()) FOR [changed],\r
238         CONSTRAINT [DF_contacts_del] DEFAULT ('0') FOR [del],\r
239         CONSTRAINT [DF_contacts_name] DEFAULT ('') FOR [name],\r
240         CONSTRAINT [DF_contacts_email] DEFAULT ('') FOR [email],\r
241         CONSTRAINT [DF_contacts_firstname] DEFAULT ('') FOR [firstname],\r
242         CONSTRAINT [DF_contacts_surname] DEFAULT ('') FOR [surname],\r
243         CONSTRAINT [CK_contacts_del] CHECK ([del] = '1' or [del] = '0')\r
244 GO\r
245 \r
246 CREATE  INDEX [IX_contacts_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]\r
247 GO\r
248 \r
249 ALTER TABLE [dbo].[contactgroups] ADD \r
250         CONSTRAINT [DF_contactgroups_user_id] DEFAULT (0) FOR [user_id],\r
251         CONSTRAINT [DF_contactgroups_changed] DEFAULT (getdate()) FOR [changed],\r
252         CONSTRAINT [DF_contactgroups_del] DEFAULT ('0') FOR [del],\r
253         CONSTRAINT [DF_contactgroups_name] DEFAULT ('') FOR [name],\r
254         CONSTRAINT [CK_contactgroups_del] CHECK ([del] = '1' or [del] = '0')\r
255 GO\r
256 \r
257 CREATE  INDEX [IX_contactgroups_user_id] ON [dbo].[contacts]([user_id]) ON [PRIMARY]\r
258 GO\r
259 \r
260 ALTER TABLE [dbo].[contactgroupmembers] ADD \r
261         CONSTRAINT [DF_contactgroupmembers_contactgroup_id] DEFAULT (0) FOR [contactgroup_id],\r
262         CONSTRAINT [DF_contactgroupmembers_contact_id] DEFAULT (0) FOR [contact_id],\r
263         CONSTRAINT [DF_contactgroupmembers_created] DEFAULT (getdate()) FOR [created]\r
264 GO\r
265 \r
266 CREATE  INDEX [IX_contactgroupmembers_contact_id] ON [dbo].[contactgroupmembers]([contact_id]) ON [PRIMARY]\r
267 GO\r
268 \r
269 ALTER TABLE [dbo].[identities] ADD \r
270         CONSTRAINT [DF_identities_user] DEFAULT ('0') FOR [user_id],\r
271         CONSTRAINT [DF_identities_del] DEFAULT ('0') FOR [del],\r
272         CONSTRAINT [DF_identities_standard] DEFAULT ('0') FOR [standard],\r
273         CONSTRAINT [DF_identities_name] DEFAULT ('') FOR [name],\r
274         CONSTRAINT [DF_identities_organization] DEFAULT ('') FOR [organization],\r
275         CONSTRAINT [DF_identities_email] DEFAULT ('') FOR [email],\r
276         CONSTRAINT [DF_identities_reply] DEFAULT ('') FOR [reply-to],\r
277         CONSTRAINT [DF_identities_bcc] DEFAULT ('') FOR [bcc],\r
278         CONSTRAINT [DF_identities_html_signature] DEFAULT ('0') FOR [html_signature],\r
279          CHECK ([standard] = '1' or [standard] = '0'),\r
280          CHECK ([del] = '1' or [del] = '0')\r
281 GO\r
282 \r
283 CREATE  INDEX [IX_identities_user_id] ON [dbo].[identities]([user_id]) ON [PRIMARY]\r
284 GO\r
285 \r
286 ALTER TABLE [dbo].[session] ADD \r
287         CONSTRAINT [DF_session_sess_id] DEFAULT ('') FOR [sess_id],\r
288         CONSTRAINT [DF_session_created] DEFAULT (getdate()) FOR [created],\r
289         CONSTRAINT [DF_session_ip] DEFAULT ('') FOR [ip]\r
290 GO\r
291 \r
292 CREATE  INDEX [IX_session_changed] ON [dbo].[session]([changed]) ON [PRIMARY]\r
293 GO\r
294 \r
295 ALTER TABLE [dbo].[users] ADD \r
296         CONSTRAINT [DF_users_username] DEFAULT ('') FOR [username],\r
297         CONSTRAINT [DF_users_mail_host] DEFAULT ('') FOR [mail_host],\r
298         CONSTRAINT [DF_users_alias] DEFAULT ('') FOR [alias],\r
299         CONSTRAINT [DF_users_created] DEFAULT (getdate()) FOR [created]\r
300 GO\r
301 \r
302 CREATE  UNIQUE INDEX [IX_users_username] ON [dbo].[users]([username],[mail_host]) ON [PRIMARY]\r
303 GO\r
304 \r
305 CREATE  INDEX [IX_users_alias] ON [dbo].[users]([alias]) ON [PRIMARY]\r
306 GO\r
307 \r
308 CREATE  UNIQUE INDEX [IX_dictionary_user_language] ON [dbo].[dictionary]([user_id],[language]) ON [PRIMARY]\r
309 GO\r
310 \r
311 ALTER TABLE [dbo].[searches] ADD \r
312         CONSTRAINT [DF_searches_user] DEFAULT (0) FOR [user_id],\r
313         CONSTRAINT [DF_searches_type] DEFAULT (0) FOR [type],\r
314 GO\r
315 \r
316 CREATE UNIQUE INDEX [IX_searches_user_type_name] ON [dbo].[searches]([user_id],[type],[name]) ON [PRIMARY]\r
317 GO\r
318 \r
319 ALTER TABLE [dbo].[identities] ADD CONSTRAINT [FK_identities_user_id] \r
320     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
321     ON DELETE CASCADE ON UPDATE CASCADE\r
322 GO\r
323 \r
324 ALTER TABLE [dbo].[contacts] ADD CONSTRAINT [FK_contacts_user_id]\r
325     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
326     ON DELETE CASCADE ON UPDATE CASCADE\r
327 GO\r
328 \r
329 ALTER TABLE [dbo].[contactgroups] ADD CONSTRAINT [FK_contactgroups_user_id]\r
330     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
331     ON DELETE CASCADE ON UPDATE CASCADE\r
332 GO\r
333 \r
334 ALTER TABLE [dbo].[cache] ADD CONSTRAINT [FK_cache_user_id]\r
335     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
336     ON DELETE CASCADE ON UPDATE CASCADE\r
337 GO\r
338 \r
339 ALTER TABLE [dbo].[cache_index] ADD CONSTRAINT [FK_cache_index_user_id]\r
340     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
341     ON DELETE CASCADE ON UPDATE CASCADE\r
342 GO\r
343 \r
344 ALTER TABLE [dbo].[cache_thread] ADD CONSTRAINT [FK_cache_thread_user_id]\r
345     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
346     ON DELETE CASCADE ON UPDATE CASCADE\r
347 GO\r
348 \r
349 ALTER TABLE [dbo].[cache_messages] ADD CONSTRAINT [FK_cache_messages_user_id]\r
350     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
351     ON DELETE CASCADE ON UPDATE CASCADE\r
352 GO\r
353 \r
354 ALTER TABLE [dbo].[contactgroupmembers] ADD CONSTRAINT [FK_contactgroupmembers_contactgroup_id]\r
355     FOREIGN KEY ([contactgroup_id]) REFERENCES [dbo].[contactgroups] ([contactgroup_id])\r
356     ON DELETE CASCADE ON UPDATE CASCADE\r
357 GO\r
358 \r
359 ALTER TABLE [dbo].[searches] ADD CONSTRAINT [FK_searches_user_id]\r
360     FOREIGN KEY ([user_id]) REFERENCES [dbo].[users] ([user_id])\r
361     ON DELETE CASCADE ON UPDATE CASCADE\r
362 GO\r
363 \r
364 -- Use trigger instead of foreign key (#1487112)\r
365 -- "Introducing FOREIGN KEY constraint ... may cause cycles or multiple cascade paths."\r
366 CREATE TRIGGER [contact_delete_member] ON [dbo].[contacts]\r
367     AFTER DELETE AS\r
368     DELETE FROM [dbo].[contactgroupmembers]\r
369     WHERE [contact_id] IN (SELECT [contact_id] FROM deleted)\r
370 GO\r
371 \r