4 * Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
23 #include "ctsvc_internal.h"
24 #include "ctsvc_db_schema.h"
25 #include "ctsvc_db_sqlite.h"
26 #include "ctsvc_db_init.h"
27 #include "ctsvc_db_utils.h"
28 #include "ctsvc_view.h"
29 #include "ctsvc_notification.h"
30 #include "ctsvc_db_access_control.h"
32 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_addressbook;
33 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_contact;
34 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_my_profile;
35 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_simple_contact;
36 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_group;
37 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_person;
38 #ifdef ENABLE_LOG_FEATURE
39 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_phonelog;
40 #endif /* ENABLE_LOG_FEATURE */
41 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_speeddial;
42 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_sdn;
43 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_activity;
44 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_activity_photo;
45 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_address;
46 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_company;
47 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_email;
48 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_event;
49 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_grouprelation;
50 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_relationship;
51 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_image;
52 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_messenger;
53 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_name;
54 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_nickname;
55 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_note;
56 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_number;
57 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_url;
58 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_extension;
59 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_profile;
60 extern ctsvc_db_plugin_info_s ctsvc_db_plugin_sip;
63 #ifdef _CONTACTS_NATIVE
64 static int __ctsvc_db_view_ref_count = 0;
67 static GHashTable *__ctsvc_db_view_hash_table = NULL;
69 #ifdef _CONTACTS_IPC_SERVER
70 static bool __ctsvc_db_view_already_created = false;
75 const char * const table_name;
78 bool need_ab_access_control;
81 static const db_table_info_s __db_tables[] = {
82 {CTSVC_VIEW_URI_ADDRESSBOOK, CTS_TABLE_ADDRESSBOOKS, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
83 {CTSVC_VIEW_URI_GROUP, CTS_TABLE_GROUPS, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
84 {CTSVC_VIEW_URI_PERSON, CTSVC_DB_VIEW_PERSON, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
85 {CTSVC_VIEW_URI_SIMPLE_CONTACT, CTSVC_DB_VIEW_CONTACT, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
86 {CTSVC_VIEW_URI_CONTACT, CTSVC_DB_VIEW_CONTACT, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
87 {CTSVC_VIEW_URI_MY_PROFILE, CTSVC_DB_VIEW_MY_PROFILE, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
88 {CTSVC_VIEW_URI_ACTIVITY, CTSVC_DB_VIEW_ACTIVITY, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
89 {CTSVC_VIEW_URI_ACTIVITY_PHOTO, CTSVC_DB_VIEW_ACTIVITY_PHOTOS, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
90 {CTSVC_VIEW_URI_PHONELOG, CTS_TABLE_PHONELOGS, CTSVC_PERMISSION_PHONELOG_READ, CTSVC_PERMISSION_PHONELOG_WRITE, false},
91 {CTSVC_VIEW_URI_SPEEDDIAL, CTSVC_DB_VIEW_SPEEDIDAL, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, false},
92 {CTSVC_VIEW_URI_SDN, CTS_TABLE_SDN, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, false},
94 {CTSVC_VIEW_URI_NAME, CTSVC_DB_VIEW_NAME, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
95 {CTSVC_VIEW_URI_COMPANY, CTSVC_DB_VIEW_COMPANY, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
96 {CTSVC_VIEW_URI_NUMBER, CTSVC_DB_VIEW_NUMBER, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
97 {CTSVC_VIEW_URI_EMAIL, CTSVC_DB_VIEW_EMAIL, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
98 {CTSVC_VIEW_URI_URL, CTSVC_DB_VIEW_URL, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
99 {CTSVC_VIEW_URI_ADDRESS, CTSVC_DB_VIEW_ADDRESS, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
100 {CTSVC_VIEW_URI_PROFILE, CTSVC_DB_VIEW_PROFILE, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
101 {CTSVC_VIEW_URI_RELATIONSHIP, CTSVC_DB_VIEW_RELATIONSHIP, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
102 {CTSVC_VIEW_URI_IMAGE, CTSVC_DB_VIEW_IMAGE, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
103 {CTSVC_VIEW_URI_NOTE, CTSVC_DB_VIEW_NOTE, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
104 {CTSVC_VIEW_URI_NICKNAME, CTSVC_DB_VIEW_NICKNAME, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
105 {CTSVC_VIEW_URI_EVENT, CTSVC_DB_VIEW_EVENT, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
106 {CTSVC_VIEW_URI_MESSENGER, CTSVC_DB_VIEW_MESSENGER, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
107 {CTSVC_VIEW_URI_GROUP_RELATION, CTSVC_DB_VIEW_GROUP_RELATION, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
108 {CTSVC_VIEW_URI_EXTENSION, CTSVC_DB_VIEW_EXTENSION, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
109 {CTSVC_VIEW_URI_SIP, CTSVC_DB_VIEW_SIP, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_WRITE, true},
111 /* Do not support get_all_records, get_records_with_query, get_count, get_count_with_query */
113 * {CTSVC_VIEW_URI_GROUPS_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_UPDATED_INFO, false},
114 * {CTSVC_VIEW_URI_GROUPS_MEMBER_UPDATED_INFO, CTSVC_DB_VIEW_GROUPS_MEMBER_UPDATED_INFO, false},
115 * {CTSVC_VIEW_URI_CONTACTS_UPDATED_INFO, CTSVC_DB_VIEW_CONTACTS_UPDATED_INFO, false},
116 * {CTSVC_VIEW_URI_MY_PROFILE_UPDATED_INFO, NULL, false},
117 * {CTSVC_VIEW_URI_GROUPRELS_UPDATED_INFO, NULL, false},
120 {CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT, CTSVC_DB_VIEW_PERSON_CONTACT, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
121 {CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER, CTSVC_DB_VIEW_PERSON_NUMBER, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
122 {CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL, CTSVC_DB_VIEW_PERSON_EMAIL, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
123 {CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP, CTSVC_DB_VIEW_PERSON_GROUP, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
124 {CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED, CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
125 {CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED, CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
126 {CTSVC_VIEW_URI_READ_ONLY_PERSON_PHONELOG, CTSVC_DB_VIEW_PERSON_PHONELOG, CTSVC_PERMISSION_CONTACT_READ|CTSVC_PERMISSION_PHONELOG_READ, CTSVC_PERMISSION_CONTACT_NONE, false},
127 {CTSVC_VIEW_URI_READ_ONLY_PERSON_USAGE, CTSVC_DB_VIEW_PERSON_USAGE, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
129 {CTSVC_VIEW_URI_READ_ONLY_CONTACT_NUMBER, CTSVC_DB_VIEW_CONTACT_NUMBER, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
130 {CTSVC_VIEW_URI_READ_ONLY_CONTACT_EMAIL, CTSVC_DB_VIEW_CONTACT_EMAIL, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
131 {CTSVC_VIEW_URI_READ_ONLY_CONTACT_GROUP, CTSVC_DB_VIEW_CONTACT_GROUP, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
132 {CTSVC_VIEW_URI_READ_ONLY_CONTACT_ACTIVITY, CTSVC_DB_VIEW_CONTACT_ACTIVITY, CTSVC_PERMISSION_CONTACT_READ, CTSVC_PERMISSION_CONTACT_NONE, true},
134 {CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT, CTS_TABLE_PHONELOG_STAT, CTSVC_PERMISSION_PHONELOG_READ, CTSVC_PERMISSION_CONTACT_NONE, false},
138 /* this function is called in mutex lock */
139 int ctsvc_db_plugin_init()
143 #ifdef _CONTACTS_NATIVE
144 __ctsvc_db_view_ref_count++;
147 if (__ctsvc_db_view_hash_table)
148 return CONTACTS_ERROR_NONE;
150 __ctsvc_db_view_hash_table = g_hash_table_new(g_str_hash, g_str_equal);
152 if (__ctsvc_db_view_hash_table) {
153 int count = sizeof(__db_tables) /sizeof(db_table_info_s);
154 for (i = 0; i < count; i++)
155 g_hash_table_insert(__ctsvc_db_view_hash_table, __db_tables[i].view_uri, GINT_TO_POINTER(&(__db_tables[i])));
157 return CONTACTS_ERROR_NONE;
160 int ctsvc_db_plugin_deinit()
162 #ifdef _CONTACTS_NATIVE
163 __ctsvc_db_view_ref_count--;
164 if (__ctsvc_db_view_ref_count != 0)
168 if (NULL == __ctsvc_db_view_hash_table)
169 return CONTACTS_ERROR_NONE;
171 g_hash_table_destroy(__ctsvc_db_view_hash_table);
172 __ctsvc_db_view_hash_table = NULL;
174 return CONTACTS_ERROR_NONE;
177 int ctsvc_db_get_table_name(const char *view_uri, const char **out_table)
179 db_table_info_s *db_view_info = NULL;
181 RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
182 RETV_IF(NULL == out_table, CONTACTS_ERROR_INVALID_PARAMETER);
184 if (__ctsvc_db_view_hash_table) {
185 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
187 *out_table = db_view_info->table_name;
188 return CONTACTS_ERROR_NONE;
191 /* LCOV_EXCL_START */
192 ERR("Please check contact_connect()");
196 return CONTACTS_ERROR_INVALID_PARAMETER;
199 int ctsvc_required_read_permission(const char *view_uri)
201 db_table_info_s *db_view_info = NULL;
203 RETV_IF(NULL == view_uri, CTSVC_PERMISSION_CONTACT_NONE);
205 if (__ctsvc_db_view_hash_table) {
206 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
208 return db_view_info->read_permission;
210 /* LCOV_EXCL_START */
211 ERR("Please check contact_connect()");
215 return CTSVC_PERMISSION_CONTACT_NONE;
218 int ctsvc_required_write_permission(const char *view_uri)
220 db_table_info_s *db_view_info = NULL;
222 RETV_IF(NULL == view_uri, CTSVC_PERMISSION_CONTACT_NONE);
224 if (__ctsvc_db_view_hash_table) {
225 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
227 return db_view_info->write_permission;
229 /* LCOV_EXCL_START */
230 ERR("Please check contact_connect()");
234 return CTSVC_PERMISSION_CONTACT_NONE;
237 bool ctsvc_should_ab_access_control(const char *view_uri)
239 db_table_info_s *db_view_info = NULL;
241 RETV_IF(NULL == view_uri, false);
243 if (__ctsvc_db_view_hash_table) {
244 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
246 return db_view_info->need_ab_access_control;
248 /* LCOV_EXCL_START */
249 ERR("Please check contact_connect()");
256 ctsvc_db_plugin_info_s *ctsvc_db_get_plugin_info(ctsvc_record_type_e type)
259 case CTSVC_RECORD_ADDRESSBOOK:
260 return &ctsvc_db_plugin_addressbook;
261 case CTSVC_RECORD_GROUP:
262 return &ctsvc_db_plugin_group;
263 case CTSVC_RECORD_PERSON:
264 return &ctsvc_db_plugin_person;
265 case CTSVC_RECORD_CONTACT:
266 return &ctsvc_db_plugin_contact;
267 case CTSVC_RECORD_MY_PROFILE:
268 return &ctsvc_db_plugin_my_profile;
269 case CTSVC_RECORD_SIMPLE_CONTACT:
270 return &ctsvc_db_plugin_simple_contact;
271 case CTSVC_RECORD_NAME:
272 return &ctsvc_db_plugin_name;
273 case CTSVC_RECORD_COMPANY:
274 return &ctsvc_db_plugin_company;
275 case CTSVC_RECORD_NOTE:
276 return &ctsvc_db_plugin_note;
277 case CTSVC_RECORD_NUMBER:
278 return &ctsvc_db_plugin_number;
279 case CTSVC_RECORD_EMAIL:
280 return &ctsvc_db_plugin_email;
281 case CTSVC_RECORD_URL:
282 return &ctsvc_db_plugin_url;
283 case CTSVC_RECORD_EVENT:
284 return &ctsvc_db_plugin_event;
285 case CTSVC_RECORD_NICKNAME:
286 return &ctsvc_db_plugin_nickname;
287 case CTSVC_RECORD_ADDRESS:
288 return &ctsvc_db_plugin_address;
289 case CTSVC_RECORD_MESSENGER:
290 return &ctsvc_db_plugin_messenger;
291 case CTSVC_RECORD_GROUP_RELATION:
292 return &ctsvc_db_plugin_grouprelation;
293 case CTSVC_RECORD_ACTIVITY:
294 return &ctsvc_db_plugin_activity;
295 case CTSVC_RECORD_ACTIVITY_PHOTO:
296 return &ctsvc_db_plugin_activity_photo;
297 case CTSVC_RECORD_PROFILE:
298 return &ctsvc_db_plugin_profile;
299 case CTSVC_RECORD_RELATIONSHIP:
300 return &ctsvc_db_plugin_relationship;
301 case CTSVC_RECORD_IMAGE:
302 return &ctsvc_db_plugin_image;
303 case CTSVC_RECORD_EXTENSION:
304 return &ctsvc_db_plugin_extension;
305 #ifdef ENABLE_LOG_FEATURE
306 case CTSVC_RECORD_PHONELOG:
307 return &ctsvc_db_plugin_phonelog;
308 #endif /* ENABLE_LOG_FEATURE */
309 case CTSVC_RECORD_SPEEDDIAL:
310 return &ctsvc_db_plugin_speeddial;
311 case CTSVC_RECORD_SDN:
312 return &ctsvc_db_plugin_sdn;
313 case CTSVC_RECORD_SIP:
314 return &ctsvc_db_plugin_sip;
315 case CTSVC_RECORD_UPDATED_INFO:
316 case CTSVC_RECORD_RESULT:
322 #ifdef _CONTACTS_IPC_SERVER
323 static int __ctsvc_db_create_views()
326 char query[CTS_SQL_MAX_LEN] = {0};
328 if (__ctsvc_db_view_already_created)
329 return CONTACTS_ERROR_NONE;
331 /* CTSVC_DB_VIEW_CONTACT */
332 snprintf(query, sizeof(query),
333 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT" AS "
334 "SELECT * FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
335 ret = ctsvc_query_exec(query);
336 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_execs() Fail(%d)", ret);
338 /* CTSVC_DB_VIEW_MY_PROFILE */
339 snprintf(query, sizeof(query),
340 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MY_PROFILE" AS "
341 "SELECT * FROM "CTS_TABLE_MY_PROFILES" WHERE deleted = 0");
342 ret = ctsvc_query_exec(query);
343 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
345 /* CTSVC_DB_VIEW_PERSON */
346 snprintf(query, sizeof(query),
347 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON" AS "
348 "SELECT persons.person_id, "
349 "display_name, reverse_display_name, "
350 "display_name_language, "
351 "reverse_display_name_language, "
352 "sort_name, reverse_sort_name, "
353 "sortkey, reverse_sortkey, "
355 "persons.ringtone_path, "
356 "persons.image_thumbnail_path, "
357 "persons.vibration, "
358 "persons.message_alert, "
362 "persons.has_phonenumber, "
363 "persons.has_email, "
364 "EXISTS(SELECT person_id FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) is_favorite, "
365 "(SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) favorite_prio "
366 "FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_PERSONS" "
367 "ON (name_contact_id = contacts.contact_id) ");
368 ret = ctsvc_query_exec(query);
369 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
371 /* CTSVC_DB_VIEW_NAME */
372 snprintf(query, sizeof(query),
373 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NAME" AS "
385 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
386 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
387 "WHERE datatype = %d AND is_my_profile = 0 ",
388 CONTACTS_DATA_TYPE_NAME);
389 ret = ctsvc_query_exec(query);
390 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
392 /* CTSVC_DB_VIEW_NUMBER */
393 snprintf(query, sizeof(query),
394 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NUMBER" AS "
405 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
406 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
407 "WHERE datatype = %d AND is_my_profile = 0 ",
408 CONTACTS_DATA_TYPE_NUMBER);
409 ret = ctsvc_query_exec(query);
410 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
412 /* CTSVC_DB_VIEW_EMAIL */
413 snprintf(query, sizeof(query),
414 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EMAIL" AS "
422 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
423 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
424 "WHERE datatype = %d AND is_my_profile = 0 ",
425 CONTACTS_DATA_TYPE_EMAIL);
426 ret = ctsvc_query_exec(query);
427 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
429 /* CTSVC_DB_VIEW_ADDRESS */
430 snprintf(query, sizeof(query),
431 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ADDRESS" AS "
445 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
446 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
447 "WHERE datatype = %d AND is_my_profile = 0 ",
448 CONTACTS_DATA_TYPE_POSTAL);
449 ret = ctsvc_query_exec(query);
450 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
452 /* CTSVC_DB_VIEW_URL */
453 snprintf(query, sizeof(query),
454 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_URL" AS "
461 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
462 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
463 "WHERE datatype = %d AND is_my_profile = 0 ",
464 CONTACTS_DATA_TYPE_URL);
465 ret = ctsvc_query_exec(query);
466 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
468 /* CTSVC_DB_VIEW_EVENT */
469 snprintf(query, sizeof(query),
470 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EVENT" AS "
479 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
480 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
481 "WHERE datatype = %d AND is_my_profile = 0 ",
482 CONTACTS_DATA_TYPE_EVENT);
483 ret = ctsvc_query_exec(query);
484 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
486 /* CTSVC_DB_VIEW_GROUP_RELATION */
487 snprintf(query, sizeof(query),
488 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_GROUP_RELATION" AS "
489 "SELECT "CTS_TABLE_GROUP_RELATIONS".group_id, "
493 "FROM "CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
494 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND deleted = 0 "
495 "ORDER BY group_prio");
496 ret = ctsvc_query_exec(query);
497 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
499 /* CTSVC_DB_VIEW_RELATIONSHIP */
500 snprintf(query, sizeof(query),
501 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_RELATIONSHIP" AS "
508 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
509 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
510 "WHERE datatype = %d AND is_my_profile = 0 ",
511 CONTACTS_DATA_TYPE_RELATIONSHIP);
512 ret = ctsvc_query_exec(query);
513 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
515 /* CTSVC_DB_VIEW_IMAGE */
516 snprintf(query, sizeof(query),
517 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_IMAGE" AS "
525 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
526 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
527 "WHERE datatype = %d AND is_my_profile = 0 ",
528 CONTACTS_DATA_TYPE_IMAGE);
529 ret = ctsvc_query_exec(query);
530 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
532 /* CTSVC_DB_VIEW_COMPANY */
533 snprintf(query, sizeof(query),
534 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_COMPANY" AS "
549 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
550 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
551 "WHERE datatype = %d AND is_my_profile = 0 ",
552 CONTACTS_DATA_TYPE_COMPANY);
553 ret = ctsvc_query_exec(query);
554 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
556 /* CTSVC_DB_VIEW_NICKNAME */
557 snprintf(query, sizeof(query),
558 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NICKNAME" AS "
563 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
564 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
565 "WHERE datatype = %d AND is_my_profile = 0 ",
566 CONTACTS_DATA_TYPE_NICKNAME);
567 ret = ctsvc_query_exec(query);
568 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
570 /* CTSVC_DB_VIEW_MESSENGER */
571 snprintf(query, sizeof(query),
572 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MESSENGER" AS "
579 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
580 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
581 "WHERE datatype = %d AND is_my_profile = 0 ",
582 CONTACTS_DATA_TYPE_MESSENGER);
583 ret = ctsvc_query_exec(query);
584 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
586 /* CTSVC_DB_VIEW_NOTE */
587 snprintf(query, sizeof(query),
588 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NOTE" AS "
593 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
594 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
595 "WHERE datatype = %d AND is_my_profile = 0 ",
596 CONTACTS_DATA_TYPE_NOTE);
597 ret = ctsvc_query_exec(query);
598 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
600 /* CTSVC_DB_VIEW_PROFILE */
601 snprintf(query, sizeof(query),
602 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PROFILE" AS "
617 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
618 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
619 "WHERE datatype = %d AND is_my_profile = 0 ",
620 CONTACTS_DATA_TYPE_PROFILE);
621 ret = ctsvc_query_exec(query);
622 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
624 /* CTSVC_DB_VIEW_EXTENSION */
625 snprintf(query, sizeof(query),
626 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EXTENSION" AS "
642 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
643 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
644 "WHERE datatype = %d AND is_my_profile = 0 ",
645 CONTACTS_DATA_TYPE_EXTENSION);
646 ret = ctsvc_query_exec(query);
647 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
649 /* CTSVC_DB_VIEW_ACTIVITY */
650 snprintf(query, sizeof(query),
651 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY" AS "
653 "activities.contact_id, "
658 "service_operation, "
660 "FROM "CTS_TABLE_ACTIVITIES", "CTSVC_DB_VIEW_CONTACT" "
661 "ON "CTS_TABLE_ACTIVITIES".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
662 "ORDER BY timestamp DESC");
663 ret = ctsvc_query_exec(query);
664 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
666 /* CTSVC_DB_VIEW_ACTIVITY_PHOTOS */
667 snprintf(query, sizeof(query),
668 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY_PHOTOS" AS "
669 "SELECT "CTS_TABLE_ACTIVITY_PHOTOS".id, "
673 "FROM "CTS_TABLE_ACTIVITY_PHOTOS", "CTSVC_DB_VIEW_ACTIVITY" "
674 "ON "CTS_TABLE_ACTIVITY_PHOTOS".activity_id = "CTSVC_DB_VIEW_ACTIVITY".id");
675 ret = ctsvc_query_exec(query);
676 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
678 /* CTSVC_DB_VIEW_SPEEDIDAL */
679 snprintf(query, sizeof(query),
680 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_SPEEDIDAL" AS "
681 "SELECT persons.person_id, "
682 "name_contacts.display_name, name_contacts.reverse_display_name, "
683 "name_contacts.display_name_language, "
684 "name_contacts.reverse_display_name_language, "
685 "name_contacts.sort_name, name_contacts.reverse_sort_name, "
686 "name_contacts.sortkey, name_contacts.reverse_sortkey, "
687 "persons.image_thumbnail_path, "
688 "data.id number_id, "
691 "data.data3 number, "
692 "data.data4 minmatch, "
693 "data.data5 normalized_number, "
694 "data.data6 cleaned_number, "
695 "speeddials.speed_number "
696 "FROM "CTS_TABLE_PERSONS", "CTS_TABLE_CONTACTS" AS name_contacts, "
697 CTSVC_DB_VIEW_CONTACT" AS temp_contacts, "
698 CTS_TABLE_DATA", "CTS_TABLE_SPEEDDIALS" "
699 "ON (persons.name_contact_id = name_contacts.contact_id "
700 "AND persons.person_id = temp_contacts.person_id "
701 "AND temp_contacts.contact_id = data.contact_id "
702 "AND data.id = speeddials.number_id) "
703 "ORDER BY speeddials.speed_number");
704 ret = ctsvc_query_exec(query);
705 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
707 /* CTSVC_DB_VIEW_PERSON_CONTACT */
708 snprintf(query, sizeof(query),
709 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_CONTACT" AS "
710 "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
711 "JOIN (SELECT contact_id, "
713 "person_id person_id_in_contact "
714 "FROM "CTSVC_DB_VIEW_CONTACT") temp_contacts "
715 "JOIN (SELECT addressbook_id addressbook_id_in_addressbooks, addressbook_name, mode addressbook_mode "
716 "FROM "CTS_TABLE_ADDRESSBOOKS") temp_addressbooks "
717 "ON temp_contacts.person_id_in_contact = "CTSVC_DB_VIEW_PERSON".person_id "
718 "AND addressbook_id = temp_addressbooks.addressbook_id_in_addressbooks");
719 ret = ctsvc_query_exec(query);
720 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
722 /* CTSVC_DB_VIEW_PERSON_NUMBER */
723 snprintf(query, sizeof(query),
724 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_NUMBER" AS "
725 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
726 "JOIN (SELECT id number_id, "
729 "is_primary_default, "
733 "data5 normalized_number, "
734 "data6 cleaned_number "
735 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
736 "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
737 CONTACTS_DATA_TYPE_NUMBER);
738 ret = ctsvc_query_exec(query);
739 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
741 /* CTSVC_DB_VIEW_PERSON_EMAIL */
742 snprintf(query, sizeof(query),
743 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_EMAIL" AS "
744 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
745 "JOIN (SELECT id email_id, "
748 "is_primary_default, "
751 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
752 "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
753 CONTACTS_DATA_TYPE_EMAIL);
754 ret = ctsvc_query_exec(query);
755 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
757 #ifdef ENABLE_LOG_FEATURE
758 /* CTSVC_DB_VIEW_PERSON_PHONELOG */
759 snprintf(query, sizeof(query),
760 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_PHONELOG" AS "
761 "SELECT L.id phonelog_id, "
763 "C.reverse_display_name, "
764 "C.display_name_language, "
765 "C.reverse_display_name_language, "
766 "C.sort_name, C.reverse_sort_name, "
767 "C.sortkey, C.reverse_sortkey, "
768 "P.image_thumbnail_path, "
779 "L.number_type address_type "
780 "FROM "CTS_TABLE_PHONELOGS" L "
781 "LEFT JOIN "CTS_TABLE_PERSONS" P "
782 "ON P.person_id = L.person_id "
783 "LEFT JOIN "CTS_TABLE_CONTACTS" C "
784 "ON P.name_contact_id = C.contact_id AND C.deleted = 0 "
785 "ORDER BY L.log_time DESC");
786 ret = ctsvc_query_exec(query);
787 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
788 #endif /* ENABLE_LOG_FEATURE */
790 /* CTSVC_DB_VIEW_PERSON_USAGE */
791 snprintf(query, sizeof(query),
792 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_USAGE" AS "
793 "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
794 "LEFT JOIN (SELECT usage_type, "
797 "FROM "CTS_TABLE_CONTACT_STAT") usage "
798 "ON usage.person_id = "CTSVC_DB_VIEW_PERSON".person_id "
799 "ORDER BY usage.times_used");
800 ret = ctsvc_query_exec(query);
801 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
803 /* CTSVC_DB_VIEW_PERSON_GROUP */
804 snprintf(query, sizeof(query),
805 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP" AS "
806 "SELECT view_person_contact.*, groups.group_id, group_prio "
807 "FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
808 "LEFT JOIN "CTS_TABLE_GROUP_RELATIONS" "
809 "ON "CTS_TABLE_GROUP_RELATIONS".deleted = 0 AND "
810 CTS_TABLE_GROUP_RELATIONS".contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id "
811 "LEFT JOIN "CTS_TABLE_GROUPS" "
812 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id "
813 "ORDER BY group_prio");
814 ret = ctsvc_query_exec(query);
815 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
817 /* CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED */
818 snprintf(query, sizeof(query),
819 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED" AS "
820 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
821 "WHERE contact_id NOT IN (select contact_id FROM "CTS_TABLE_GROUP_RELATIONS" WHERE deleted = 0)");
822 ret = ctsvc_query_exec(query);
823 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
825 /* CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED */
826 snprintf(query, sizeof(query),
827 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED" AS "
828 "SELECT "CTSVC_DB_VIEW_PERSON_CONTACT".*, groups.group_id, group_prio "
829 "FROM "CTSVC_DB_VIEW_PERSON_CONTACT", "
830 CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
832 CTS_TABLE_GROUP_RELATIONS".contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id AND "
833 CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND "
834 CTS_TABLE_GROUP_RELATIONS".deleted = 0 "
835 "ORDER BY group_prio");
836 ret = ctsvc_query_exec(query);
837 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
839 /* CTSVC_DB_VIEW_CONTACT_NUMBER */
840 snprintf(query, sizeof(query),
841 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_NUMBER" AS "
842 "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
843 "JOIN (SELECT id number_id, "
850 "data5 normalized_number, "
851 "data6 cleaned_number "
852 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
853 "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
854 CONTACTS_DATA_TYPE_NUMBER);
855 ret = ctsvc_query_exec(query);
856 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
858 /* CTSVC_DB_VIEW_CONTACT_EMAIL */
859 snprintf(query, sizeof(query),
860 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_EMAIL" AS "
861 "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
862 "JOIN (SELECT id email_id, "
868 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
869 "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
870 CONTACTS_DATA_TYPE_EMAIL);
871 ret = ctsvc_query_exec(query);
872 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
874 /* CTSVC_DB_VIEW_CONTACT_GROUP */
875 snprintf(query, sizeof(query),
876 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_GROUP" AS "
877 "SELECT C.*, groups.group_id, group_name "
878 "FROM "CTSVC_DB_VIEW_CONTACT" C "
879 "LEFT JOIN "CTS_TABLE_GROUP_RELATIONS" "
880 "ON "CTS_TABLE_GROUP_RELATIONS".deleted = 0 AND "
881 CTS_TABLE_GROUP_RELATIONS".contact_id = C.contact_id "
882 "LEFT JOIN "CTS_TABLE_GROUPS" "
883 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id");
884 ret = ctsvc_query_exec(query);
885 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
887 /* CTSVC_DB_VIEW_CONTACT_ACTIVITY */
888 snprintf(query, sizeof(query),
889 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_ACTIVITY" AS "
890 "SELECT A.contact_id, "
892 "A.display_name_source, "
893 "A.reverse_display_name, "
894 "A.display_name_language, "
895 "A.reverse_display_name_language, "
896 "A.sort_name, A.reverse_sort_name, "
897 "A.sortkey, A.reverse_sortkey, "
902 "A.image_thumbnail_path, "
903 "AC.id activity_id, "
907 "AC.service_operation, "
909 "FROM "CTSVC_DB_VIEW_CONTACT" A, "CTS_TABLE_ACTIVITIES" AC, "CTS_TABLE_ADDRESSBOOKS" AB "
910 "ON A.contact_id = AC.contact_id "
911 "AND A.addressbook_id = AB.addressbook_id "
912 "ORDER BY timestamp DESC");
913 ret = ctsvc_query_exec(query);
914 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
916 /* CTSVC_DB_VIEW_SIP */
917 snprintf(query, sizeof(query),
918 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_SIP" AS "
924 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
925 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
926 "WHERE datatype = %d AND is_my_profile = 0 ",
927 CONTACTS_DATA_TYPE_SIP);
928 ret = ctsvc_query_exec(query);
929 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
931 __ctsvc_db_view_already_created = true;
933 return CONTACTS_ERROR_NONE;
940 int ret = CONTACTS_ERROR_NONE;
941 ret = ctsvc_db_open();
942 if (ret != CONTACTS_ERROR_NONE) {
943 /* LCOV_EXCL_START */
944 ERR("ctsvc_db_open() Fail(%d)", ret);
949 #ifdef _CONTACTS_IPC_SERVER
950 ret = __ctsvc_db_create_views();
951 if (ret != CONTACTS_ERROR_NONE) {
952 /* LCOV_EXCL_START */
953 ERR("__ctsvc_db_create_views() Fail(%d)", ret);
962 int ctsvc_db_deinit()
964 int ret = CONTACTS_ERROR_NONE;
965 ret = ctsvc_db_close();
966 if (ret != CONTACTS_ERROR_NONE) {
967 /* LCOV_EXCL_START */
968 ERR("ctsvc_db_close() Fail(%d)", ret);
973 return CONTACTS_ERROR_NONE;