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 ERR("Please check contact_connect()");
194 return CONTACTS_ERROR_INVALID_PARAMETER;
197 int ctsvc_required_read_permission(const char *view_uri)
199 db_table_info_s *db_view_info = NULL;
201 RETV_IF(NULL == view_uri, CTSVC_PERMISSION_CONTACT_NONE);
203 if (__ctsvc_db_view_hash_table) {
204 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
206 return db_view_info->read_permission;
208 ERR("Please check contact_connect()");
211 return CTSVC_PERMISSION_CONTACT_NONE;
214 int ctsvc_required_write_permission(const char *view_uri)
216 db_table_info_s *db_view_info = NULL;
218 RETV_IF(NULL == view_uri, CTSVC_PERMISSION_CONTACT_NONE);
220 if (__ctsvc_db_view_hash_table) {
221 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
223 return db_view_info->write_permission;
225 ERR("Please check contact_connect()");
228 return CTSVC_PERMISSION_CONTACT_NONE;
231 bool ctsvc_should_ab_access_control(const char *view_uri)
233 db_table_info_s *db_view_info = NULL;
235 RETV_IF(NULL == view_uri, false);
237 if (__ctsvc_db_view_hash_table) {
238 db_view_info = g_hash_table_lookup(__ctsvc_db_view_hash_table, view_uri);
240 return db_view_info->need_ab_access_control;
242 ERR("Please check contact_connect()");
248 ctsvc_db_plugin_info_s *ctsvc_db_get_plugin_info(ctsvc_record_type_e type)
251 case CTSVC_RECORD_ADDRESSBOOK:
252 return &ctsvc_db_plugin_addressbook;
253 case CTSVC_RECORD_GROUP:
254 return &ctsvc_db_plugin_group;
255 case CTSVC_RECORD_PERSON:
256 return &ctsvc_db_plugin_person;
257 case CTSVC_RECORD_CONTACT:
258 return &ctsvc_db_plugin_contact;
259 case CTSVC_RECORD_MY_PROFILE:
260 return &ctsvc_db_plugin_my_profile;
261 case CTSVC_RECORD_SIMPLE_CONTACT:
262 return &ctsvc_db_plugin_simple_contact;
263 case CTSVC_RECORD_NAME:
264 return &ctsvc_db_plugin_name;
265 case CTSVC_RECORD_COMPANY:
266 return &ctsvc_db_plugin_company;
267 case CTSVC_RECORD_NOTE:
268 return &ctsvc_db_plugin_note;
269 case CTSVC_RECORD_NUMBER:
270 return &ctsvc_db_plugin_number;
271 case CTSVC_RECORD_EMAIL:
272 return &ctsvc_db_plugin_email;
273 case CTSVC_RECORD_URL:
274 return &ctsvc_db_plugin_url;
275 case CTSVC_RECORD_EVENT:
276 return &ctsvc_db_plugin_event;
277 case CTSVC_RECORD_NICKNAME:
278 return &ctsvc_db_plugin_nickname;
279 case CTSVC_RECORD_ADDRESS:
280 return &ctsvc_db_plugin_address;
281 case CTSVC_RECORD_MESSENGER:
282 return &ctsvc_db_plugin_messenger;
283 case CTSVC_RECORD_GROUP_RELATION:
284 return &ctsvc_db_plugin_grouprelation;
285 case CTSVC_RECORD_ACTIVITY:
286 return &ctsvc_db_plugin_activity;
287 case CTSVC_RECORD_ACTIVITY_PHOTO:
288 return &ctsvc_db_plugin_activity_photo;
289 case CTSVC_RECORD_PROFILE:
290 return &ctsvc_db_plugin_profile;
291 case CTSVC_RECORD_RELATIONSHIP:
292 return &ctsvc_db_plugin_relationship;
293 case CTSVC_RECORD_IMAGE:
294 return &ctsvc_db_plugin_image;
295 case CTSVC_RECORD_EXTENSION:
296 return &ctsvc_db_plugin_extension;
297 #ifdef ENABLE_LOG_FEATURE
298 case CTSVC_RECORD_PHONELOG:
299 return &ctsvc_db_plugin_phonelog;
300 #endif /* ENABLE_LOG_FEATURE */
301 case CTSVC_RECORD_SPEEDDIAL:
302 return &ctsvc_db_plugin_speeddial;
303 case CTSVC_RECORD_SDN:
304 return &ctsvc_db_plugin_sdn;
305 case CTSVC_RECORD_SIP:
306 return &ctsvc_db_plugin_sip;
307 case CTSVC_RECORD_UPDATED_INFO:
308 case CTSVC_RECORD_RESULT:
314 #ifdef _CONTACTS_IPC_SERVER
315 static int __ctsvc_db_create_views()
318 char query[CTS_SQL_MAX_LEN] = {0};
320 if (__ctsvc_db_view_already_created)
321 return CONTACTS_ERROR_NONE;
323 /* CTSVC_DB_VIEW_CONTACT */
324 snprintf(query, sizeof(query),
325 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT" AS "
326 "SELECT * FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0");
327 ret = ctsvc_query_exec(query);
328 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_execs() Fail(%d)", ret);
330 /* CTSVC_DB_VIEW_MY_PROFILE */
331 snprintf(query, sizeof(query),
332 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MY_PROFILE" AS "
333 "SELECT * FROM "CTS_TABLE_MY_PROFILES" WHERE deleted = 0");
334 ret = ctsvc_query_exec(query);
335 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
337 /* CTSVC_DB_VIEW_PERSON */
338 snprintf(query, sizeof(query),
339 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON" AS "
340 "SELECT persons.person_id, "
341 "display_name, reverse_display_name, "
342 "display_name_language, "
343 "reverse_display_name_language, "
344 "sort_name, reverse_sort_name, "
345 "sortkey, reverse_sortkey, "
347 "persons.ringtone_path, "
348 "persons.image_thumbnail_path, "
349 "persons.vibration, "
350 "persons.message_alert, "
354 "persons.has_phonenumber, "
355 "persons.has_email, "
356 "EXISTS(SELECT person_id FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) is_favorite, "
357 "(SELECT favorite_prio FROM "CTS_TABLE_FAVORITES" WHERE person_id=persons.person_id) favorite_prio "
358 "FROM "CTS_TABLE_CONTACTS", "CTS_TABLE_PERSONS" "
359 "ON (name_contact_id = contacts.contact_id) ");
360 ret = ctsvc_query_exec(query);
361 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
363 /* CTSVC_DB_VIEW_NAME */
364 snprintf(query, sizeof(query),
365 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NAME" AS "
377 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
378 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
379 "WHERE datatype = %d AND is_my_profile = 0 ",
381 ret = ctsvc_query_exec(query);
382 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
384 /* CTSVC_DB_VIEW_NUMBER */
385 snprintf(query, sizeof(query),
386 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NUMBER" AS "
397 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
398 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
399 "WHERE datatype = %d AND is_my_profile = 0 ",
401 ret = ctsvc_query_exec(query);
402 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
404 /* CTSVC_DB_VIEW_EMAIL */
405 snprintf(query, sizeof(query),
406 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EMAIL" AS "
414 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
415 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
416 "WHERE datatype = %d AND is_my_profile = 0 ",
418 ret = ctsvc_query_exec(query);
419 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
421 /* CTSVC_DB_VIEW_ADDRESS */
422 snprintf(query, sizeof(query),
423 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ADDRESS" AS "
437 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
438 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
439 "WHERE datatype = %d AND is_my_profile = 0 ",
441 ret = ctsvc_query_exec(query);
442 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
444 /* CTSVC_DB_VIEW_URL */
445 snprintf(query, sizeof(query),
446 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_URL" AS "
453 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
454 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
455 "WHERE datatype = %d AND is_my_profile = 0 ",
457 ret = ctsvc_query_exec(query);
458 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
460 /* CTSVC_DB_VIEW_EVENT */
461 snprintf(query, sizeof(query),
462 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EVENT" AS "
471 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
472 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
473 "WHERE datatype = %d AND is_my_profile = 0 ",
475 ret = ctsvc_query_exec(query);
476 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
478 /* CTSVC_DB_VIEW_GROUP_RELATION */
479 snprintf(query, sizeof(query),
480 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_GROUP_RELATION" AS "
481 "SELECT "CTS_TABLE_GROUP_RELATIONS".group_id, "
485 "FROM "CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
486 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND deleted = 0 "
487 "ORDER BY group_prio");
488 ret = ctsvc_query_exec(query);
489 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
491 /* CTSVC_DB_VIEW_RELATIONSHIP */
492 snprintf(query, sizeof(query),
493 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_RELATIONSHIP" AS "
500 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
501 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
502 "WHERE datatype = %d AND is_my_profile = 0 ",
503 CTSVC_DATA_RELATIONSHIP);
504 ret = ctsvc_query_exec(query);
505 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
507 /* CTSVC_DB_VIEW_IMAGE */
508 snprintf(query, sizeof(query),
509 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_IMAGE" AS "
517 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
518 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
519 "WHERE datatype = %d AND is_my_profile = 0 ",
521 ret = ctsvc_query_exec(query);
522 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
524 /* CTSVC_DB_VIEW_COMPANY */
525 snprintf(query, sizeof(query),
526 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_COMPANY" AS "
541 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
542 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
543 "WHERE datatype = %d AND is_my_profile = 0 ",
545 ret = ctsvc_query_exec(query);
546 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
548 /* CTSVC_DB_VIEW_NICKNAME */
549 snprintf(query, sizeof(query),
550 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NICKNAME" AS "
555 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
556 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
557 "WHERE datatype = %d AND is_my_profile = 0 ",
558 CTSVC_DATA_NICKNAME);
559 ret = ctsvc_query_exec(query);
560 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
562 /* CTSVC_DB_VIEW_MESSENGER */
563 snprintf(query, sizeof(query),
564 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_MESSENGER" AS "
571 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
572 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
573 "WHERE datatype = %d AND is_my_profile = 0 ",
574 CTSVC_DATA_MESSENGER);
575 ret = ctsvc_query_exec(query);
576 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
578 /* CTSVC_DB_VIEW_NOTE */
579 snprintf(query, sizeof(query),
580 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_NOTE" AS "
585 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
586 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
587 "WHERE datatype = %d AND is_my_profile = 0 ",
589 ret = ctsvc_query_exec(query);
590 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
592 /* CTSVC_DB_VIEW_PROFILE */
593 snprintf(query, sizeof(query),
594 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PROFILE" AS "
609 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
610 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
611 "WHERE datatype = %d AND is_my_profile = 0 ",
613 ret = ctsvc_query_exec(query);
614 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
616 /* CTSVC_DB_VIEW_EXTENSION */
617 snprintf(query, sizeof(query),
618 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_EXTENSION" AS "
634 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
635 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
636 "WHERE datatype = %d AND is_my_profile = 0 ",
637 CTSVC_DATA_EXTENSION);
638 ret = ctsvc_query_exec(query);
639 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
641 /* CTSVC_DB_VIEW_ACTIVITY */
642 snprintf(query, sizeof(query),
643 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY" AS "
645 "activities.contact_id, "
650 "service_operation, "
652 "FROM "CTS_TABLE_ACTIVITIES", "CTSVC_DB_VIEW_CONTACT" "
653 "ON "CTS_TABLE_ACTIVITIES".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
654 "ORDER BY timestamp DESC");
655 ret = ctsvc_query_exec(query);
656 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
658 /* CTSVC_DB_VIEW_ACTIVITY_PHOTOS */
659 snprintf(query, sizeof(query),
660 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_ACTIVITY_PHOTOS" AS "
661 "SELECT "CTS_TABLE_ACTIVITY_PHOTOS".id, "
665 "FROM "CTS_TABLE_ACTIVITY_PHOTOS", "CTSVC_DB_VIEW_ACTIVITY" "
666 "ON "CTS_TABLE_ACTIVITY_PHOTOS".activity_id = "CTSVC_DB_VIEW_ACTIVITY".id");
667 ret = ctsvc_query_exec(query);
668 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
670 /* CTSVC_DB_VIEW_SPEEDIDAL */
671 snprintf(query, sizeof(query),
672 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_SPEEDIDAL" AS "
673 "SELECT persons.person_id, "
674 "name_contacts.display_name, name_contacts.reverse_display_name, "
675 "name_contacts.display_name_language, "
676 "name_contacts.reverse_display_name_language, "
677 "name_contacts.sort_name, name_contacts.reverse_sort_name, "
678 "name_contacts.sortkey, name_contacts.reverse_sortkey, "
679 "persons.image_thumbnail_path, "
680 "data.id number_id, "
683 "data.data3 number, "
684 "data.data4 minmatch, "
685 "data.data5 normalized_number, "
686 "data.data6 cleaned_number, "
687 "speeddials.speed_number "
688 "FROM "CTS_TABLE_PERSONS", "CTS_TABLE_CONTACTS" AS name_contacts, "
689 CTSVC_DB_VIEW_CONTACT" AS temp_contacts, "
690 CTS_TABLE_DATA", "CTS_TABLE_SPEEDDIALS" "
691 "ON (persons.name_contact_id = name_contacts.contact_id "
692 "AND persons.person_id = temp_contacts.person_id "
693 "AND temp_contacts.contact_id = data.contact_id "
694 "AND data.id = speeddials.number_id) "
695 "ORDER BY speeddials.speed_number");
696 ret = ctsvc_query_exec(query);
697 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
699 /* CTSVC_DB_VIEW_PERSON_CONTACT */
700 snprintf(query, sizeof(query),
701 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_CONTACT" AS "
702 "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
703 "JOIN (SELECT contact_id, "
705 "person_id person_id_in_contact "
706 "FROM "CTSVC_DB_VIEW_CONTACT") temp_contacts "
707 "JOIN (SELECT addressbook_id addressbook_id_in_addressbooks, addressbook_name, mode addressbook_mode "
708 "FROM "CTS_TABLE_ADDRESSBOOKS") temp_addressbooks "
709 "ON temp_contacts.person_id_in_contact = "CTSVC_DB_VIEW_PERSON".person_id "
710 "AND addressbook_id = temp_addressbooks.addressbook_id_in_addressbooks");
711 ret = ctsvc_query_exec(query);
712 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
714 /* CTSVC_DB_VIEW_PERSON_NUMBER */
715 snprintf(query, sizeof(query),
716 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_NUMBER" AS "
717 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
718 "JOIN (SELECT id number_id, "
721 "is_primary_default, "
725 "data5 normalized_number, "
726 "data6 cleaned_number "
727 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
728 "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
730 ret = ctsvc_query_exec(query);
731 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
733 /* CTSVC_DB_VIEW_PERSON_EMAIL */
734 snprintf(query, sizeof(query),
735 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_EMAIL" AS "
736 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
737 "JOIN (SELECT id email_id, "
740 "is_primary_default, "
743 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
744 "ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
746 ret = ctsvc_query_exec(query);
747 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
749 #ifdef ENABLE_LOG_FEATURE
750 /* CTSVC_DB_VIEW_PERSON_PHONELOG */
751 snprintf(query, sizeof(query),
752 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_PHONELOG" AS "
753 "SELECT L.id phonelog_id, "
755 "C.reverse_display_name, "
756 "C.display_name_language, "
757 "C.reverse_display_name_language, "
758 "C.sort_name, C.reverse_sort_name, "
759 "C.sortkey, C.reverse_sortkey, "
760 "P.image_thumbnail_path, "
771 "L.number_type address_type "
772 "FROM "CTS_TABLE_PHONELOGS" L "
773 "LEFT JOIN "CTS_TABLE_PERSONS" P "
774 "ON P.person_id = L.person_id "
775 "LEFT JOIN "CTS_TABLE_CONTACTS" C "
776 "ON P.name_contact_id = C.contact_id AND C.deleted = 0 "
777 "ORDER BY L.log_time DESC");
778 ret = ctsvc_query_exec(query);
779 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
780 #endif /* ENABLE_LOG_FEATURE */
782 /* CTSVC_DB_VIEW_PERSON_USAGE */
783 snprintf(query, sizeof(query),
784 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_USAGE" AS "
785 "SELECT * FROM "CTSVC_DB_VIEW_PERSON" "
786 "LEFT JOIN (SELECT usage_type, "
789 "FROM "CTS_TABLE_CONTACT_STAT") usage "
790 "ON usage.person_id = "CTSVC_DB_VIEW_PERSON".person_id "
791 "ORDER BY usage.times_used");
792 ret = ctsvc_query_exec(query);
793 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
795 /* CTSVC_DB_VIEW_PERSON_GROUP */
796 snprintf(query, sizeof(query),
797 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP" AS "
798 "SELECT view_person_contact.*, groups.group_id, group_prio "
799 "FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
800 "LEFT JOIN "CTS_TABLE_GROUP_RELATIONS" "
801 "ON "CTS_TABLE_GROUP_RELATIONS".deleted = 0 AND "
802 CTS_TABLE_GROUP_RELATIONS".contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id "
803 "LEFT JOIN "CTS_TABLE_GROUPS" "
804 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id "
805 "ORDER BY group_prio");
806 ret = ctsvc_query_exec(query);
807 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
809 /* CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED */
810 snprintf(query, sizeof(query),
811 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_NOT_ASSIGNED" AS "
812 "SELECT * FROM "CTSVC_DB_VIEW_PERSON_CONTACT" "
813 "WHERE contact_id NOT IN (select contact_id FROM "CTS_TABLE_GROUP_RELATIONS" WHERE deleted = 0)");
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_ASSIGNED */
818 snprintf(query, sizeof(query),
819 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_PERSON_GROUP_ASSIGNED" AS "
820 "SELECT "CTSVC_DB_VIEW_PERSON_CONTACT".*, groups.group_id, group_prio "
821 "FROM "CTSVC_DB_VIEW_PERSON_CONTACT", "
822 CTS_TABLE_GROUP_RELATIONS", "CTS_TABLE_GROUPS" "
824 CTS_TABLE_GROUP_RELATIONS".contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id AND "
825 CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id AND "
826 CTS_TABLE_GROUP_RELATIONS".deleted = 0 "
827 "ORDER BY group_prio");
828 ret = ctsvc_query_exec(query);
829 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
831 /* CTSVC_DB_VIEW_CONTACT_NUMBER */
832 snprintf(query, sizeof(query),
833 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_NUMBER" AS "
834 "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
835 "JOIN (SELECT id number_id, "
842 "data5 normalized_number, "
843 "data6 cleaned_number "
844 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
845 "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
847 ret = ctsvc_query_exec(query);
848 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
850 /* CTSVC_DB_VIEW_CONTACT_EMAIL */
851 snprintf(query, sizeof(query),
852 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_EMAIL" AS "
853 "SELECT * FROM "CTSVC_DB_VIEW_CONTACT" "
854 "JOIN (SELECT id email_id, "
860 "FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
861 "ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
863 ret = ctsvc_query_exec(query);
864 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
866 /* CTSVC_DB_VIEW_CONTACT_GROUP */
867 snprintf(query, sizeof(query),
868 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_GROUP" AS "
869 "SELECT C.*, groups.group_id, group_name "
870 "FROM "CTSVC_DB_VIEW_CONTACT" C "
871 "LEFT JOIN "CTS_TABLE_GROUP_RELATIONS" "
872 "ON "CTS_TABLE_GROUP_RELATIONS".deleted = 0 AND "
873 CTS_TABLE_GROUP_RELATIONS".contact_id = C.contact_id "
874 "LEFT JOIN "CTS_TABLE_GROUPS" "
875 "ON "CTS_TABLE_GROUP_RELATIONS".group_id = "CTS_TABLE_GROUPS".group_id");
876 ret = ctsvc_query_exec(query);
877 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
879 /* CTSVC_DB_VIEW_CONTACT_ACTIVITY */
880 snprintf(query, sizeof(query),
881 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_CONTACT_ACTIVITY" AS "
882 "SELECT A.contact_id, "
884 "A.display_name_source, "
885 "A.reverse_display_name, "
886 "A.display_name_language, "
887 "A.reverse_display_name_language, "
888 "A.sort_name, A.reverse_sort_name, "
889 "A.sortkey, A.reverse_sortkey, "
894 "A.image_thumbnail_path, "
895 "AC.id activity_id, "
899 "AC.service_operation, "
901 "FROM "CTSVC_DB_VIEW_CONTACT" A, "CTS_TABLE_ACTIVITIES" AC, "CTS_TABLE_ADDRESSBOOKS" AB "
902 "ON A.contact_id = AC.contact_id "
903 "AND A.addressbook_id = AB.addressbook_id "
904 "ORDER BY timestamp DESC");
905 ret = ctsvc_query_exec(query);
906 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
908 /* CTSVC_DB_VIEW_SIP */
909 snprintf(query, sizeof(query),
910 "CREATE VIEW IF NOT EXISTS "CTSVC_DB_VIEW_SIP" AS "
916 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
917 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
918 "WHERE datatype = %d AND is_my_profile = 0 ",
920 ret = ctsvc_query_exec(query);
921 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
923 __ctsvc_db_view_already_created = true;
925 return CONTACTS_ERROR_NONE;
932 int ret = CONTACTS_ERROR_NONE;
933 ret = ctsvc_db_open();
934 if (ret != CONTACTS_ERROR_NONE) {
935 ERR("ctsvc_db_open() Fail(%d)", ret);
939 #ifdef _CONTACTS_IPC_SERVER
940 ret = __ctsvc_db_create_views();
941 if (ret != CONTACTS_ERROR_NONE) {
942 ERR("__ctsvc_db_create_views() Fail(%d)", ret);
950 int ctsvc_db_deinit()
952 int ret = CONTACTS_ERROR_NONE;
953 ret = ctsvc_db_close();
954 if (ret != CONTACTS_ERROR_NONE) {
955 ERR("ctsvc_db_close() Fail(%d)", ret);
959 return CONTACTS_ERROR_NONE;