4 -- Copyright (c) 2010 - 2012 Samsung Electronics Co., Ltd. All rights reserved.
6 -- Contact: Jongwon Lee <gogosing.lee@samsung.com>
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
12 -- http://www.apache.org/licenses/LICENSE-2.0
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.
21 --PRAGMA journal_mode = PERSIST;
22 --PRAGMA journal_mode = TRUNCATE;
26 person_id INTEGER PRIMARY KEY AUTOINCREMENT,
27 name_contact_id INTEGER NOT NULL,
28 has_phonenumber INTEGER,
30 created_ver INTEGER NOT NULL,
31 changed_ver INTEGER NOT NULL,
35 image_thumbnail_path TEXT,
43 CREATE TRIGGER trg_person_del AFTER DELETE ON persons
45 DELETE FROM favorites WHERE person_id = old.person_id;
46 SELECT _PERSON_DELETE_(old.person_id);
49 CREATE TABLE addressbooks
51 addressbook_id INTEGER PRIMARY KEY AUTOINCREMENT,
52 addressbook_name TEXT NOT NULL,
54 mode INTEGER, -- permission
55 last_sync_ver INTEGER,
56 UNIQUE(addressbook_name)
59 insert into addressbooks(addressbook_id, addressbook_name, mode, account_id) values(0, 'http://tizen.org/addressbook/phone', 0, 0);
61 CREATE TRIGGER trg_addressbook_del AFTER DELETE ON addressbooks
63 DELETE FROM groups WHERE addressbook_id = old.addressbook_id;
64 UPDATE contacts SET deleted = 1, person_id = 0, changed_ver = ((SELECT ver FROM cts_version) + 1) WHERE addressbook_id = old.addressbook_id;
65 DELETE FROM my_profiles WHERE addressbook_id = old.addressbook_id;
66 DELETE FROM contact_deleteds WHERE addressbook_id = old.addressbook_id;
67 DELETE FROM group_deleteds WHERE addressbook_id = old.addressbook_id;
72 contact_id INTEGER PRIMARY KEY AUTOINCREMENT,
73 person_id INTEGER NOT NULL,
74 addressbook_id INTEGER NOT NULL DEFAULT 0,
75 has_phonenumber INTEGER,
77 is_favorite INTEGER DEFAULT 0,
78 deleted INTEGER DEFAULT 0,
80 reverse_display_name TEXT,
81 display_name_source INTEGER,
82 display_name_language INTEGER,
83 reverse_display_name_language INTEGER,
85 reverse_sort_name TEXT,
86 sortkey TEXT COLLATE NOCASE,
87 reverse_sortkey TEXT COLLATE NOCASE,
88 created_ver INTEGER NOT NULL,
89 changed_ver INTEGER NOT NULL,
90 changed_time INTEGER NOT NULL,
91 link_mode INTEGER NOT NULL,
92 image_changed_ver INTEGER NOT NULL,
97 image_thumbnail_path TEXT,
101 CREATE INDEX contacts_idx1 ON contacts(changed_ver);
102 CREATE INDEX contacts_idx2 ON contacts(person_id);
103 CREATE INDEX contacts_idx3 ON contacts(display_name_language, sortkey);
104 CREATE INDEX contacts_idx4 ON contacts(reverse_display_name_language, reverse_sortkey);
105 CREATE INDEX contacts_idx5 ON contacts(addressbook_id);
107 -- There are three case of deleting contact logically
108 -- Case 1 : delete contact
109 -- Case 2 : delete addressbook
110 -- Case 3 : delete person
111 -- In all Case, the deleted contacts(deleted=1) are really deleted in the background.
112 CREATE TRIGGER trg_contacts_del AFTER DELETE ON contacts
114 DELETE FROM data WHERE contact_id = old.contact_id AND is_my_profile = 0;
115 DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
116 DELETE FROM activities WHERE contact_id = old.contact_id;
117 DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
118 DELETE FROM search_index WHERE contact_id = old.contact_id;
119 DELETE FROM name_lookup WHERE contact_id = old.contact_id;
120 DELETE FROM phone_lookup WHERE contact_id = old.contact_id;
121 UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
124 -- It is triggered during really deleting contact in the background (deleted = 1).
125 -- Deleted version(changed_ver) is already set when updating deleted field as 1.
126 CREATE TRIGGER trg_contacts_del2 AFTER DELETE ON contacts
127 WHEN old.addressbook_id = (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id) AND old.deleted = 1
129 INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, old.created_ver, old.changed_ver);
132 -- CREATE TRIGGER trg_contacts_del3 AFTER DELETE ON contacts
133 -- WHEN old.addressbook_id = (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id) AND old.deleted = 0
135 -- INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
138 CREATE TRIGGER trg_contacts_update AFTER UPDATE ON contacts
141 DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
142 DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
143 UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
146 CREATE TABLE contact_deleteds
148 contact_id INTEGER PRIMARY KEY,
149 addressbook_id INTEGER NOT NULL,
150 created_ver INTEGER NOT NULL,
151 deleted_ver INTEGER NOT NULL
153 CREATE INDEX contact_deleteds_idx1 ON contact_deleteds(deleted_ver);
155 CREATE TABLE cts_version
157 ver INTEGER PRIMARY KEY
160 INSERT INTO cts_version VALUES(0);
164 id INTEGER PRIMARY KEY AUTOINCREMENT,
171 id INTEGER PRIMARY KEY AUTOINCREMENT,
172 contact_id INTEGER NOT NULL,
173 datatype INTEGER NOT NULL,
174 is_my_profile INTEGER,
175 is_primary_default INTEGER,
191 CREATE TRIGGER trg_data_del AFTER DELETE ON data
193 SELECT _DATA_DELETE_(old.id, old.datatype);
196 CREATE TRIGGER trg_data_image_del AFTER DELETE ON data
197 WHEN old.datatype = 13
199 SELECT _DATA_IMAGE_DELETE_(old.data3);
202 CREATE TRIGGER trg_data_company_del AFTER DELETE ON data
203 WHEN old.datatype = 6
205 SELECT _DATA_COMPANY_DELETE_(old.data8);
208 CREATE TRIGGER trg_data_number_del AFTER DELETE ON data
209 WHEN old.datatype = 8
211 DELETE FROM speeddials WHERE number_id = old.id;
214 CREATE INDEX data_contact_idx1 ON data(contact_id);
215 CREATE INDEX data_contact_idx2 ON data(datatype, contact_id);
216 CREATE INDEX data_idx1 ON data(data1);
217 CREATE INDEX data_idx2 ON data(data2);
218 CREATE INDEX data_idx3 ON data(data3);
219 CREATE INDEX data_idx4 ON data(data4);
220 CREATE INDEX data_idx5 ON data(data5);
221 CREATE INDEX data_idx6 ON data(data6);
222 CREATE INDEX data_idx7 ON data(data7);
223 CREATE INDEX data_idx8 ON data(data8);
224 CREATE INDEX data_idx9 ON data(data9);
225 CREATE INDEX data_idx10 ON data(data10);
229 group_id INTEGER PRIMARY KEY AUTOINCREMENT,
230 addressbook_id INTEGER,
233 is_read_only INTEGER DEFAULT 0,
234 created_ver INTEGER NOT NULL,
235 changed_ver INTEGER NOT NULL,
238 image_thumbnail_path TEXT,
240 member_changed_ver INTEGER,
244 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
245 VALUES(0, 'Co-workers', 'coworkers', 0, 0, 0, 1);
246 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
247 VALUES(0, 'Family', 'family', 0, 0, 0, 2);
248 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
249 VALUES(0, 'Friends', 'friends',0, 0, 0, 3);
251 CREATE TRIGGER trg_groups_del AFTER DELETE ON groups
253 UPDATE contacts SET changed_ver=((SELECT ver FROM cts_version) + 1) WHERE deleted = 0 AND contact_id IN (SELECT contact_id FROM group_relations WHERE group_id=old.group_id);
254 DELETE FROM group_relations WHERE group_id = old.group_id;
255 SELECT _GROUP_DELETE_(old.image_thumbnail_path);
258 CREATE TRIGGER trg_groups_del2 AFTER DELETE ON groups
259 WHEN old.addressbook_id IN (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id)
261 INSERT INTO group_deleteds VALUES(old.group_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
264 CREATE TABLE group_deleteds
266 group_id INTEGER PRIMARY KEY,
267 addressbook_id INTEGER NOT NULL,
268 created_ver INTEGER NOT NULL,
269 deleted_ver INTEGER NOT NULL
272 CREATE INDEX group_deleteds_idx1 ON group_deleteds(deleted_ver);
274 CREATE TABLE group_relations
276 group_id INTEGER NOT NULL,
277 contact_id INTEGER NOT NULL,
278 ver INTEGER NOT NULL,
279 deleted INTEGER DEFAULT 0,
280 UNIQUE(group_id, contact_id)
282 CREATE INDEX groups_idx1 ON group_relations(contact_id);
285 CREATE TABLE speeddials
287 speed_number INTEGER PRIMARY KEY NOT NULL,
288 number_id INTEGER UNIQUE
291 CREATE TABLE favorites
293 person_id INTEGER PRIMARY KEY,
296 CREATE INDEX favorites_idx1 ON favorites(favorite_prio);
297 CREATE INDEX favorites_idx2 ON favorites(person_id);
300 --CREATE TRIGGER trg_favorites_del BEFORE DELETE ON favorites
302 -- UPDATE contacts SET is_favorite = 0 WHERE person_id = old.person_id;
304 --CREATE TRIGGER trg_favorites_insert AFTER INSERT ON favorites
306 -- UPDATE contacts SET is_favorite = 1 WHERE person_id = new.person_id;
310 CREATE TABLE phonelogs
312 id INTEGER PRIMARY KEY AUTOINCREMENT,
315 person_id INTEGER, --person_id
318 data1 INTEGER, --duration, message_id
319 data2 TEXT -- short message
322 CREATE INDEX phonelogs_idx1 ON phonelogs(log_type);
323 CREATE INDEX phonelogs_idx2 ON phonelogs(log_time);
324 CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
326 SELECT _PHONE_LOG_DELETE_(old.id);
329 --CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
330 -- WHEN old.log_type = 2 OR old.log_type = 4
332 -- DELETE FROM phonelog_accumulation WHERE log_time < (old.log_time - 3456000); -- 40 days
333 -- INSERT INTO phonelog_accumulation VALUES(NULL, 1, old.log_time, old.data1);
336 --CREATE TABLE phonelog_accumulation
338 -- id INTEGER PRIMARY KEY AUTOINCREMENT,
343 --INSERT INTO phonelog_accumulation VALUES(1, 0, NULL, 0);
344 --INSERT INTO phonelog_accumulation VALUES(2, 0, NULL, 0); --total
346 CREATE TABLE phonelog_stat
348 log_type INTEGER PRIMARY KEY,
352 CREATE TRIGGER trg_phonelogs_insert AFTER INSERT ON phonelogs
354 INSERT OR REPLACE INTO phonelog_stat values(new.log_type, coalesce((SELECT log_count+1 FROM phonelog_stat WHERE log_type=new.log_type), 1));
357 CREATE TABLE contact_stat
359 id INTEGER PRIMARY KEY AUTOINCREMENT,
365 CREATE TABLE activities
367 id INTEGER PRIMARY KEY AUTOINCREMENT,
368 contact_id INTEGER NOT NULL,
372 service_operation TEXT,
376 CREATE TABLE activity_photos
378 id INTEGER PRIMARY KEY AUTOINCREMENT,
379 activity_id INTEGER NOT NULL,
384 CREATE TRIGGER trg_activities_insert AFTER INSERT ON activities
386 UPDATE persons SET status=(SELECT status FROM activities WHERE contact_id IN (SELECT contact_id FROM contacts WHERE person_id = (select person_id FROM contacts WHERE contact_id = new.contact_id)) ORDER BY timestamp DESC LIMIT 1) WHERE person_id = (SELECT person_id FROM contacts WHERE contact_id = new.contact_id);
389 CREATE TRIGGER trg_activities_delete AFTER DELETE ON activities
391 UPDATE persons SET status=(SELECT status FROM activities WHERE contact_id IN (SELECT contact_id FROM contacts WHERE person_id = (select person_id FROM contacts WHERE contact_id = old.contact_id)) ORDER BY timestamp DESC LIMIT 1) WHERE person_id = (SELECT person_id FROM contacts WHERE contact_id = old.contact_id);
392 DELETE FROM activity_photos WHERE activity_id = old.id;
395 CREATE VIRTUAL TABLE search_index USING FTS4
397 contact_id INTEGER NOT NULL,
404 CREATE TABLE name_lookup
406 data_id INTEGER NOT NULL,
407 contact_id INTEGER NOT NULL,
412 CREATE TABLE phone_lookup
414 data_id INTEGER NOT NULL,
415 contact_id INTEGER NOT NULL,
421 CREATE TABLE my_profiles
423 my_profile_id INTEGER PRIMARY KEY AUTOINCREMENT,
424 addressbook_id INTEGER NOT NULL DEFAULT 0,
426 reverse_display_name TEXT,
427 created_ver INTEGER NOT NULL,
428 changed_ver INTEGER NOT NULL,
429 changed_time INTEGER NOT NULL,
431 image_thumbnail_path TEXT,
432 deleted INTEGER DEFAULT 0,
433 UNIQUE(addressbook_id)
436 CREATE TRIGGER trg_my_profiles_del AFTER DELETE ON my_profiles
438 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;
441 CREATE TRIGGER trg_my_profile_update AFTER UPDATE ON my_profiles
444 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;