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.
20 #include "ctsvc_internal.h"
21 #include "ctsvc_db_schema.h"
22 #include "ctsvc_db_sqlite.h"
23 #include "ctsvc_db_utils.h"
24 #include "ctsvc_db_init.h"
25 #include "ctsvc_db_access_control.h"
26 #include "ctsvc_db_plugin_image_helper.h"
27 #include "ctsvc_db_plugin_contact_helper.h"
28 #include "ctsvc_record.h"
29 #include "ctsvc_db_query.h"
30 #include "ctsvc_list.h"
31 #include "ctsvc_notification.h"
32 #include "ctsvc_notify.h"
35 static int __ctsvc_db_image_get_default_image_id(int contact_id)
39 char query[CTS_SQL_MAX_LEN] = {0};
40 snprintf(query, sizeof(query),
41 "SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
42 CONTACTS_DATA_TYPE_IMAGE, contact_id);
43 ret = ctsvc_query_get_first_int_result(query, &image_id);
44 if (CONTACTS_ERROR_NONE != ret)
49 static int __ctsvc_db_image_set_primary_default(int image_id, bool is_primary_default)
52 char query[CTS_SQL_MAX_LEN] = {0};
54 snprintf(query, sizeof(query),
55 "UPDATE "CTS_TABLE_DATA" SET is_primary_default = %d WHERE id = %d",
56 is_primary_default, image_id);
57 ret = ctsvc_query_exec(query);
58 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
62 static int __ctsvc_db_image_set_default(int image_id, int contact_id, bool is_default, bool is_primary_default)
65 char query[CTS_SQL_MAX_LEN] = {0};
67 snprintf(query, sizeof(query),
68 "UPDATE "CTS_TABLE_DATA" SET is_default = %d, is_primary_default = %d WHERE id = %d",
69 is_default, is_primary_default, image_id);
70 ret = ctsvc_query_exec(query);
71 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
75 static int __ctsvc_db_image_get_primary_default_image_id(int person_id, int *image_id, char** image_path)
79 char query[CTS_SQL_MAX_LEN] = {0};
81 snprintf(query, sizeof(query),
82 "SELECT id d.data3 FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
83 "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
84 person_id, CONTACTS_DATA_TYPE_IMAGE);
86 ret = ctsvc_query_prepare(query, &stmt);
89 ERR("ctsvc_query_prepare() Fail(%d)", ret);
94 ret = ctsvc_stmt_step(stmt);
97 ERR("ctsvc_stmt_step() Fail(%d)", ret);
98 ctsvc_stmt_finalize(stmt);
99 if (ret == CONTACTS_ERROR_NONE)
100 return CONTACTS_ERROR_NO_DATA;
106 *image_id = ctsvc_stmt_get_int(stmt, 0);
107 *image_path = ctsvc_stmt_get_text(stmt, 1);
108 ctsvc_stmt_finalize(stmt);
110 return CONTACTS_ERROR_NONE;
113 static int __ctsvc_db_image_get_primary_default_contact_id(int person_id)
116 int default_contact_id;
117 char query[CTS_SQL_MAX_LEN] = {0};
119 snprintf(query, sizeof(query),
120 "SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
121 "WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
122 person_id, CONTACTS_DATA_TYPE_IMAGE);
123 ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
124 if (CONTACTS_ERROR_NONE != ret)
126 return default_contact_id;
129 static int __ctsvc_db_image_update_contact_image(int contact_id, const char *image_thumbnail_path)
132 char query[CTS_SQL_MAX_LEN] = {0};
135 snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_CONTACTS" SET image_thumbnail_path=? WHERE contact_id = %d", contact_id);
137 ret = ctsvc_query_prepare(query, &stmt);
138 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
140 if (image_thumbnail_path)
141 ctsvc_stmt_bind_text(stmt, 1, image_thumbnail_path);
143 ret = ctsvc_stmt_step(stmt);
144 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
146 ctsvc_stmt_finalize(stmt);
151 static int __ctsvc_db_image_update_person_image(int person_id, const char *image_thumbnail_path)
154 char query[CTS_SQL_MAX_LEN] = {0};
157 snprintf(query, sizeof(query), "UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id = %d", person_id);
159 ret = ctsvc_query_prepare(query, &stmt);
160 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
162 if (image_thumbnail_path)
163 ctsvc_stmt_bind_text(stmt, 1, image_thumbnail_path);
165 ret = ctsvc_stmt_step(stmt);
166 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
168 ctsvc_stmt_finalize(stmt);
173 static int __ctsvc_db_image_insert_record(contacts_record_h record, int *id)
180 int old_default_image_id;
181 char query[CTS_SQL_MAX_LEN] = {0};
182 ctsvc_image_s *image = (ctsvc_image_s*)record;
183 cts_stmt stmt = NULL;
184 char *thumbnail_path = NULL;
186 RETV_IF(NULL == image->path, CONTACTS_ERROR_INVALID_PARAMETER);
188 ret = ctsvc_begin_trans();
189 if (CONTACTS_ERROR_NONE != ret) {
190 /* LCOV_EXCL_START */
191 ERR("ctsvc_begin_trans() Fail(%d)", ret);
196 snprintf(query, sizeof(query),
197 "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", image->contact_id);
198 ret = ctsvc_query_prepare(query, &stmt);
200 /* LCOV_EXCL_START */
201 ERR("ctsvc_query_prepare() Fail(%d)", ret);
202 ctsvc_end_trans(false);
207 ret = ctsvc_stmt_step(stmt);
209 /* LCOV_EXCL_START */
210 ERR("ctsvc_stmt_step() Fail(%d)", ret);
211 ctsvc_stmt_finalize(stmt);
212 ctsvc_end_trans(false);
213 if (ret == CONTACTS_ERROR_NONE)
214 return CONTACTS_ERROR_INVALID_PARAMETER;
220 addressbook_id = ctsvc_stmt_get_int(stmt, 0);
221 person_id = ctsvc_stmt_get_int(stmt, 1);
222 ctsvc_stmt_finalize(stmt);
224 if (false == ctsvc_have_ab_write_permission(addressbook_id, false)) {
225 /* LCOV_EXCL_START */
226 ERR("No permission in this addresbook_id(%d)", addressbook_id);
227 ctsvc_end_trans(false);
228 return CONTACTS_ERROR_PERMISSION_DENIED;
232 old_default_image_id = __ctsvc_db_image_get_default_image_id(image->contact_id);
233 if (0 == old_default_image_id)
234 image->is_default = true;
236 ret = ctsvc_db_image_insert(record, image->contact_id, false, id);
237 if (CONTACTS_ERROR_NONE != ret) {
238 /* LCOV_EXCL_START */
239 ERR("ctsvc_begin_trans() Fail(%d)", ret);
240 ctsvc_end_trans(false);
245 version = ctsvc_get_next_ver();
246 len = snprintf(query, sizeof(query),
247 "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d ",
248 version, (int)time(NULL), version);
250 if (image->is_default)
251 len += snprintf(query + len, sizeof(query) - len, ", image_thumbnail_path=? ");
253 snprintf(query + len, sizeof(query) - len, " WHERE contact_id = %d", image->contact_id);
255 ret = ctsvc_query_prepare(query, &stmt);
256 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
258 if (image->is_default) {
259 thumbnail_path = ctsvc_utils_make_thumbnail(image->path);
261 ctsvc_stmt_bind_text(stmt, 1, thumbnail_path);
263 ret = ctsvc_stmt_step(stmt);
264 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
265 ctsvc_stmt_finalize(stmt);
267 if (image->is_default) {
268 int primary_default_contact_id;
269 __ctsvc_db_image_update_contact_image(image->contact_id, thumbnail_path);
270 primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(person_id);
271 if (primary_default_contact_id == 0 || primary_default_contact_id == image->contact_id) {
272 __ctsvc_db_image_set_primary_default(*id, true);
273 __ctsvc_db_image_update_person_image(person_id, thumbnail_path);
276 free(thumbnail_path);
278 ctsvc_set_contact_noti();
279 ctsvc_set_person_noti();
281 ret = ctsvc_end_trans(true);
282 if (ret < CONTACTS_ERROR_NONE) {
283 /* LCOV_EXCL_START */
284 ERR("ctsvc_end_trans() Fail(%d)", ret);
288 return CONTACTS_ERROR_NONE;
292 static int __ctsvc_db_image_get_record(int id, contacts_record_h *out_record)
295 cts_stmt stmt = NULL;
296 char query[CTS_SQL_MAX_LEN] = {0};
298 RETV_IF(NULL == out_record, CONTACTS_ERROR_INVALID_PARAMETER);
301 snprintf(query, sizeof(query),
302 "SELECT id, data.contact_id, is_default, data1, data2, data3 "
303 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
304 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
305 "WHERE id = %d AND datatype = %d ",
306 id, CONTACTS_DATA_TYPE_IMAGE);
308 ret = ctsvc_query_prepare(query, &stmt);
309 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
311 ret = ctsvc_stmt_step(stmt);
312 if (1 /*CTS_TRUE*/ != ret) {
313 /* LCOV_EXCL_START */
314 ERR("ctsvc_stmt_step() Fail(%d)", ret);
315 ctsvc_stmt_finalize(stmt);
316 if (CONTACTS_ERROR_NONE == ret)
317 return CONTACTS_ERROR_NO_DATA;
323 ctsvc_db_image_get_value_from_stmt(stmt, out_record, 0);
325 ctsvc_stmt_finalize(stmt);
327 return CONTACTS_ERROR_NONE;
330 static int __ctsvc_db_image_update_record(contacts_record_h record)
337 char query[CTS_SQL_MAX_LEN] = {0};
338 ctsvc_image_s *image = (ctsvc_image_s*)record;
339 cts_stmt stmt = NULL;
340 char *thumbnail_path = NULL;
342 RETVM_IF(NULL == image->path, CONTACTS_ERROR_INVALID_PARAMETER, "path is empty");
344 ret = ctsvc_begin_trans();
345 if (CONTACTS_ERROR_NONE != ret) {
346 /* LCOV_EXCL_START */
347 ERR("ctsvc_begin_trans() Fail(%d)", ret);
352 snprintf(query, sizeof(query),
353 "SELECT addressbook_id, person_id FROM "CTSVC_DB_VIEW_CONTACT" WHERE contact_id = %d", image->contact_id);
354 ret = ctsvc_query_prepare(query, &stmt);
356 /* LCOV_EXCL_START */
357 ERR("ctsvc_query_prepare() Fail(%d)", ret);
358 ctsvc_end_trans(false);
363 ret = ctsvc_stmt_step(stmt);
365 /* LCOV_EXCL_START */
366 ERR("ctsvc_stmt_step() Fail(%d)", ret);
367 ctsvc_stmt_finalize(stmt);
368 ctsvc_end_trans(false);
369 if (CONTACTS_ERROR_NONE == ret)
370 return CONTACTS_ERROR_NO_DATA;
375 addressbook_id = ctsvc_stmt_get_int(stmt, 0);
376 person_id = ctsvc_stmt_get_int(stmt, 1);
377 ctsvc_stmt_finalize(stmt);
379 if (false == ctsvc_have_ab_write_permission(addressbook_id, false)) {
380 /* LCOV_EXCL_START */
381 ERR("No permission in this addresbook_id(%d)", addressbook_id);
382 ctsvc_end_trans(false);
383 return CONTACTS_ERROR_PERMISSION_DENIED;
387 ret = ctsvc_db_image_update(record, image->contact_id, false);
388 if (CONTACTS_ERROR_NONE != ret) {
389 /* LCOV_EXCL_START */
390 ERR("ctsvc_begin_trans() Fail(%d)", ret);
391 ctsvc_end_trans(false);
396 version = ctsvc_get_next_ver();
397 len = snprintf(query, sizeof(query),
398 "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d ",
399 version, (int)time(NULL), version);
401 if (image->is_default)
402 len += snprintf(query + len, sizeof(query) - len, ", image_thumbnail_path=? ");
404 snprintf(query + len, sizeof(query) - len, " WHERE contact_id = %d", image->contact_id);
406 ret = ctsvc_query_prepare(query, &stmt);
407 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
409 if (image->is_default) {
410 thumbnail_path = ctsvc_utils_make_thumbnail(image->path);
411 ctsvc_stmt_bind_text(stmt, 1, thumbnail_path);
414 ret = ctsvc_stmt_step(stmt);
415 WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_stmt_step() Fail(%d)", ret);
416 ctsvc_stmt_finalize(stmt);
418 if (image->is_default) {
419 int primary_default_contact_id;
420 __ctsvc_db_image_update_contact_image(image->contact_id, thumbnail_path);
421 primary_default_contact_id = __ctsvc_db_image_get_primary_default_contact_id(person_id);
422 if (primary_default_contact_id == image->contact_id) {
423 __ctsvc_db_image_set_primary_default(image->id, true);
424 __ctsvc_db_image_update_person_image(person_id, thumbnail_path);
427 free(thumbnail_path);
429 ctsvc_set_contact_noti();
430 ctsvc_set_person_noti();
432 ret = ctsvc_end_trans(true);
433 if (ret < CONTACTS_ERROR_NONE) {
434 /* LCOV_EXCL_START */
435 ERR("ctsvc_end_trans() Fail(%d)", ret);
439 return CONTACTS_ERROR_NONE;
443 static int __ctsvc_db_image_delete_record(int id)
451 int is_primary_default;
452 char query[CTS_SQL_MAX_LEN] = {0};
453 cts_stmt stmt = NULL;
456 ret = ctsvc_begin_trans();
457 if (CONTACTS_ERROR_NONE != ret) {
458 /* LCOV_EXCL_START */
459 ERR("ctsvc_begin_trans() Fail(%d)", ret);
464 snprintf(query, sizeof(query),
465 "SELECT contact_id, person_id, addressbook_id FROM "CTSVC_DB_VIEW_CONTACT " "
466 "WHERE contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id = %d)", id);
467 ret = ctsvc_query_prepare(query, &stmt);
469 /* LCOV_EXCL_START */
470 ERR("ctsvc_query_prepare() Fail(%d)", ret);
471 ctsvc_end_trans(false);
476 ret = ctsvc_stmt_step(stmt);
477 if (1 /*CTS_TRUE*/ != ret) {
478 ctsvc_stmt_finalize(stmt);
479 ctsvc_end_trans(false);
480 /* LCOV_EXCL_START */
481 ERR("The id(%d) is Invalid(%d)", id, ret);
482 if (CONTACTS_ERROR_NONE == ret)
483 return CONTACTS_ERROR_NO_DATA;
488 contact_id = ctsvc_stmt_get_int(stmt, 0);
489 person_id = ctsvc_stmt_get_int(stmt, 1);
490 addressbook_id = ctsvc_stmt_get_int(stmt, 2);
491 ctsvc_stmt_finalize(stmt);
493 if (false == ctsvc_have_ab_write_permission(addressbook_id, false)) {
494 /* LCOV_EXCL_START */
495 ERR("No permission in this addresbook_id(%d)", addressbook_id);
496 ctsvc_end_trans(false);
497 return CONTACTS_ERROR_PERMISSION_DENIED;
501 snprintf(query, sizeof(query),
502 "SELECT is_default, is_primary_default FROM "CTS_TABLE_DATA" WHERE id = %d", id);
504 ret = ctsvc_query_prepare(query, &stmt);
506 /* LCOV_EXCL_START */
507 ERR("ctsvc_query_prepare() Fail(%d)", ret);
508 ctsvc_end_trans(false);
513 ret = ctsvc_stmt_step(stmt);
515 /* LCOV_EXCL_START */
516 ERR("ctsvc_stmt_step() Fail(%d)", ret);
517 ctsvc_stmt_finalize(stmt);
518 ctsvc_end_trans(false);
519 if (CONTACTS_ERROR_NONE == ret)
520 return CONTACTS_ERROR_NO_DATA;
526 is_default = ctsvc_stmt_get_int(stmt, 0);
527 is_primary_default = ctsvc_stmt_get_int(stmt, 1);
528 ctsvc_stmt_finalize(stmt);
530 ret = ctsvc_db_image_delete(id, false);
532 if (CONTACTS_ERROR_NONE != ret) {
533 /* LCOV_EXCL_START */
534 ERR("ctsvc_begin_trans() Fail(%d)", ret);
535 ctsvc_end_trans(false);
540 version = ctsvc_get_next_ver();
541 snprintf(query, sizeof(query),
542 "UPDATE "CTS_TABLE_CONTACTS" SET changed_ver = %d, changed_time = %d, image_changed_ver = %d "
543 "WHERE contact_id = %d",
544 version, (int)time(NULL), version, contact_id);
546 ret = ctsvc_query_exec(query);
547 if (CONTACTS_ERROR_NONE != ret) {
548 /* LCOV_EXCL_START */
549 ERR("ctsvc_query_exec() Fail(%d)", ret);
550 ctsvc_end_trans(false);
556 char *image_path = NULL;
557 char *thumbnail_path = NULL;
559 //TODO : make function
561 snprintf(query, sizeof(query),
562 "SELECT id data3 FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
563 CONTACTS_DATA_TYPE_IMAGE, contact_id);
565 ret = ctsvc_query_prepare(query, &stmt);
567 /* LCOV_EXCL_START */
568 ERR("ctsvc_query_prepare() Fail(%d)", ret);
573 ret = ctsvc_stmt_step(stmt);
575 /* LCOV_EXCL_START */
576 ERR("ctsvc_stmt_step() Fail(%d)", ret);
577 ctsvc_stmt_finalize(stmt);
582 image_id = ctsvc_stmt_get_int(stmt, 0);
583 image_path = ctsvc_stmt_get_text(stmt, 1);
584 ctsvc_stmt_finalize(stmt);
587 if (0 != image_id && NULL != image_path) {
588 __ctsvc_db_image_set_default(image_id, contact_id, is_default, is_primary_default);
589 thumbnail_path = ctsvc_utils_make_thumbnail(image_path);
590 __ctsvc_db_image_update_contact_image(contact_id, thumbnail_path);
592 if (is_primary_default)
593 __ctsvc_db_image_update_person_image(person_id, thumbnail_path);
595 __ctsvc_db_image_update_contact_image(contact_id, NULL);
597 if (is_primary_default) {
600 ret = __ctsvc_db_image_get_primary_default_image_id(person_id, &image_id, &image_path);
601 if (CONTACTS_ERROR_NONE == ret && 0 != image_id && NULL != image_path) {
602 __ctsvc_db_image_set_primary_default(image_id, true);
603 thumbnail_path = ctsvc_utils_get_thumbnail_path(image_path, TRUE);
604 __ctsvc_db_image_update_person_image(person_id, thumbnail_path);
606 __ctsvc_db_image_update_person_image(person_id, NULL);
610 free(thumbnail_path);
613 ctsvc_set_contact_noti();
614 ctsvc_set_person_noti();
616 ret = ctsvc_end_trans(true);
617 if (ret < CONTACTS_ERROR_NONE) {
618 /* LCOV_EXCL_START */
619 ERR("ctsvc_end_trans() Fail(%d)", ret);
623 return CONTACTS_ERROR_NONE;
627 static int __ctsvc_db_image_get_all_records(int offset, int limit, contacts_list_h *out_list)
631 contacts_list_h list;
632 ctsvc_image_s *image;
633 cts_stmt stmt = NULL;
634 char query[CTS_SQL_MAX_LEN] = {0};
636 len = snprintf(query, sizeof(query),
637 "SELECT id, data.contact_id, is_default, data1, data2, data3 "
638 "FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
639 "ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
640 "WHERE datatype = %d AND is_my_profile=0 ",
641 CONTACTS_DATA_TYPE_IMAGE);
644 len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
646 len += snprintf(query+len, sizeof(query)-len, " OFFSET %d", offset);
649 ret = ctsvc_query_prepare(query, &stmt);
650 RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
652 contacts_list_create(&list);
653 while ((ret = ctsvc_stmt_step(stmt))) {
654 if (1 /*CTS_TRUE */ != ret) {
655 /* LCOV_EXCL_START */
656 ERR("DB : ctsvc_stmt_step fail(%d)", ret);
657 ctsvc_stmt_finalize(stmt);
658 contacts_list_destroy(list, true);
662 ctsvc_db_image_get_value_from_stmt(stmt, (contacts_record_h*)&image, 0);
663 ctsvc_list_prepend(list, (contacts_record_h)image);
665 ctsvc_stmt_finalize(stmt);
666 ctsvc_list_reverse(list);
669 return CONTACTS_ERROR_NONE;
672 static int __ctsvc_db_image_get_records_with_query(contacts_query_h query, int offset,
673 int limit, contacts_list_h *out_list)
678 ctsvc_query_s *s_query;
680 contacts_list_h list;
681 ctsvc_image_s *image;
683 RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
684 s_query = (ctsvc_query_s*)query;
686 ret = ctsvc_db_make_get_records_query_stmt(s_query, offset, limit, &stmt);
687 RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_db_make_get_records_query_stmt fail(%d)", ret);
689 contacts_list_create(&list);
690 while ((ret = ctsvc_stmt_step(stmt))) {
691 contacts_record_h record;
692 if (1 /*CTS_TRUE */ != ret) {
693 /* LCOV_EXCL_START */
694 ERR("ctsvc_stmt_step() Fail(%d)", ret);
695 ctsvc_stmt_finalize(stmt);
696 contacts_list_destroy(list, true);
701 contacts_record_create(_contacts_image._uri, &record);
702 image = (ctsvc_image_s*)record;
703 if (0 == s_query->projection_count) {
704 field_count = s_query->property_count;
706 field_count = s_query->projection_count;
707 ret = ctsvc_record_set_projection_flags(record, s_query->projection,
708 s_query->projection_count, s_query->property_count);
710 if (CONTACTS_ERROR_NONE != ret)
711 ASSERT_NOT_REACHED("To set projection is Fail.\n");
714 for (i = 0; i < field_count; i++) {
717 if (0 == s_query->projection_count)
718 property_id = s_query->properties[i].property_id;
720 property_id = s_query->projection[i];
722 switch (property_id) {
723 case CTSVC_PROPERTY_IMAGE_ID:
724 image->id = ctsvc_stmt_get_int(stmt, i);
726 case CTSVC_PROPERTY_IMAGE_CONTACT_ID:
727 image->contact_id = ctsvc_stmt_get_int(stmt, i);
729 case CTSVC_PROPERTY_IMAGE_TYPE:
730 image->type = ctsvc_stmt_get_int(stmt, i);
732 case CTSVC_PROPERTY_IMAGE_LABEL:
733 temp = ctsvc_stmt_get_text(stmt, i);
735 image->label = SAFE_STRDUP(temp);
737 case CTSVC_PROPERTY_IMAGE_PATH:
738 temp = ctsvc_stmt_get_text(stmt, i);
740 char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
741 snprintf(full_path, sizeof(full_path), "%s/%s", CTSVC_CONTACT_IMG_FULL_LOCATION, temp);
743 image->path = strdup(full_path);
746 case CTSVC_PROPERTY_IMAGE_IS_DEFAULT:
747 image->is_default = ctsvc_stmt_get_int(stmt, i);
753 ctsvc_list_prepend(list, record);
755 ctsvc_stmt_finalize(stmt);
756 ctsvc_list_reverse(list);
759 return CONTACTS_ERROR_NONE;
762 ctsvc_db_plugin_info_s ctsvc_db_plugin_image = {
763 .is_query_only = false,
764 .insert_record = __ctsvc_db_image_insert_record,
765 .get_record = __ctsvc_db_image_get_record,
766 .update_record = __ctsvc_db_image_update_record,
767 .delete_record = __ctsvc_db_image_delete_record,
768 .get_all_records = __ctsvc_db_image_get_all_records,
769 .get_records_with_query = __ctsvc_db_image_get_records_with_query,
770 .insert_records = NULL,
771 .update_records = NULL,
772 .delete_records = NULL,
774 .get_count_with_query = NULL,
775 .replace_record = NULL,
776 .replace_records = NULL,