tizen beta release
[platform/core/pim/contacts-service.git] / schema.sql
1 --
2 -- Contacts Service
3 --
4 -- Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
5 --
6 -- Contact: Youngjae Shin <yj99.shin@samsung.com>
7 --
8 -- Licensed under the Apache License, Version 2.0 (the "License");
9 -- you may not use this file except in compliance with the License.
10 -- You may obtain a copy of the License at
11 --
12 -- http://www.apache.org/licenses/LICENSE-2.0
13 --
14 -- Unless required by applicable law or agreed to in writing, software
15 -- distributed under the License is distributed on an "AS IS" BASIS,
16 -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 -- See the License for the specific language governing permissions and
18 -- limitations under the License.
19 --
20
21 --PRAGMA journal_mode = PERSIST;
22 --PRAGMA journal_mode = TRUNCATE;
23
24 CREATE TABLE addressbooks
25 (
26 addrbook_id INTEGER PRIMARY KEY AUTOINCREMENT,
27 addrbook_name TEXT,
28 acc_id INTEGER,
29 acc_type INTEGER DEFAULT 0,
30 mode INTEGER, -- permission
31 last_sync_ver INTEGER
32 );
33 --CREATE TRIGGER trg_addressbook_sync AFTER UPDATE OF last_sync_ver ON addressbooks
34 -- BEGIN
35 --   DELETE FROM deleteds WHERE addrbook_id = new.addrbook_id and deleted_time <= new.last_sync_ver;
36 -- END;
37 CREATE TRIGGER trg_addressbook_del AFTER DELETE ON addressbooks
38  BEGIN
39    DELETE FROM groups WHERE addrbook_id = old.addrbook_id;
40    DELETE FROM contacts WHERE addrbook_id = old.addrbook_id;
41    DELETE FROM deleteds WHERE addrbook_id = old.addrbook_id;
42  END;
43
44 CREATE TABLE contacts
45 (
46 contact_id INTEGER PRIMARY KEY AUTOINCREMENT,
47 addrbook_id INTEGER NOT NULL DEFAULT 0,
48 default_num INTEGER,
49 default_email INTEGER,
50 default_addr INTEGER,
51 is_favorite INTEGER DEFAULT 0,
52 created_ver INTEGER NOT NULL,
53 changed_ver INTEGER NOT NULL,
54 changed_time INTEGER NOT NULL,
55 outgoing_count INTEGER DEFAULT 0,
56 uid TEXT,
57 ringtone TEXT,
58 note TEXT,
59 image0 TEXT, -- normal image
60 image1 TEXT, -- full image
61 person_id INTEGER
62 );
63 CREATE INDEX contacts_ver_idx ON contacts(changed_ver);
64 CREATE INDEX contacts_person_idx ON contacts(person_id);
65 CREATE TRIGGER trg_contacts_del AFTER DELETE ON contacts
66  BEGIN
67    DELETE FROM data WHERE contact_id = old.contact_id;
68    DELETE FROM group_relations WHERE old.addrbook_id != -1 AND contact_id = old.contact_id;
69    DELETE FROM favorites WHERE type = 0 AND related_id = old.contact_id;
70  END;
71
72 CREATE TABLE deleteds
73 (
74 contact_id INTEGER,
75 addrbook_id INTEGER,
76 deleted_ver INTEGER
77 );
78 CREATE INDEX deleteds_ver_idx ON deleteds(deleted_ver);
79
80 CREATE TABLE cts_version
81 (
82 ver INTEGER PRIMARY KEY
83 );
84 INSERT INTO cts_version VALUES(0);
85
86 CREATE TABLE sim_services
87 (
88 id INTEGER PRIMARY KEY AUTOINCREMENT,
89 type INTEGER,
90 name TEXT,
91 number TEXT
92 );
93
94 CREATE TABLE custom_types
95 (
96 id INTEGER PRIMARY KEY AUTOINCREMENT,
97 class INTEGER,
98 name TEXT,
99 UNIQUE(class, name)
100 );
101 CREATE INDEX idx_custom_type ON custom_types(class, name);
102 CREATE TRIGGER trg_custom_types_del AFTER DELETE ON custom_types
103  BEGIN
104          UPDATE data SET data1 = 0 WHERE old.class = 1 AND number_type = old.id AND datatype = 8;
105  END;
106
107 CREATE TABLE data
108 (
109 id INTEGER PRIMARY KEY AUTOINCREMENT,
110 contact_id INTEGER NOT NULL,
111 datatype INTEGER NOT NULL,
112 data1 INTEGER,
113 data2 TEXT,
114 data3 TEXT,
115 data4 TEXT,
116 data5 TEXT,
117 data6 TEXT,
118 data7 TEXT,
119 data8 TEXT,
120 data9 TEXT,
121 data10 TEXT,
122 person_id INTEGER
123 );
124 CREATE TRIGGER trg_data_number_del AFTER DELETE ON data
125  WHEN old.datatype = 8
126  BEGIN
127    DELETE FROM favorites WHERE  type = 1 AND related_id = old.id;
128    DELETE FROM speeddials WHERE  number_id = old.id;
129  END;
130 CREATE INDEX data_contact_idx ON data(contact_id);
131 CREATE INDEX data_contact_idx2 ON data(datatype, contact_id);
132 CREATE INDEX data_idx1 ON data(data1);
133 CREATE INDEX data_idx2 ON data(data2);
134 CREATE INDEX data_idx3 ON data(data3);
135 CREATE INDEX data_idx4 ON data(data4);
136 CREATE INDEX data_idx5 ON data(data5);
137 CREATE INDEX data_idx6 ON data(data6);
138 CREATE INDEX data_idx7 ON data(data7);
139 CREATE INDEX data_idx8 ON data(data8);
140 CREATE INDEX data_idx9 ON data(data9);
141 CREATE INDEX data_idx10 ON data(data10);
142 CREATE INDEX data_person_idx ON data(person_id);
143
144 CREATE TABLE groups
145 (
146 group_id INTEGER PRIMARY KEY AUTOINCREMENT,
147 addrbook_id INTEGER,
148 group_name TEXT,
149 ringtone TEXT,
150 UNIQUE(addrbook_id, group_name)
151 );
152 CREATE TRIGGER trg_groups_del AFTER DELETE ON groups
153  BEGIN
154    DELETE FROM group_relations WHERE group_id = old.group_id;
155  END;
156
157 CREATE TABLE group_relations
158 (
159 group_id INTEGER NOT NULL,
160 contact_id INTEGER NOT NULL,
161 UNIQUE(group_id, contact_id)
162 );
163 CREATE INDEX group_idx1 ON group_relations(contact_id);
164
165 CREATE TABLE speeddials
166 (
167 speed_num INTEGER PRIMARY KEY NOT NULL,
168 number_id INTEGER UNIQUE
169 );
170
171 CREATE TABLE favorites
172 (
173 id INTEGER PRIMARY KEY AUTOINCREMENT,
174 type INTEGER NOT NULL,
175 related_id INTEGER NOT NULL,
176 favorite_prio REAL,
177 UNIQUE(type, related_id)
178 );
179 CREATE INDEX idx1_favorites ON favorites(favorite_prio);
180 CREATE INDEX idx2_favorites ON favorites(type, related_id);
181 CREATE TRIGGER trg_favorite_del BEFORE DELETE ON favorites
182  BEGIN
183    UPDATE data SET data3 = 0 WHERE old.type = 1 AND id = old.related_id AND datatype = 8;
184    UPDATE contacts SET is_favorite = 0 WHERE old.type = 0 AND contact_id = old.related_id;
185  END;
186 CREATE TRIGGER trg_favorite_insert AFTER INSERT ON favorites
187  BEGIN
188    UPDATE data SET data3 = 1 WHERE new.type = 1 AND id = new.related_id AND datatype = 8;
189    UPDATE contacts SET is_favorite = 1 WHERE new.type = 0 AND contact_id = new.related_id;
190  END;
191
192 CREATE TABLE phonelogs
193 (
194 id INTEGER PRIMARY KEY AUTOINCREMENT,
195 number TEXT,
196 normal_num TEXT,
197 related_id INTEGER, --contact_id
198 log_type INTEGER,
199 log_time INTEGER,
200 data1 INTEGER, --duration, message_id
201 data2 TEXT  -- short message
202 );
203 CREATE INDEX idx1_phonelogs ON phonelogs(log_type);
204 CREATE INDEX idx2_phonelogs ON phonelogs(log_time);
205 CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
206  WHEN old.log_type = 2 OR old.log_type = 4
207  BEGIN
208    DELETE FROM phonelog_accumulation WHERE log_time < (old.log_time - 3456000); -- 40 days
209    INSERT INTO phonelog_accumulation VALUES(NULL, 1, old.log_time, old.data1);
210  END;
211
212 CREATE TABLE phonelog_accumulation
213 (
214 id INTEGER PRIMARY KEY AUTOINCREMENT,
215 log_cnt INTEGER,
216 log_time INTEGER,
217 duration INTEGER
218 );
219 INSERT INTO phonelog_accumulation VALUES(1, 0, NULL, 0);
220 INSERT INTO phonelog_accumulation VALUES(2, 0, NULL, 0); --total