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,
34 image_thumbnail_path TEXT,
42 CREATE TRIGGER trg_person_del AFTER DELETE ON persons
44 DELETE FROM favorites WHERE person_id = old.person_id;
45 SELECT _PERSON_DELETE_(old.person_id);
48 CREATE TABLE addressbooks
50 addressbook_id INTEGER PRIMARY KEY AUTOINCREMENT,
51 addressbook_name TEXT NOT NULL,
53 mode INTEGER, -- permission
54 last_sync_ver INTEGER,
55 UNIQUE(addressbook_name)
58 insert into addressbooks(addressbook_id, addressbook_name, mode, account_id) values(0, 'http://tizen.org/addressbook/phone', 0, 0);
60 CREATE TRIGGER trg_addressbook_del AFTER DELETE ON addressbooks
62 DELETE FROM groups WHERE addressbook_id = old.addressbook_id;
63 UPDATE contacts SET deleted = 1, person_id = 0, changed_ver = ((SELECT ver FROM cts_version) + 1) WHERE addressbook_id = old.addressbook_id;
64 DELETE FROM my_profiles WHERE addressbook_id = old.addressbook_id;
65 DELETE FROM contact_deleteds WHERE addressbook_id = old.addressbook_id;
66 DELETE FROM group_deleteds WHERE addressbook_id = old.addressbook_id;
71 contact_id INTEGER PRIMARY KEY AUTOINCREMENT,
72 person_id INTEGER NOT NULL,
73 addressbook_id INTEGER NOT NULL DEFAULT 0,
74 has_phonenumber INTEGER,
76 is_favorite INTEGER DEFAULT 0,
77 deleted INTEGER DEFAULT 0,
79 reverse_display_name TEXT,
80 display_name_source INTEGER,
81 display_name_language INTEGER,
82 reverse_display_name_language INTEGER,
84 reverse_sort_name TEXT,
85 sortkey TEXT COLLATE NOCASE,
86 reverse_sortkey TEXT COLLATE NOCASE,
87 created_ver INTEGER NOT NULL,
88 changed_ver INTEGER NOT NULL,
89 changed_time INTEGER NOT NULL,
90 link_mode INTEGER NOT NULL,
91 image_changed_ver INTEGER NOT NULL,
95 image_thumbnail_path TEXT,
99 CREATE INDEX contacts_idx1 ON contacts(changed_ver);
100 CREATE INDEX contacts_idx2 ON contacts(person_id);
101 CREATE INDEX contacts_idx3 ON contacts(display_name_language, sortkey);
102 CREATE INDEX contacts_idx4 ON contacts(reverse_display_name_language, reverse_sortkey);
103 CREATE INDEX contacts_idx5 ON contacts(addressbook_id);
105 -- There are three case of deleting contact logically
106 -- Case 1 : delete contact
107 -- Case 2 : delete addressbook
108 -- Case 3 : delete person
109 -- In all Case, the deleted contacts(deleted=1) are really deleted in the background.
110 CREATE TRIGGER trg_contacts_del AFTER DELETE ON contacts
112 DELETE FROM data WHERE contact_id = old.contact_id AND is_my_profile = 0;
113 DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
114 DELETE FROM activities WHERE contact_id = old.contact_id;
115 DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
116 DELETE FROM search_index WHERE contact_id = old.contact_id;
117 DELETE FROM name_lookup WHERE contact_id = old.contact_id;
118 DELETE FROM phone_lookup WHERE contact_id = old.contact_id;
119 UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
122 -- It is triggered during really deleting contact in the background (deleted = 1).
123 -- Deleted version(changed_ver) is already set when updating deleted field as 1.
124 CREATE TRIGGER trg_contacts_del2 AFTER DELETE ON contacts
125 WHEN old.addressbook_id = (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id) AND old.deleted = 1
127 INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, old.created_ver, old.changed_ver);
130 -- CREATE TRIGGER trg_contacts_del3 AFTER DELETE ON contacts
131 -- WHEN old.addressbook_id = (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id) AND old.deleted = 0
133 -- INSERT INTO contact_deleteds VALUES(old.contact_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
136 CREATE TRIGGER trg_contacts_update AFTER UPDATE ON contacts
139 DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
140 DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
141 UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
144 CREATE TABLE contact_deleteds
146 contact_id INTEGER PRIMARY KEY,
147 addressbook_id INTEGER NOT NULL,
148 created_ver INTEGER NOT NULL,
149 deleted_ver INTEGER NOT NULL
151 CREATE INDEX contact_deleteds_idx1 ON contact_deleteds(deleted_ver);
153 CREATE TABLE cts_version
155 ver INTEGER PRIMARY KEY
158 INSERT INTO cts_version VALUES(0);
162 id INTEGER PRIMARY KEY AUTOINCREMENT,
169 id INTEGER PRIMARY KEY AUTOINCREMENT,
170 contact_id INTEGER NOT NULL,
171 datatype INTEGER NOT NULL,
172 is_my_profile INTEGER,
173 is_primary_default INTEGER,
189 CREATE TRIGGER trg_data_del AFTER DELETE ON data
191 SELECT _DATA_DELETE_(old.id, old.datatype);
194 CREATE TRIGGER trg_data_image_del AFTER DELETE ON data
195 WHEN old.datatype = 13
197 SELECT _DATA_IMAGE_DELETE_(old.data3);
200 CREATE TRIGGER trg_data_company_del AFTER DELETE ON data
201 WHEN old.datatype = 6
203 SELECT _DATA_COMPANY_DELETE_(old.data8);
206 CREATE TRIGGER trg_data_number_del AFTER DELETE ON data
207 WHEN old.datatype = 8
209 DELETE FROM speeddials WHERE number_id = old.id;
212 CREATE INDEX data_contact_idx1 ON data(contact_id);
213 CREATE INDEX data_contact_idx2 ON data(datatype, contact_id);
214 CREATE INDEX data_idx1 ON data(data1);
215 CREATE INDEX data_idx2 ON data(data2);
216 CREATE INDEX data_idx3 ON data(data3);
217 CREATE INDEX data_idx4 ON data(data4);
218 CREATE INDEX data_idx5 ON data(data5);
219 CREATE INDEX data_idx6 ON data(data6);
220 CREATE INDEX data_idx7 ON data(data7);
221 CREATE INDEX data_idx8 ON data(data8);
222 CREATE INDEX data_idx9 ON data(data9);
223 CREATE INDEX data_idx10 ON data(data10);
227 group_id INTEGER PRIMARY KEY AUTOINCREMENT,
228 addressbook_id INTEGER,
231 is_read_only INTEGER DEFAULT 0,
232 created_ver INTEGER NOT NULL,
233 changed_ver INTEGER NOT NULL,
236 image_thumbnail_path TEXT,
237 member_changed_ver INTEGER,
241 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
242 VALUES(0, 'Co-workers', 'coworkers', 0, 0, 0, 1);
243 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
244 VALUES(0, 'Family', 'family', 0, 0, 0, 2);
245 INSERT INTO groups(addressbook_id, group_name, extra_data, is_read_only, created_ver, changed_ver, group_prio)
246 VALUES(0, 'Friends', 'friends',0, 0, 0, 3);
248 CREATE TRIGGER trg_groups_del AFTER DELETE ON groups
250 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);
251 DELETE FROM group_relations WHERE group_id = old.group_id;
252 SELECT _GROUP_DELETE_(old.image_thumbnail_path);
255 CREATE TRIGGER trg_groups_del2 AFTER DELETE ON groups
256 WHEN old.addressbook_id IN (SELECT addressbook_id from addressbooks WHERE addressbook_id = old.addressbook_id)
258 INSERT INTO group_deleteds VALUES(old.group_id, old.addressbook_id, old.created_ver, (SELECT ver FROM cts_version) + 1);
261 CREATE TABLE group_deleteds
263 group_id INTEGER PRIMARY KEY,
264 addressbook_id INTEGER NOT NULL,
265 created_ver INTEGER NOT NULL,
266 deleted_ver INTEGER NOT NULL
269 CREATE INDEX group_deleteds_idx1 ON group_deleteds(deleted_ver);
271 CREATE TABLE group_relations
273 group_id INTEGER NOT NULL,
274 contact_id INTEGER NOT NULL,
275 ver INTEGER NOT NULL,
276 deleted INTEGER DEFAULT 0,
277 UNIQUE(group_id, contact_id)
279 CREATE INDEX groups_idx1 ON group_relations(contact_id);
282 CREATE TABLE speeddials
284 speed_number INTEGER PRIMARY KEY NOT NULL,
285 number_id INTEGER UNIQUE
288 CREATE TABLE favorites
290 person_id INTEGER PRIMARY KEY,
293 CREATE INDEX favorites_idx1 ON favorites(favorite_prio);
294 CREATE INDEX favorites_idx2 ON favorites(person_id);
297 --CREATE TRIGGER trg_favorites_del BEFORE DELETE ON favorites
299 -- UPDATE contacts SET is_favorite = 0 WHERE person_id = old.person_id;
301 --CREATE TRIGGER trg_favorites_insert AFTER INSERT ON favorites
303 -- UPDATE contacts SET is_favorite = 1 WHERE person_id = new.person_id;
307 CREATE TABLE phonelogs
309 id INTEGER PRIMARY KEY AUTOINCREMENT,
312 person_id INTEGER, --person_id
315 data1 INTEGER, --duration, message_id
316 data2 TEXT -- short message
319 CREATE INDEX phonelogs_idx1 ON phonelogs(log_type);
320 CREATE INDEX phonelogs_idx2 ON phonelogs(log_time);
321 CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
323 SELECT _PHONE_LOG_DELETE_(old.id);
326 --CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
327 -- WHEN old.log_type = 2 OR old.log_type = 4
329 -- DELETE FROM phonelog_accumulation WHERE log_time < (old.log_time - 3456000); -- 40 days
330 -- INSERT INTO phonelog_accumulation VALUES(NULL, 1, old.log_time, old.data1);
333 --CREATE TABLE phonelog_accumulation
335 -- id INTEGER PRIMARY KEY AUTOINCREMENT,
340 --INSERT INTO phonelog_accumulation VALUES(1, 0, NULL, 0);
341 --INSERT INTO phonelog_accumulation VALUES(2, 0, NULL, 0); --total
343 CREATE TABLE phonelog_stat
345 log_type INTEGER PRIMARY KEY,
349 CREATE TRIGGER trg_phonelogs_insert AFTER INSERT ON phonelogs
351 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));
354 CREATE TABLE contact_stat
356 id INTEGER PRIMARY KEY AUTOINCREMENT,
362 CREATE TABLE activities
364 id INTEGER PRIMARY KEY AUTOINCREMENT,
365 contact_id INTEGER NOT NULL,
369 service_operation TEXT,
373 CREATE TABLE activity_photos
375 id INTEGER PRIMARY KEY AUTOINCREMENT,
376 activity_id INTEGER NOT NULL,
381 CREATE TRIGGER trg_activities_insert AFTER INSERT ON activities
383 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);
386 CREATE TRIGGER trg_activities_delete AFTER DELETE ON activities
388 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);
389 DELETE FROM activity_photos WHERE activity_id = old.id;
392 CREATE VIRTUAL TABLE search_index USING FTS4
394 contact_id INTEGER NOT NULL,
401 CREATE TABLE name_lookup
403 data_id INTEGER NOT NULL,
404 contact_id INTEGER NOT NULL,
409 CREATE TABLE phone_lookup
411 data_id INTEGER NOT NULL,
412 contact_id INTEGER NOT NULL,
418 CREATE TABLE my_profiles
420 my_profile_id INTEGER PRIMARY KEY AUTOINCREMENT,
421 addressbook_id INTEGER NOT NULL DEFAULT 0,
423 reverse_display_name TEXT,
424 created_ver INTEGER NOT NULL,
425 changed_ver INTEGER NOT NULL,
426 changed_time INTEGER NOT NULL,
428 image_thumbnail_path TEXT,
429 deleted INTEGER DEFAULT 0,
430 UNIQUE(addressbook_id)
433 CREATE TRIGGER trg_my_profiles_del AFTER DELETE ON my_profiles
435 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;
438 CREATE TRIGGER trg_my_profile_update AFTER UPDATE ON my_profiles
441 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;