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 SELECT _DATA_DELETE_(data.id, data.datatype) FROM data WHERE contact_id = old.contact_id AND is_my_profile = 0;
142 DELETE FROM group_relations WHERE old.addressbook_id != -1 AND contact_id = old.contact_id;
143 DELETE FROM persons WHERE person_id = old.person_id AND link_count = 1;
144 UPDATE persons SET dirty=1 WHERE person_id = old.person_id AND link_count > 1;
145 DELETE FROM speeddials WHERE number_id = (SELECT id FROM data WHERE data.contact_id = old.contact_id AND datatype = 8);
148 CREATE TABLE contact_deleteds
150 contact_id INTEGER PRIMARY KEY,
151 addressbook_id INTEGER NOT NULL,
152 created_ver INTEGER NOT NULL,
153 deleted_ver INTEGER NOT NULL
155 CREATE INDEX contact_deleteds_idx1 ON contact_deleteds(deleted_ver);
157 CREATE TABLE cts_version
159 ver INTEGER PRIMARY KEY
162 INSERT INTO cts_version VALUES(0);
166 id INTEGER PRIMARY KEY AUTOINCREMENT,
173 id INTEGER PRIMARY KEY AUTOINCREMENT,
174 contact_id INTEGER NOT NULL,
175 datatype INTEGER NOT NULL,
176 is_my_profile INTEGER,
177 is_primary_default INTEGER,
193 CREATE TRIGGER trg_data_image_del AFTER DELETE ON data
194 WHEN old.datatype = 13
196 SELECT _DATA_IMAGE_DELETE_(old.data3);
199 CREATE TRIGGER trg_data_company_del AFTER DELETE ON data
200 WHEN old.datatype = 6
202 SELECT _DATA_COMPANY_DELETE_(old.data8);
205 CREATE TRIGGER trg_data_number_del AFTER DELETE ON data
206 WHEN old.datatype = 8
208 DELETE FROM speeddials WHERE number_id = old.id;
211 CREATE INDEX data_contact_idx1 ON data(contact_id);
212 CREATE INDEX data_contact_idx2 ON data(datatype, contact_id);
213 CREATE INDEX data_idx1 ON data(data1);
214 CREATE INDEX data_idx2 ON data(data2);
215 CREATE INDEX data_idx3 ON data(data3);
216 CREATE INDEX data_idx4 ON data(data4);
217 CREATE INDEX data_idx5 ON data(data5);
218 CREATE INDEX data_idx6 ON data(data6);
219 CREATE INDEX data_idx7 ON data(data7);
220 CREATE INDEX data_idx8 ON data(data8);
221 CREATE INDEX data_idx9 ON data(data9);
222 CREATE INDEX data_idx10 ON data(data10);
226 group_id INTEGER PRIMARY KEY AUTOINCREMENT,
227 addressbook_id INTEGER,
230 is_read_only INTEGER DEFAULT 0,
231 created_ver INTEGER NOT NULL,
232 changed_ver INTEGER NOT NULL,
235 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,
313 person_id INTEGER, --person_id
316 data1 INTEGER, --duration, message_id
317 data2 TEXT -- short message
320 CREATE INDEX phonelogs_idx1 ON phonelogs(log_type);
321 CREATE INDEX phonelogs_idx2 ON phonelogs(log_time);
322 CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
324 SELECT _PHONE_LOG_DELETE_(old.id);
327 --CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
328 -- WHEN old.log_type = 2 OR old.log_type = 4
330 -- DELETE FROM phonelog_accumulation WHERE log_time < (old.log_time - 3456000); -- 40 days
331 -- INSERT INTO phonelog_accumulation VALUES(NULL, 1, old.log_time, old.data1);
334 --CREATE TABLE phonelog_accumulation
336 -- id INTEGER PRIMARY KEY AUTOINCREMENT,
341 --INSERT INTO phonelog_accumulation VALUES(1, 0, NULL, 0);
342 --INSERT INTO phonelog_accumulation VALUES(2, 0, NULL, 0); --total
344 CREATE TABLE phonelog_stat
346 log_type INTEGER PRIMARY KEY,
350 CREATE TRIGGER trg_phonelogs_insert AFTER INSERT ON phonelogs
352 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));
355 CREATE TABLE contact_stat
357 id INTEGER PRIMARY KEY AUTOINCREMENT,
363 CREATE TABLE activities
365 id INTEGER PRIMARY KEY AUTOINCREMENT,
366 contact_id INTEGER NOT NULL,
370 service_operation TEXT,
374 CREATE TABLE activity_photos
376 id INTEGER PRIMARY KEY AUTOINCREMENT,
377 activity_id INTEGER NOT NULL,
382 CREATE TRIGGER trg_activities_insert AFTER INSERT ON activities
384 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);
387 CREATE TRIGGER trg_activities_delete AFTER DELETE ON activities
389 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);
390 DELETE FROM activity_photos WHERE activity_id = old.id;
393 CREATE VIRTUAL TABLE search_index USING FTS4
395 contact_id INTEGER NOT NULL,
402 CREATE TABLE name_lookup
404 data_id INTEGER NOT NULL,
405 contact_id INTEGER NOT NULL,
409 CREATE INDEX name_lookup_idx1 ON name_lookup(contact_id);
411 CREATE TABLE phone_lookup
413 data_id INTEGER NOT NULL,
414 contact_id INTEGER NOT NULL,
418 CREATE INDEX phone_lookup_idx1 ON phone_lookup(contact_id);
420 CREATE TABLE my_profiles
422 my_profile_id INTEGER PRIMARY KEY AUTOINCREMENT,
423 addressbook_id INTEGER NOT NULL DEFAULT 0,
425 reverse_display_name TEXT,
426 created_ver INTEGER NOT NULL,
427 changed_ver INTEGER NOT NULL,
428 changed_time INTEGER NOT NULL,
430 image_thumbnail_path TEXT,
431 deleted INTEGER DEFAULT 0,
432 UNIQUE(addressbook_id)
435 CREATE TRIGGER trg_my_profiles_del AFTER DELETE ON my_profiles
437 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;
440 CREATE TRIGGER trg_my_profile_update AFTER UPDATE ON my_profiles
443 DELETE FROM data WHERE contact_id = old.my_profile_id AND is_my_profile = 1;