revise packaging
[platform/core/pim/contacts-service.git] / common / ctsvc_record_contact.c
1 /*
2  * Contacts Service
3  *
4  * Copyright (c) 2010 - 2015 Samsung Electronics Co., Ltd. All rights reserved.
5  *
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
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  */
19
20 #include <glib.h>
21 #include <unistd.h>
22
23 #include "contacts.h"
24
25 #include "ctsvc_internal.h"
26 #include "ctsvc_list.h"
27 #include "ctsvc_record.h"
28 #include "ctsvc_view.h"
29
30 static int __ctsvc_activity_create(contacts_record_h *out_record);
31 static int __ctsvc_activity_destroy(contacts_record_h record, bool delete_child);
32 static int __ctsvc_activity_clone(contacts_record_h record, contacts_record_h *out_record);
33 static int __ctsvc_activity_get_int(contacts_record_h record, unsigned int property_id, int *out);
34 static int __ctsvc_activity_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
35 static int __ctsvc_activity_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
36 static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
37 static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
38 static int __ctsvc_activity_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
39 static int __ctsvc_activity_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
40 static int __ctsvc_activity_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
41 static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h *out_record);
42 static int __ctsvc_activity_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h *out_list);
43
44 static int __ctsvc_activity_photo_create(contacts_record_h *out_record);
45 static int __ctsvc_activity_photo_destroy(contacts_record_h record, bool delete_child);
46 static int __ctsvc_activity_photo_clone(contacts_record_h record, contacts_record_h *out_record);
47 static int __ctsvc_activity_photo_get_int(contacts_record_h record, unsigned int property_id, int *out);
48 static int __ctsvc_activity_photo_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
49 static int __ctsvc_activity_photo_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
50 static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
51 static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
52
53
54 static int __ctsvc_address_create(contacts_record_h *out_ecord);
55 static int __ctsvc_address_destroy(contacts_record_h record, bool delete_child);
56 static int __ctsvc_address_clone(contacts_record_h record, contacts_record_h *out_record);
57 static int __ctsvc_address_get_int(contacts_record_h record, unsigned int property_id, int *out);
58 static int __ctsvc_address_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
59 static int __ctsvc_address_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
60 static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
61 static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
62 static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
63 static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
64
65 static int __ctsvc_company_create(contacts_record_h *out_record);
66 static int __ctsvc_company_destroy(contacts_record_h record, bool delete_child);
67 static int __ctsvc_company_clone(contacts_record_h record, contacts_record_h *out_record);
68 static int __ctsvc_company_get_int(contacts_record_h record, unsigned int property_id, int *out);
69 static int __ctsvc_company_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
70 static int __ctsvc_company_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
71 static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
72 static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
73
74 static int __ctsvc_contact_create(contacts_record_h *out_record);
75 static int __ctsvc_contact_destroy(contacts_record_h record, bool delete_child);
76 static int __ctsvc_contact_clone(contacts_record_h record, contacts_record_h *out_record);
77 static int __ctsvc_contact_get_int(contacts_record_h record, unsigned int property_id, int *out);
78 static int __ctsvc_contact_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
79 static int __ctsvc_contact_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
80 static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
81 static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
82 static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
83 static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
84 static int __ctsvc_contact_clone_child_record_list(contacts_record_h record, unsigned int property_id, contacts_list_h *out_list);
85 static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record, unsigned int property_id, int index, contacts_record_h *out_record);
86 static int __ctsvc_contact_get_child_record_count(contacts_record_h record, unsigned int property_id, int *count);
87 static int __ctsvc_contact_add_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
88 static int __ctsvc_contact_remove_child_record(contacts_record_h record, unsigned int property_id, contacts_record_h child_record);
89
90 static int __ctsvc_email_create(contacts_record_h *out_record);
91 static int __ctsvc_email_destroy(contacts_record_h record, bool delete_child);
92 static int __ctsvc_email_clone(contacts_record_h record, contacts_record_h *out_record);
93 static int __ctsvc_email_get_int(contacts_record_h record, unsigned int property_id, int *out);
94 static int __ctsvc_email_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
95 static int __ctsvc_email_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
96 static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
97 static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
98 static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
99 static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
100
101 static int __ctsvc_event_create(contacts_record_h *out_record);
102 static int __ctsvc_event_destroy(contacts_record_h record, bool delete_child);
103 static int __ctsvc_event_clone(contacts_record_h record, contacts_record_h *out_record);
104 static int __ctsvc_event_get_int(contacts_record_h record, unsigned int property_id, int *out);
105 static int __ctsvc_event_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
106 static int __ctsvc_event_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
107 static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
108 static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
109 static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
110 static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
111
112 static int __ctsvc_extension_create(contacts_record_h *out_record);
113 static int __ctsvc_extension_destroy(contacts_record_h record, bool delete_child);
114 static int __ctsvc_extension_clone(contacts_record_h record, contacts_record_h *out_record);
115 static int __ctsvc_extension_get_int(contacts_record_h record, unsigned int property_id, int *out);
116 static int __ctsvc_extension_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
117 static int __ctsvc_extension_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
118 static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
119 static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
120
121 static int __ctsvc_group_relation_create(contacts_record_h *out_record);
122 static int __ctsvc_group_relation_destroy(contacts_record_h record, bool delete_child);
123 static int __ctsvc_group_relation_clone(contacts_record_h record, contacts_record_h *out_record);
124 static int __ctsvc_group_relation_get_int(contacts_record_h record, unsigned int property_id, int *out);
125 static int __ctsvc_group_relation_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
126 static int __ctsvc_group_relation_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
127 static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
128 static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
129
130 static int __ctsvc_messenger_create(contacts_record_h *out_record);
131 static int __ctsvc_messenger_destroy(contacts_record_h record, bool delete_child);
132 static int __ctsvc_messenger_clone(contacts_record_h record, contacts_record_h *out_record);
133 static int __ctsvc_messenger_get_int(contacts_record_h record, unsigned int property_id, int *out);
134 static int __ctsvc_messenger_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
135 static int __ctsvc_messenger_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
136 static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
137 static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
138
139 static int __ctsvc_name_create(contacts_record_h *out_record);
140 static int __ctsvc_name_destroy(contacts_record_h record, bool delete_child);
141 static int __ctsvc_name_clone(contacts_record_h record, contacts_record_h *out_record);
142 static int __ctsvc_name_get_int(contacts_record_h record, unsigned int property_id, int *out);
143 static int __ctsvc_name_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
144 static int __ctsvc_name_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
145 static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
146 static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
147
148 static int __ctsvc_nickname_create(contacts_record_h *out_record);
149 static int __ctsvc_nickname_destroy(contacts_record_h record, bool delete_child);
150 static int __ctsvc_nickname_clone(contacts_record_h record, contacts_record_h *out_record);
151 static int __ctsvc_nickname_get_int(contacts_record_h record, unsigned int property_id, int *out);
152 static int __ctsvc_nickname_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
153 static int __ctsvc_nickname_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
154 static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
155 static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
156
157 static int __ctsvc_note_create(contacts_record_h *out_record);
158 static int __ctsvc_note_destroy(contacts_record_h record, bool delete_child);
159 static int __ctsvc_note_clone(contacts_record_h record, contacts_record_h *out_record);
160 static int __ctsvc_note_get_int(contacts_record_h record, unsigned int property_id, int *out);
161 static int __ctsvc_note_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
162 static int __ctsvc_note_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
163 static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
164 static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
165
166 static int __ctsvc_number_create(contacts_record_h *out_record);
167 static int __ctsvc_number_destroy(contacts_record_h record, bool delete_child);
168 static int __ctsvc_number_clone(contacts_record_h record, contacts_record_h *out_record);
169 static int __ctsvc_number_get_int(contacts_record_h record, unsigned int property_id, int *out);
170 static int __ctsvc_number_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
171 static int __ctsvc_number_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
172 static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
173 static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
174 static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
175 static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
176
177 static int __ctsvc_profile_create(contacts_record_h *out_record);
178 static int __ctsvc_profile_destroy(contacts_record_h record, bool delete_child);
179 static int __ctsvc_profile_clone(contacts_record_h record, contacts_record_h *out_reord);
180 static int __ctsvc_profile_get_int(contacts_record_h record, unsigned int property_id, int *out);
181 static int __ctsvc_profile_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
182 static int __ctsvc_profile_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
183 static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
184 static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
185
186 static int __ctsvc_relationship_create(contacts_record_h *out_record);
187 static int __ctsvc_relationship_destroy(contacts_record_h record, bool delete_child);
188 static int __ctsvc_relationship_clone(contacts_record_h record, contacts_record_h *out_record);
189 static int __ctsvc_relationship_get_int(contacts_record_h record, unsigned int property_id, int *out);
190 static int __ctsvc_relationship_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
191 static int __ctsvc_relationship_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
192 static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
193 static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
194
195 static int __ctsvc_image_create(contacts_record_h *out_record);
196 static int __ctsvc_image_destroy(contacts_record_h record, bool delete_child);
197 static int __ctsvc_image_clone(contacts_record_h record, contacts_record_h *out_record);
198 static int __ctsvc_image_get_int(contacts_record_h record, unsigned int property_id, int *out);
199 static int __ctsvc_image_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
200 static int __ctsvc_image_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
201 static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value);
202 static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
203 static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
204 static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty);
205
206 static int __ctsvc_simple_contact_create(contacts_record_h *out_record);
207 static int __ctsvc_simple_contact_destroy(contacts_record_h record, bool delete_child);
208 static int __ctsvc_simple_contact_clone(contacts_record_h record, contacts_record_h *out_record);
209 static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *out);
210 static int __ctsvc_simple_contact_get_int(contacts_record_h record, unsigned int property_id, int *out);
211 static int __ctsvc_simple_contact_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
212 static int __ctsvc_simple_contact_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
213 static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
214 static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
215
216 static int __ctsvc_url_create(contacts_record_h *out_record);
217 static int __ctsvc_url_destroy(contacts_record_h record, bool delete_child);
218 static int __ctsvc_url_clone(contacts_record_h record, contacts_record_h *out_record);
219 static int __ctsvc_url_get_int(contacts_record_h record, unsigned int property_id, int *out);
220 static int __ctsvc_url_get_str(contacts_record_h record, unsigned int property_id, char **out_str);
221 static int __ctsvc_url_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str);
222 static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
223 static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty);
224
225 static int __ctsvc_sip_create(contacts_record_h *out_record);
226 static int __ctsvc_sip_destroy(contacts_record_h record, bool delete_child);
227 static int __ctsvc_sip_clone(contacts_record_h record, contacts_record_h *out_record);
228 static int __ctsvc_sip_get_int(contacts_record_h record, unsigned int property_id, int *out);
229 static int __ctsvc_sip_get_str(contacts_record_h record, unsigned int property_id, char** out_str);
230 static int __ctsvc_sip_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str);
231 static int __ctsvc_sip_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty);
232 static int __ctsvc_sip_set_str(contacts_record_h record, unsigned int property_id, const char* str, bool *is_dirty);
233
234 static GHashTable *__ctsvc_temp_image_file_hash_table = NULL;
235
236 ctsvc_record_plugin_cb_s name_plugin_cbs = {
237         .create = __ctsvc_name_create,
238         .destroy = __ctsvc_name_destroy,
239         .clone = __ctsvc_name_clone,
240         .get_str = __ctsvc_name_get_str,
241         .get_str_p = __ctsvc_name_get_str_p,
242         .get_int = __ctsvc_name_get_int,
243         .get_bool = NULL,
244         .get_lli = NULL,
245         .get_double = NULL,
246         .set_str = __ctsvc_name_set_str,
247         .set_int = __ctsvc_name_set_int,
248         .set_bool = NULL,
249         .set_lli = NULL,
250         .set_double = NULL,
251         .add_child_record = NULL,
252         .remove_child_record = NULL,
253         .get_child_record_count = NULL,
254         .get_child_record_at_p = NULL,
255         .clone_child_record_list = NULL,
256 };
257
258 ctsvc_record_plugin_cb_s number_plugin_cbs = {
259         .create = __ctsvc_number_create,
260         .destroy = __ctsvc_number_destroy,
261         .clone = __ctsvc_number_clone,
262         .get_str = __ctsvc_number_get_str,
263         .get_str_p = __ctsvc_number_get_str_p,
264         .get_int = __ctsvc_number_get_int,
265         .get_bool = __ctsvc_number_get_bool,
266         .get_lli = NULL,
267         .get_double = NULL,
268         .set_str = __ctsvc_number_set_str,
269         .set_int = __ctsvc_number_set_int,
270         .set_bool = __ctsvc_number_set_bool,
271         .set_lli = NULL,
272         .set_double = NULL,
273         .add_child_record = NULL,
274         .remove_child_record = NULL,
275         .get_child_record_count = NULL,
276         .get_child_record_at_p = NULL,
277         .clone_child_record_list = NULL,
278 };
279
280 ctsvc_record_plugin_cb_s address_plugin_cbs = {
281         .create = __ctsvc_address_create,
282         .destroy = __ctsvc_address_destroy,
283         .clone = __ctsvc_address_clone,
284         .get_str = __ctsvc_address_get_str,
285         .get_str_p = __ctsvc_address_get_str_p,
286         .get_int = __ctsvc_address_get_int,
287         .get_bool = __ctsvc_address_get_bool,
288         .get_lli = NULL,
289         .get_double = NULL,
290         .set_str = __ctsvc_address_set_str,
291         .set_int = __ctsvc_address_set_int,
292         .set_bool = __ctsvc_address_set_bool,
293         .set_lli = NULL,
294         .set_double = NULL,
295         .add_child_record = NULL,
296         .remove_child_record = NULL,
297         .get_child_record_count = NULL,
298         .get_child_record_at_p = NULL,
299         .clone_child_record_list = NULL,
300 };
301
302 ctsvc_record_plugin_cb_s url_plugin_cbs = {
303         .create = __ctsvc_url_create,
304         .destroy = __ctsvc_url_destroy,
305         .clone = __ctsvc_url_clone,
306         .get_str = __ctsvc_url_get_str,
307         .get_str_p = __ctsvc_url_get_str_p,
308         .get_int = __ctsvc_url_get_int,
309         .get_bool = NULL,
310         .get_lli = NULL,
311         .get_double = NULL,
312         .set_str = __ctsvc_url_set_str,
313         .set_int = __ctsvc_url_set_int,
314         .set_bool = NULL,
315         .set_lli = NULL,
316         .set_double = NULL,
317         .add_child_record = NULL,
318         .remove_child_record = NULL,
319         .get_child_record_count = NULL,
320         .get_child_record_at_p = NULL,
321         .clone_child_record_list = NULL,
322 };
323
324 ctsvc_record_plugin_cb_s event_plugin_cbs = {
325         .create = __ctsvc_event_create,
326         .destroy = __ctsvc_event_destroy,
327         .clone = __ctsvc_event_clone,
328         .get_str = __ctsvc_event_get_str,
329         .get_str_p = __ctsvc_event_get_str_p,
330         .get_int = __ctsvc_event_get_int,
331         .get_bool = __ctsvc_event_get_bool,
332         .get_lli = NULL,
333         .get_double = NULL,
334         .set_str = __ctsvc_event_set_str,
335         .set_int = __ctsvc_event_set_int,
336         .set_bool = __ctsvc_event_set_bool,
337         .set_lli = NULL,
338         .set_double = NULL,
339         .add_child_record = NULL,
340         .remove_child_record = NULL,
341         .get_child_record_count = NULL,
342         .get_child_record_at_p = NULL,
343         .clone_child_record_list = NULL,
344 };
345
346 ctsvc_record_plugin_cb_s messenger_plugin_cbs = {
347         .create = __ctsvc_messenger_create,
348         .destroy = __ctsvc_messenger_destroy,
349         .clone = __ctsvc_messenger_clone,
350         .get_str = __ctsvc_messenger_get_str,
351         .get_str_p = __ctsvc_messenger_get_str_p,
352         .get_int = __ctsvc_messenger_get_int,
353         .get_bool = NULL,
354         .get_lli = NULL,
355         .get_double = NULL,
356         .set_str = __ctsvc_messenger_set_str,
357         .set_int = __ctsvc_messenger_set_int,
358         .set_bool = NULL,
359         .set_lli = NULL,
360         .set_double = NULL,
361         .add_child_record = NULL,
362         .remove_child_record = NULL,
363         .get_child_record_count = NULL,
364         .get_child_record_at_p = NULL,
365         .clone_child_record_list = NULL,
366 };
367
368 ctsvc_record_plugin_cb_s activity_plugin_cbs = {
369         .create = __ctsvc_activity_create,
370         .destroy = __ctsvc_activity_destroy,
371         .clone = __ctsvc_activity_clone,
372         .get_str = __ctsvc_activity_get_str,
373         .get_str_p = __ctsvc_activity_get_str_p,
374         .get_int = __ctsvc_activity_get_int,
375         .get_bool = NULL,
376         .get_lli = NULL,
377         .get_double = NULL,
378         .set_str = __ctsvc_activity_set_str,
379         .set_int = __ctsvc_activity_set_int,
380         .set_bool = NULL,
381         .set_lli = NULL,
382         .set_double = NULL,
383         .add_child_record = __ctsvc_activity_add_child_record,
384         .remove_child_record = __ctsvc_activity_remove_child_record,
385         .get_child_record_count = __ctsvc_activity_get_child_record_count,
386         .get_child_record_at_p = __ctsvc_activity_get_child_record_at_p,
387         .clone_child_record_list = __ctsvc_activity_clone_child_record_list,
388 };
389
390 ctsvc_record_plugin_cb_s activity_photo_plugin_cbs = {
391         .create = __ctsvc_activity_photo_create,
392         .destroy = __ctsvc_activity_photo_destroy,
393         .clone = __ctsvc_activity_photo_clone,
394         .get_str = __ctsvc_activity_photo_get_str,
395         .get_str_p = __ctsvc_activity_photo_get_str_p,
396         .get_int = __ctsvc_activity_photo_get_int,
397         .get_bool = NULL,
398         .get_lli = NULL,
399         .get_double = NULL,
400         .set_str = __ctsvc_activity_photo_set_str,
401         .set_int = __ctsvc_activity_photo_set_int,
402         .set_bool = NULL,
403         .set_lli = NULL,
404         .set_double = NULL,
405         .add_child_record = NULL,
406         .remove_child_record = NULL,
407         .get_child_record_count = NULL,
408         .get_child_record_at_p = NULL,
409         .clone_child_record_list = NULL,
410 };
411
412 ctsvc_record_plugin_cb_s relationship_plugin_cbs = {
413         .create = __ctsvc_relationship_create,
414         .destroy = __ctsvc_relationship_destroy,
415         .clone = __ctsvc_relationship_clone,
416         .get_str = __ctsvc_relationship_get_str,
417         .get_str_p = __ctsvc_relationship_get_str_p,
418         .get_int = __ctsvc_relationship_get_int,
419         .get_bool = NULL,
420         .get_lli = NULL,
421         .get_double = NULL,
422         .set_str = __ctsvc_relationship_set_str,
423         .set_int = __ctsvc_relationship_set_int,
424         .set_bool = NULL,
425         .set_lli = NULL,
426         .set_double = NULL,
427         .add_child_record = NULL,
428         .remove_child_record = NULL,
429         .get_child_record_count = NULL,
430         .get_child_record_at_p = NULL,
431         .clone_child_record_list = NULL,
432 };
433
434 ctsvc_record_plugin_cb_s image_plugin_cbs = {
435         .create = __ctsvc_image_create,
436         .destroy = __ctsvc_image_destroy,
437         .clone = __ctsvc_image_clone,
438         .get_str = __ctsvc_image_get_str,
439         .get_str_p = __ctsvc_image_get_str_p,
440         .get_int = __ctsvc_image_get_int,
441         .get_bool = __ctsvc_image_get_bool,
442         .get_lli = NULL,
443         .get_double = NULL,
444         .set_str = __ctsvc_image_set_str,
445         .set_int = __ctsvc_image_set_int,
446         .set_bool = __ctsvc_image_set_bool,
447         .set_lli = NULL,
448         .set_double = NULL,
449         .add_child_record = NULL,
450         .remove_child_record = NULL,
451         .get_child_record_count = NULL,
452         .get_child_record_at_p = NULL,
453         .clone_child_record_list = NULL,
454 };
455
456 ctsvc_record_plugin_cb_s group_relation_plugin_cbs = {
457         .create = __ctsvc_group_relation_create,
458         .destroy = __ctsvc_group_relation_destroy,
459         .clone = __ctsvc_group_relation_clone,
460         .get_str = __ctsvc_group_relation_get_str,
461         .get_str_p = __ctsvc_group_relation_get_str_p,
462         .get_int = __ctsvc_group_relation_get_int,
463         .get_bool = NULL,
464         .get_lli = NULL,
465         .get_double = NULL,
466         .set_str = __ctsvc_group_relation_set_str,
467         .set_int = __ctsvc_group_relation_set_int,
468         .set_bool = NULL,
469         .set_lli = NULL,
470         .set_double = NULL,
471         .add_child_record = NULL,
472         .remove_child_record = NULL,
473         .get_child_record_count = NULL,
474         .get_child_record_at_p = NULL,
475         .clone_child_record_list = NULL,
476 };
477
478 ctsvc_record_plugin_cb_s note_plugin_cbs = {
479         .create = __ctsvc_note_create,
480         .destroy = __ctsvc_note_destroy,
481         .clone = __ctsvc_note_clone,
482         .get_str = __ctsvc_note_get_str,
483         .get_str_p = __ctsvc_note_get_str_p,
484         .get_int = __ctsvc_note_get_int,
485         .get_bool = NULL,
486         .get_lli = NULL,
487         .get_double = NULL,
488         .set_str = __ctsvc_note_set_str,
489         .set_int = __ctsvc_note_set_int,
490         .set_bool = NULL,
491         .set_lli = NULL,
492         .set_double = NULL,
493         .add_child_record = NULL,
494         .remove_child_record = NULL,
495         .get_child_record_count = NULL,
496         .get_child_record_at_p = NULL,
497         .clone_child_record_list = NULL,
498 };
499
500 ctsvc_record_plugin_cb_s company_plugin_cbs = {
501         .create = __ctsvc_company_create,
502         .destroy = __ctsvc_company_destroy,
503         .clone = __ctsvc_company_clone,
504         .get_str = __ctsvc_company_get_str,
505         .get_str_p = __ctsvc_company_get_str_p,
506         .get_int = __ctsvc_company_get_int,
507         .get_bool = NULL,
508         .get_lli = NULL,
509         .get_double = NULL,
510         .set_str = __ctsvc_company_set_str,
511         .set_int = __ctsvc_company_set_int,
512         .set_bool = NULL,
513         .set_lli = NULL,
514         .set_double = NULL,
515         .add_child_record = NULL,
516         .remove_child_record = NULL,
517         .get_child_record_count = NULL,
518         .get_child_record_at_p = NULL,
519         .clone_child_record_list = NULL,
520 };
521
522 ctsvc_record_plugin_cb_s profile_plugin_cbs = {
523         .create = __ctsvc_profile_create,
524         .destroy = __ctsvc_profile_destroy,
525         .clone = __ctsvc_profile_clone,
526         .get_str = __ctsvc_profile_get_str,
527         .get_str_p = __ctsvc_profile_get_str_p,
528         .get_int = __ctsvc_profile_get_int,
529         .get_bool = NULL,
530         .get_lli = NULL,
531         .get_double = NULL,
532         .set_str = __ctsvc_profile_set_str,
533         .set_int = __ctsvc_profile_set_int,
534         .set_bool = NULL,
535         .set_lli = NULL,
536         .set_double = NULL,
537         .add_child_record = NULL,
538         .remove_child_record = NULL,
539         .get_child_record_count = NULL,
540         .get_child_record_at_p = NULL,
541         .clone_child_record_list = NULL,
542 };
543
544 ctsvc_record_plugin_cb_s nickname_plugin_cbs = {
545         .create = __ctsvc_nickname_create,
546         .destroy = __ctsvc_nickname_destroy,
547         .clone = __ctsvc_nickname_clone,
548         .get_str = __ctsvc_nickname_get_str,
549         .get_str_p = __ctsvc_nickname_get_str_p,
550         .get_int = __ctsvc_nickname_get_int,
551         .get_bool = NULL,
552         .get_lli = NULL,
553         .get_double = NULL,
554         .set_str = __ctsvc_nickname_set_str,
555         .set_int = __ctsvc_nickname_set_int,
556         .set_bool = NULL,
557         .set_lli = NULL,
558         .set_double = NULL,
559         .add_child_record = NULL,
560         .remove_child_record = NULL,
561         .get_child_record_count = NULL,
562         .get_child_record_at_p = NULL,
563         .clone_child_record_list = NULL,
564 };
565
566 ctsvc_record_plugin_cb_s email_plugin_cbs = {
567         .create = __ctsvc_email_create,
568         .destroy = __ctsvc_email_destroy,
569         .clone = __ctsvc_email_clone,
570         .get_str = __ctsvc_email_get_str,
571         .get_str_p = __ctsvc_email_get_str_p,
572         .get_int = __ctsvc_email_get_int,
573         .get_bool = __ctsvc_email_get_bool,
574         .get_lli = NULL,
575         .get_double = NULL,
576         .set_str = __ctsvc_email_set_str,
577         .set_int = __ctsvc_email_set_int,
578         .set_bool = __ctsvc_email_set_bool,
579         .set_lli = NULL,
580         .set_double = NULL,
581         .add_child_record = NULL,
582         .remove_child_record = NULL,
583         .get_child_record_count = NULL,
584         .get_child_record_at_p = NULL,
585         .clone_child_record_list = NULL,
586 };
587
588 ctsvc_record_plugin_cb_s extension_plugin_cbs = {
589         .create = __ctsvc_extension_create,
590         .destroy = __ctsvc_extension_destroy,
591         .clone = __ctsvc_extension_clone,
592         .get_str = __ctsvc_extension_get_str,
593         .get_str_p = __ctsvc_extension_get_str_p,
594         .get_int = __ctsvc_extension_get_int,
595         .get_bool = NULL,
596         .get_lli = NULL,
597         .get_double = NULL,
598         .set_str = __ctsvc_extension_set_str,
599         .set_int = __ctsvc_extension_set_int,
600         .set_bool = NULL,
601         .set_lli = NULL,
602         .set_double = NULL,
603         .add_child_record = NULL,
604         .remove_child_record = NULL,
605         .get_child_record_count = NULL,
606         .get_child_record_at_p = NULL,
607         .clone_child_record_list = NULL,
608 };
609
610 ctsvc_record_plugin_cb_s contact_plugin_cbs = {
611         .create = __ctsvc_contact_create,
612         .destroy = __ctsvc_contact_destroy,
613         .clone = __ctsvc_contact_clone,
614         .get_str = __ctsvc_contact_get_str,
615         .get_str_p = __ctsvc_contact_get_str_p,
616         .get_int = __ctsvc_contact_get_int,
617         .get_bool = __ctsvc_contact_get_bool,
618         .get_lli = NULL,
619         .get_double = NULL,
620         .set_str = __ctsvc_contact_set_str,
621         .set_int = __ctsvc_contact_set_int,
622         .set_bool = __ctsvc_contact_set_bool,
623         .set_lli = NULL,
624         .set_double = NULL,
625         .add_child_record = __ctsvc_contact_add_child_record,
626         .remove_child_record = __ctsvc_contact_remove_child_record,
627         .get_child_record_count = __ctsvc_contact_get_child_record_count,
628         .get_child_record_at_p = __ctsvc_contact_get_child_record_at_p,
629         .clone_child_record_list = __ctsvc_contact_clone_child_record_list,
630 };
631
632 ctsvc_record_plugin_cb_s simple_contact_plugin_cbs = {
633         .create = __ctsvc_simple_contact_create,
634         .destroy = __ctsvc_simple_contact_destroy,
635         .clone = __ctsvc_simple_contact_clone,
636         .get_str = __ctsvc_simple_contact_get_str,
637         .get_str_p = __ctsvc_simple_contact_get_str_p,
638         .get_int = __ctsvc_simple_contact_get_int,
639         .get_bool = __ctsvc_simple_contact_get_bool,
640         .get_lli = NULL,
641         .get_double = NULL,
642         .set_str = __ctsvc_simple_contact_set_str,
643         .set_int = __ctsvc_simple_contact_set_int,
644         .set_bool = NULL,
645         .set_lli = NULL,
646         .set_double = NULL,
647         .add_child_record = NULL,
648         .remove_child_record = NULL,
649         .get_child_record_count = NULL,
650         .get_child_record_at_p = NULL,
651         .clone_child_record_list = NULL,
652 };
653
654 ctsvc_record_plugin_cb_s sip_plugin_cbs = {
655         .create = __ctsvc_sip_create,
656         .destroy = __ctsvc_sip_destroy,
657         .clone = __ctsvc_sip_clone,
658         .get_str = __ctsvc_sip_get_str,
659         .get_str_p = __ctsvc_sip_get_str_p,
660         .get_int = __ctsvc_sip_get_int,
661         .get_bool = NULL,
662         .get_lli = NULL,
663         .get_double = NULL,
664         .set_str = __ctsvc_sip_set_str,
665         .set_int = __ctsvc_sip_set_int,
666         .set_bool = NULL,
667         .set_lli = NULL,
668         .set_double = NULL,
669         .add_child_record = NULL,
670         .remove_child_record = NULL,
671         .get_child_record_count = NULL,
672         .get_child_record_at_p = NULL,
673         .clone_child_record_list = NULL,
674 };
675
676
677 static int __ctsvc_activity_create(contacts_record_h *out_record)
678 {
679         ctsvc_activity_s *activity;
680         activity = calloc(1, sizeof(ctsvc_activity_s));
681         RETVM_IF(NULL == activity, CONTACTS_ERROR_OUT_OF_MEMORY,
682                         "calloc() Fail");
683
684         activity->photos = calloc(1, sizeof(ctsvc_list_s));
685         if (NULL == activity->photos) {
686                 /* LCOV_EXCL_START */
687                 ERR("calloc() Fail");
688                 free(activity);
689                 return CONTACTS_ERROR_OUT_OF_MEMORY;
690                 /* LCOV_EXCL_STOP */
691         }
692         activity->photos->l_type = CTSVC_RECORD_ACTIVITY_PHOTO;
693
694         *out_record = (contacts_record_h)activity;
695         return CONTACTS_ERROR_NONE;
696 }
697
698 static int __ctsvc_activity_photo_create(contacts_record_h *out_record)
699 {
700         ctsvc_activity_photo_s *photo;
701         photo = calloc(1, sizeof(ctsvc_activity_photo_s));
702         RETVM_IF(NULL == photo, CONTACTS_ERROR_OUT_OF_MEMORY,
703                         "calloc() Fail");
704
705         *out_record = (contacts_record_h)photo;
706         return CONTACTS_ERROR_NONE;
707 }
708
709 static int __ctsvc_address_create(contacts_record_h *out_record)
710 {
711         ctsvc_address_s *address;
712         address = calloc(1, sizeof(ctsvc_address_s));
713         RETVM_IF(NULL == address, CONTACTS_ERROR_OUT_OF_MEMORY,
714                         "calloc() Fail");
715
716         *out_record = (contacts_record_h)address;
717         return CONTACTS_ERROR_NONE;
718 }
719
720 static int __ctsvc_company_create(contacts_record_h *out_record)
721 {
722         ctsvc_company_s *company;
723         company = calloc(1, sizeof(ctsvc_company_s));
724         RETVM_IF(NULL == company, CONTACTS_ERROR_OUT_OF_MEMORY,
725                         "calloc() Fail");
726
727         *out_record = (contacts_record_h)company;
728         return CONTACTS_ERROR_NONE;
729 }
730
731 static int __ctsvc_email_create(contacts_record_h *out_record)
732 {
733         ctsvc_email_s *email;
734         email = calloc(1, sizeof(ctsvc_email_s));
735         RETVM_IF(NULL == email, CONTACTS_ERROR_OUT_OF_MEMORY,
736                         "calloc() Fail");
737
738         *out_record = (contacts_record_h)email;
739         return CONTACTS_ERROR_NONE;
740 }
741
742 static int __ctsvc_event_create(contacts_record_h *out_record)
743 {
744         ctsvc_event_s *event;
745         event = calloc(1, sizeof(ctsvc_event_s));
746         RETVM_IF(NULL == event, CONTACTS_ERROR_OUT_OF_MEMORY,
747                         "calloc() Fail");
748
749         *out_record = (contacts_record_h)event;
750         return CONTACTS_ERROR_NONE;
751 }
752
753 static int __ctsvc_extension_create(contacts_record_h *out_record)
754 {
755         ctsvc_extension_s *extension;
756         extension = calloc(1, sizeof(ctsvc_extension_s));
757         RETVM_IF(NULL == extension, CONTACTS_ERROR_OUT_OF_MEMORY,
758                         "calloc() Fail");
759
760         *out_record = (contacts_record_h)extension;
761         return CONTACTS_ERROR_NONE;
762 }
763
764 static int __ctsvc_group_relation_create(contacts_record_h *out_record)
765 {
766         ctsvc_group_relation_s *group_relation;
767         group_relation = calloc(1, sizeof(ctsvc_group_relation_s));
768         RETVM_IF(NULL == group_relation, CONTACTS_ERROR_OUT_OF_MEMORY,
769                         "calloc() Fail");
770
771         *out_record = (contacts_record_h)group_relation;
772         return CONTACTS_ERROR_NONE;
773 }
774
775 static int __ctsvc_messenger_create(contacts_record_h *out_record)
776 {
777         ctsvc_messenger_s *messenger;
778         messenger = calloc(1, sizeof(ctsvc_messenger_s));
779         RETVM_IF(NULL == messenger, CONTACTS_ERROR_OUT_OF_MEMORY,
780                         "calloc() Fail");
781
782         *out_record = (contacts_record_h)messenger;
783         return CONTACTS_ERROR_NONE;
784 }
785
786 static int __ctsvc_name_create(contacts_record_h *out_record)
787 {
788         ctsvc_name_s *name;
789         name = calloc(1, sizeof(ctsvc_name_s));
790         RETVM_IF(NULL == name, CONTACTS_ERROR_OUT_OF_MEMORY,
791                         "calloc() Fail");
792
793         *out_record = (contacts_record_h)name;
794         return CONTACTS_ERROR_NONE;
795 }
796
797 static int __ctsvc_nickname_create(contacts_record_h *out_record)
798 {
799         ctsvc_nickname_s *nickname;
800         nickname = calloc(1, sizeof(ctsvc_nickname_s));
801         RETVM_IF(NULL == nickname, CONTACTS_ERROR_OUT_OF_MEMORY,
802                         "calloc() Fail");
803
804         *out_record = (contacts_record_h)nickname;
805         return CONTACTS_ERROR_NONE;
806 }
807
808 static int __ctsvc_note_create(contacts_record_h *out_record)
809 {
810         ctsvc_note_s *note;
811         note = calloc(1, sizeof(ctsvc_note_s));
812         RETVM_IF(NULL == note, CONTACTS_ERROR_OUT_OF_MEMORY,
813                         "calloc() Fail");
814
815         *out_record = (contacts_record_h)note;
816         return CONTACTS_ERROR_NONE;
817 }
818
819 static int __ctsvc_number_create(contacts_record_h *out_record)
820 {
821         ctsvc_number_s *number;
822         number = calloc(1, sizeof(ctsvc_number_s));
823         RETVM_IF(NULL == number, CONTACTS_ERROR_OUT_OF_MEMORY,
824                         "calloc() Fail");
825
826         *out_record = (contacts_record_h)number;
827         return CONTACTS_ERROR_NONE;
828 }
829
830 static int __ctsvc_profile_create(contacts_record_h *out_record)
831 {
832         ctsvc_profile_s *profile;
833         profile = calloc(1, sizeof(ctsvc_profile_s));
834         RETVM_IF(NULL == profile, CONTACTS_ERROR_OUT_OF_MEMORY,
835                         "calloc() Fail");
836
837         *out_record = (contacts_record_h)profile;
838         return CONTACTS_ERROR_NONE;
839 }
840
841 static int __ctsvc_relationship_create(contacts_record_h *out_record)
842 {
843         ctsvc_relationship_s *relationship;
844         relationship = calloc(1, sizeof(ctsvc_relationship_s));
845         RETVM_IF(NULL == relationship, CONTACTS_ERROR_OUT_OF_MEMORY,
846                         "calloc() Fail");
847
848         *out_record = (contacts_record_h)relationship;
849         return CONTACTS_ERROR_NONE;
850 }
851
852 static int __ctsvc_image_create(contacts_record_h *out_record)
853 {
854         ctsvc_image_s *image;
855         image = calloc(1, sizeof(ctsvc_image_s));
856         RETVM_IF(NULL == image, CONTACTS_ERROR_OUT_OF_MEMORY,
857                         "calloc() Fail");
858
859         *out_record = (contacts_record_h)image;
860         return CONTACTS_ERROR_NONE;
861 }
862
863 static int __ctsvc_simple_contact_create(contacts_record_h *out_record)
864 {
865         ctsvc_simple_contact_s *simple_contact;
866         simple_contact = calloc(1, sizeof(ctsvc_simple_contact_s));
867         RETVM_IF(NULL == simple_contact, CONTACTS_ERROR_OUT_OF_MEMORY,
868                         "calloc() Fail");
869
870         *out_record = (contacts_record_h)simple_contact;
871         return CONTACTS_ERROR_NONE;
872 }
873
874 static int __ctsvc_url_create(contacts_record_h *out_record)
875 {
876         ctsvc_url_s *url;
877         url = calloc(1, sizeof(ctsvc_url_s));
878         RETVM_IF(NULL == url, CONTACTS_ERROR_OUT_OF_MEMORY,
879                         "calloc() Fail");
880
881         *out_record = (contacts_record_h)url;
882         return CONTACTS_ERROR_NONE;
883 }
884
885 static int __ctsvc_sip_create(contacts_record_h *out_record)
886 {
887         ctsvc_sip_s *sip;
888         sip = calloc(1, sizeof(ctsvc_sip_s));
889         RETVM_IF(NULL == sip, CONTACTS_ERROR_OUT_OF_MEMORY,
890                         "calloc() Fail");
891
892         *out_record = (contacts_record_h)sip;
893         return CONTACTS_ERROR_NONE;
894 }
895
896 static int __ctsvc_name_destroy(contacts_record_h record, bool delete_child)
897 {
898         ctsvc_name_s *name = (ctsvc_name_s*)record;
899         name->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
900         free(name->base.properties_flags);
901
902         free(name->first);
903         free(name->last);
904         free(name->addition);
905         free(name->prefix);
906         free(name->suffix);
907         free(name->phonetic_first);
908         free(name->phonetic_middle);
909         free(name->phonetic_last);
910         free(name->lookup);
911         free(name->reverse_lookup);
912         free(name);
913
914         return CONTACTS_ERROR_NONE;
915 };
916
917 static void __ctsvc_temp_image_hash_table_insert(char *filename)
918 {
919         int count = 0;
920         if (NULL == __ctsvc_temp_image_file_hash_table)
921                 __ctsvc_temp_image_file_hash_table = g_hash_table_new(g_str_hash, g_str_equal);
922
923         count = GPOINTER_TO_INT(g_hash_table_lookup(__ctsvc_temp_image_file_hash_table, filename));
924         g_hash_table_insert(__ctsvc_temp_image_file_hash_table, filename, GINT_TO_POINTER(count+1));
925 }
926
927 static void __ctsvc_temp_image_hash_table_remove(char *filename)
928 {
929         int count = 0;
930
931         if (NULL == __ctsvc_temp_image_file_hash_table) {
932                 if (unlink(filename) < 0)
933                         WARN("unlink Fail(%d)", errno);
934                 return;
935         }
936
937         count = GPOINTER_TO_INT(g_hash_table_lookup(__ctsvc_temp_image_file_hash_table, filename));
938         if (count < 1) {
939                 if (unlink(filename) < 0)
940                         WARN("unlink Fail(%d)", errno);
941         } else if (1 == count) {
942                 g_hash_table_remove(__ctsvc_temp_image_file_hash_table, filename);
943                 if (0 == g_hash_table_size(__ctsvc_temp_image_file_hash_table)) {
944                         g_hash_table_destroy(__ctsvc_temp_image_file_hash_table);
945                         __ctsvc_temp_image_file_hash_table = NULL;
946                 }
947         } else {
948                 g_hash_table_insert(__ctsvc_temp_image_file_hash_table, filename, GINT_TO_POINTER(count-1));
949         }
950 }
951
952 static int __ctsvc_company_destroy(contacts_record_h record, bool delete_child)
953 {
954         ctsvc_company_s *company = (ctsvc_company_s*)record;
955         company->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
956         free(company->base.properties_flags);
957
958         free(company->label);
959         free(company->name);
960         free(company->department);
961         free(company->job_title);
962         free(company->role);
963         free(company->assistant_name);
964         if (company->logo && company->is_vcard)
965                 __ctsvc_temp_image_hash_table_remove(company->logo);
966         free(company->logo);
967         free(company->location);
968         free(company->description);
969         free(company->phonetic_name);
970         free(company);
971
972         return CONTACTS_ERROR_NONE;
973 };
974
975 static int __ctsvc_note_destroy(contacts_record_h record, bool delete_child)
976 {
977         ctsvc_note_s *note = (ctsvc_note_s*)record;
978         note->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
979         free(note->base.properties_flags);
980
981         free(note->note);
982         free(note);
983
984         return CONTACTS_ERROR_NONE;
985 };
986
987 static int __ctsvc_number_destroy(contacts_record_h record, bool delete_child)
988 {
989         ctsvc_number_s *number = (ctsvc_number_s*)record;
990         number->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
991         free(number->base.properties_flags);
992
993         free(number->label);
994         free(number->number);
995         free(number->normalized);
996         free(number->cleaned);
997         free(number->lookup);
998         free(number);
999
1000         return CONTACTS_ERROR_NONE;
1001 }
1002
1003 static int __ctsvc_email_destroy(contacts_record_h record, bool delete_child)
1004 {
1005         ctsvc_email_s *email = (ctsvc_email_s*)record;
1006         email->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1007         free(email->base.properties_flags);
1008
1009         free(email->label);
1010         free(email->email_addr);
1011         free(email);
1012
1013         return CONTACTS_ERROR_NONE;
1014 }
1015
1016 static int __ctsvc_group_relation_destroy(contacts_record_h record, bool delete_child)
1017 {
1018         ctsvc_group_relation_s *group = (ctsvc_group_relation_s*)record;
1019         group->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1020         free(group->base.properties_flags);
1021
1022         free(group->group_name);
1023         free(group);
1024
1025         return CONTACTS_ERROR_NONE;
1026 }
1027
1028 static int __ctsvc_activity_destroy(contacts_record_h record, bool delete_child)
1029 {
1030         ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
1031         activity->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1032         free(activity->base.properties_flags);
1033
1034         free(activity->source_name);
1035         free(activity->status);
1036         free(activity->service_operation);
1037         free(activity->uri);
1038         contacts_list_destroy((contacts_list_h)activity->photos, delete_child);
1039         free(activity);
1040
1041         return CONTACTS_ERROR_NONE;
1042 }
1043
1044 static int __ctsvc_activity_photo_destroy(contacts_record_h record, bool delete_child)
1045 {
1046         ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
1047         photo->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1048         free(photo->base.properties_flags);
1049
1050         free(photo->photo_url);
1051         free(photo);
1052
1053         return CONTACTS_ERROR_NONE;
1054 }
1055
1056 static int __ctsvc_event_destroy(contacts_record_h record, bool delete_child)
1057 {
1058         ctsvc_event_s *event = (ctsvc_event_s*)record;
1059         event->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1060         free(event->base.properties_flags);
1061
1062         free(event->label);
1063         free(event);
1064
1065         return CONTACTS_ERROR_NONE;
1066 }
1067
1068 static int __ctsvc_messenger_destroy(contacts_record_h record, bool delete_child)
1069 {
1070         ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
1071         messenger->base.plugin_cbs = NULL;
1072         free(messenger->base.properties_flags);
1073
1074         free(messenger->label);
1075         free(messenger->im_id);
1076         free(messenger);
1077
1078         return CONTACTS_ERROR_NONE;
1079 }
1080
1081 static int __ctsvc_address_destroy(contacts_record_h record, bool delete_child)
1082 {
1083         ctsvc_address_s *address = (ctsvc_address_s*)record;
1084         address->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1085         free(address->base.properties_flags);
1086
1087         free(address->label);
1088         free(address->pobox);
1089         free(address->postalcode);
1090         free(address->region);
1091         free(address->locality);
1092         free(address->street);
1093         free(address->extended);
1094         free(address->country);
1095         free(address);
1096
1097         return CONTACTS_ERROR_NONE;
1098 }
1099 static int __ctsvc_url_destroy(contacts_record_h record, bool delete_child)
1100 {
1101         ctsvc_url_s *url = (ctsvc_url_s*)record;
1102         url->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1103         free(url->base.properties_flags);
1104
1105         free(url->label);
1106         free(url->url);
1107         free(url);
1108
1109         return CONTACTS_ERROR_NONE;
1110 }
1111 static int __ctsvc_nickname_destroy(contacts_record_h record, bool delete_child)
1112 {
1113         ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
1114         nickname->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1115         free(nickname->base.properties_flags);
1116
1117         free(nickname->label);
1118         free(nickname->nickname);
1119         free(nickname);
1120
1121         return CONTACTS_ERROR_NONE;
1122 }
1123
1124 static int __ctsvc_profile_destroy(contacts_record_h record, bool delete_child)
1125 {
1126         ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
1127         profile->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1128         free(profile->base.properties_flags);
1129
1130         free(profile->uid);
1131         free(profile->text);
1132         free(profile->service_operation);
1133         free(profile->mime);
1134         free(profile->app_id);
1135         free(profile->uri);
1136         free(profile->category);
1137         free(profile->extra_data);
1138         free(profile);
1139
1140         return CONTACTS_ERROR_NONE;
1141 }
1142 static int __ctsvc_relationship_destroy(contacts_record_h record, bool delete_child)
1143 {
1144         ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
1145         relationship->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1146         free(relationship->base.properties_flags);
1147
1148         free(relationship->label);
1149         free(relationship->name);
1150         free(relationship);
1151
1152         return CONTACTS_ERROR_NONE;
1153 }
1154
1155 static int __ctsvc_image_destroy(contacts_record_h record, bool delete_child)
1156 {
1157         ctsvc_image_s *image = (ctsvc_image_s*)record;
1158         image->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1159         free(image->base.properties_flags);
1160
1161         free(image->label);
1162         if (image->path && image->is_vcard)
1163                 __ctsvc_temp_image_hash_table_remove(image->path);
1164         free(image->path);
1165         free(image);
1166
1167         return CONTACTS_ERROR_NONE;
1168 }
1169
1170 static int __ctsvc_extension_destroy(contacts_record_h record, bool delete_child)
1171 {
1172         ctsvc_extension_s *data = (ctsvc_extension_s*)record;
1173         data->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1174         free(data->base.properties_flags);
1175
1176         free(data->data2);
1177         free(data->data3);
1178         free(data->data4);
1179         free(data->data5);
1180         free(data->data6);
1181         free(data->data7);
1182         free(data->data8);
1183         free(data->data9);
1184         free(data->data10);
1185         free(data->data11);
1186         free(data->data12);
1187         free(data);
1188
1189         return CONTACTS_ERROR_NONE;
1190 }
1191
1192 static int __ctsvc_simple_contact_destroy(contacts_record_h record, bool delete_child)
1193 {
1194         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
1195
1196         /* help to find double destroy bug (refer to the contacts_record_destroy) */
1197         contact->base.plugin_cbs = NULL;
1198
1199         free(contact->base.properties_flags);
1200         free(contact->display_name);
1201         free(contact->image_thumbnail_path);
1202         free(contact->ringtone_path);
1203         free(contact->vibration);
1204         free(contact->message_alert);
1205         free(contact->uid);
1206         free(contact);
1207
1208         return CONTACTS_ERROR_NONE;
1209 }
1210
1211 static int __ctsvc_sip_destroy(contacts_record_h record, bool delete_child)
1212 {
1213         ctsvc_sip_s *sip = (ctsvc_sip_s*)record;
1214         sip->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1215         free(sip->base.properties_flags);
1216
1217         free(sip->address);
1218         free(sip->label);
1219         free(sip);
1220
1221         return CONTACTS_ERROR_NONE;
1222 }
1223
1224 static int __ctsvc_contact_create(contacts_record_h *out_record)
1225 {
1226         ctsvc_contact_s *contact;
1227
1228         contact = calloc(1, sizeof(ctsvc_contact_s));
1229         RETVM_IF(NULL == contact, CONTACTS_ERROR_OUT_OF_MEMORY,
1230                         "calloc() Fail");
1231
1232         do {
1233                 contact->name = calloc(1, sizeof(ctsvc_list_s));
1234                 if (NULL == contact->name)
1235                         break;
1236                 contact->name->l_type = CTSVC_RECORD_NAME;
1237
1238                 contact->company = calloc(1, sizeof(ctsvc_list_s));
1239                 if (NULL == contact->company)
1240                         break;
1241                 contact->company->l_type = CTSVC_RECORD_COMPANY;
1242
1243                 contact->note = calloc(1, sizeof(ctsvc_list_s));
1244                 if (NULL == contact->note)
1245                         break;
1246                 contact->note->l_type = CTSVC_RECORD_NOTE;
1247
1248                 contact->numbers = calloc(1, sizeof(ctsvc_list_s));
1249                 if (NULL == contact->numbers)
1250                         break;
1251                 contact->numbers->l_type = CTSVC_RECORD_NUMBER;
1252
1253                 contact->emails = calloc(1, sizeof(ctsvc_list_s));
1254                 if (NULL == contact->emails)
1255                         break;
1256                 contact->emails->l_type = CTSVC_RECORD_EMAIL;
1257
1258                 contact->grouprelations = calloc(1, sizeof(ctsvc_list_s));
1259                 if (NULL == contact->grouprelations)
1260                         break;
1261                 contact->grouprelations->l_type = CTSVC_RECORD_GROUP_RELATION;
1262
1263                 contact->events = calloc(1, sizeof(ctsvc_list_s));
1264                 if (NULL == contact->events)
1265                         break;
1266                 contact->events->l_type = CTSVC_RECORD_EVENT;
1267
1268                 contact->messengers = calloc(1, sizeof(ctsvc_list_s));
1269                 if (NULL == contact->messengers)
1270                         break;
1271                 contact->messengers->l_type = CTSVC_RECORD_MESSENGER;
1272
1273                 contact->postal_addrs = calloc(1, sizeof(ctsvc_list_s));
1274                 if (NULL == contact->postal_addrs)
1275                         break;
1276                 contact->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
1277
1278                 contact->urls = calloc(1, sizeof(ctsvc_list_s));
1279                 if (NULL == contact->urls)
1280                         break;
1281                 contact->urls->l_type = CTSVC_RECORD_URL;
1282
1283                 contact->nicknames = calloc(1, sizeof(ctsvc_list_s));
1284                 if (NULL == contact->nicknames)
1285                         break;
1286                 contact->nicknames->l_type = CTSVC_RECORD_NICKNAME;
1287
1288                 contact->profiles = calloc(1, sizeof(ctsvc_list_s));
1289                 if (NULL == contact->profiles)
1290                         break;
1291                 contact->profiles->l_type = CTSVC_RECORD_PROFILE;
1292
1293                 contact->relationships = calloc(1, sizeof(ctsvc_list_s));
1294                 if (NULL == contact->relationships)
1295                         break;
1296                 contact->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
1297
1298                 contact->images = calloc(1, sizeof(ctsvc_list_s));
1299                 if (NULL == contact->images)
1300                         break;
1301                 contact->images->l_type = CTSVC_RECORD_IMAGE;
1302
1303                 contact->extensions = calloc(1, sizeof(ctsvc_list_s));
1304                 if (NULL == contact->extensions)
1305                         break;
1306                 contact->extensions->l_type = CTSVC_RECORD_EXTENSION;
1307
1308                 contact->sips = calloc(1, sizeof(ctsvc_list_s));
1309                 if (NULL == contact->sips)
1310                         break;
1311                 contact->sips->l_type = CTSVC_RECORD_SIP;
1312
1313                 *out_record = (contacts_record_h)contact;
1314                 return CONTACTS_ERROR_NONE;
1315         } while (0);
1316
1317         /* LCOV_EXCL_START */
1318         ERR("calloc() Fail");
1319         free(contact->extensions);
1320         free(contact->images);
1321         free(contact->relationships);
1322         free(contact->profiles);
1323         free(contact->nicknames);
1324         free(contact->urls);
1325         free(contact->postal_addrs);
1326         free(contact->messengers);
1327         free(contact->events);
1328         free(contact->grouprelations);
1329         free(contact->emails);
1330         free(contact->numbers);
1331         free(contact->note);
1332         free(contact->company);
1333         free(contact->name);
1334         free(contact->sips);
1335         free(contact);
1336         return CONTACTS_ERROR_OUT_OF_MEMORY;
1337         /* LCOV_EXCL_STOP */
1338 }
1339
1340 static int __ctsvc_contact_destroy(contacts_record_h record, bool delete_child)
1341 {
1342         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
1343         contact->base.plugin_cbs = NULL; /* help to find double destroy bug (refer to the contacts_record_destroy) */
1344         free(contact->base.properties_flags);
1345
1346         free(contact->display_name);
1347         free(contact->reverse_display_name);
1348         free(contact->uid);
1349         free(contact->image_thumbnail_path);
1350         free(contact->ringtone_path);
1351         free(contact->vibration);
1352         free(contact->message_alert);
1353         free(contact->sort_name);
1354         free(contact->reverse_sort_name);
1355         free(contact->sortkey);
1356         free(contact->reverse_sortkey);
1357
1358         contacts_list_destroy((contacts_list_h)contact->name, delete_child);
1359
1360         contacts_list_destroy((contacts_list_h)contact->company, delete_child);
1361
1362         contacts_list_destroy((contacts_list_h)contact->note, delete_child);
1363
1364         contacts_list_destroy((contacts_list_h)contact->numbers, delete_child);
1365
1366         contacts_list_destroy((contacts_list_h)contact->emails, delete_child);
1367
1368         contacts_list_destroy((contacts_list_h)contact->grouprelations, delete_child);
1369
1370         contacts_list_destroy((contacts_list_h)contact->events, delete_child);
1371
1372         contacts_list_destroy((contacts_list_h)contact->messengers, delete_child);
1373
1374         contacts_list_destroy((contacts_list_h)contact->postal_addrs, delete_child);
1375
1376         contacts_list_destroy((contacts_list_h)contact->urls, delete_child);
1377
1378         contacts_list_destroy((contacts_list_h)contact->nicknames, delete_child);
1379
1380         contacts_list_destroy((contacts_list_h)contact->profiles, delete_child);
1381
1382         contacts_list_destroy((contacts_list_h)contact->relationships, delete_child);
1383
1384         contacts_list_destroy((contacts_list_h)contact->images, delete_child);
1385
1386         contacts_list_destroy((contacts_list_h)contact->extensions, delete_child);
1387
1388         contacts_list_destroy((contacts_list_h)contact->sips, delete_child);
1389         free(contact);
1390
1391         return CONTACTS_ERROR_NONE;
1392 }
1393
1394
1395 static int __ctsvc_contact_get_int(contacts_record_h record, unsigned int property_id, int *out)
1396 {
1397         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
1398
1399         switch (property_id) {
1400         case CTSVC_PROPERTY_CONTACT_ID:
1401                 *out = contact->id;
1402                 break;
1403         case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
1404                 *out = contact->display_source_type;
1405                 break;
1406         case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
1407                 *out = contact->addressbook_id;
1408                 break;
1409         case CTSVC_PROPERTY_CONTACT_PERSON_ID:
1410                 *out = contact->person_id;
1411                 break;
1412         case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
1413                 *out = contact->changed_time;
1414                 break;
1415         case CTSVC_PROPERTY_CONTACT_LINK_MODE:
1416                 *out = contact->link_mode;
1417                 break;
1418         default:
1419                 /* LCOV_EXCL_START */
1420                 ERR("property_id(%d) is not supported in value(contact)", property_id);
1421                 return CONTACTS_ERROR_INVALID_PARAMETER;
1422                 /* LCOV_EXCL_STOP */
1423         }
1424         return CONTACTS_ERROR_NONE;
1425 }
1426
1427 static int __ctsvc_simple_contact_get_int(contacts_record_h record, unsigned int property_id, int *out)
1428 {
1429         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
1430
1431         switch (property_id) {
1432         case CTSVC_PROPERTY_CONTACT_ID:
1433                 *out = contact->contact_id;
1434                 break;
1435         case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
1436                 *out = contact->display_source_type;
1437                 break;
1438         case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
1439                 *out = contact->addressbook_id;
1440                 break;
1441         case CTSVC_PROPERTY_CONTACT_PERSON_ID:
1442                 *out = contact->person_id;
1443                 break;
1444         case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
1445                 *out = contact->changed_time;
1446                 break;
1447         default:
1448                 /* LCOV_EXCL_START */
1449                 ERR("property_id(%d) is not supported in value(simple contact)", property_id);
1450                 return CONTACTS_ERROR_INVALID_PARAMETER;
1451                 /* LCOV_EXCL_STOP */
1452         }
1453         return CONTACTS_ERROR_NONE;
1454 }
1455
1456 static int __ctsvc_name_get_int(contacts_record_h record, unsigned int property_id, int *out)
1457 {
1458         ctsvc_name_s *name = (ctsvc_name_s*)record;
1459
1460         switch (property_id) {
1461         case CTSVC_PROPERTY_NAME_ID:
1462                 *out = name->id;
1463                 break;
1464         case CTSVC_PROPERTY_NAME_CONTACT_ID:
1465                 *out = name->contact_id;
1466                 break;
1467         default:
1468                 /* LCOV_EXCL_START */
1469                 ERR("property_id(%d) is not supported in value(name)", property_id);
1470                 return CONTACTS_ERROR_INVALID_PARAMETER;
1471                 /* LCOV_EXCL_STOP */
1472         }
1473         return CONTACTS_ERROR_NONE;
1474 }
1475
1476 static int __ctsvc_company_get_int(contacts_record_h record, unsigned int property_id, int *out)
1477 {
1478         ctsvc_company_s *company = (ctsvc_company_s*)record;
1479
1480         switch (property_id) {
1481         case CTSVC_PROPERTY_COMPANY_ID:
1482                 *out = company->id;
1483                 break;
1484         case CTSVC_PROPERTY_COMPANY_CONTACT_ID:
1485                 *out = company->contact_id;
1486                 break;
1487         case CTSVC_PROPERTY_COMPANY_TYPE:
1488                 *out = company->type;
1489                 break;
1490         default:
1491                 /* LCOV_EXCL_START */
1492                 ERR("property_id(%d) is not supported in value(company)", property_id);
1493                 return CONTACTS_ERROR_INVALID_PARAMETER;
1494                 /* LCOV_EXCL_STOP */
1495         }
1496         return CONTACTS_ERROR_NONE;
1497 }
1498
1499 static int __ctsvc_note_get_int(contacts_record_h record, unsigned int property_id, int *out)
1500 {
1501         ctsvc_note_s *note = (ctsvc_note_s*)record;
1502
1503         switch (property_id) {
1504         case CTSVC_PROPERTY_NOTE_ID:
1505                 *out = note->id;
1506                 break;
1507         case CTSVC_PROPERTY_NOTE_CONTACT_ID:
1508                 *out = note->contact_id;
1509                 break;
1510         default:
1511                 /* LCOV_EXCL_START */
1512                 ERR("property_id(%d) is not supported in value(note)", property_id);
1513                 return CONTACTS_ERROR_INVALID_PARAMETER;
1514                 /* LCOV_EXCL_STOP */
1515         }
1516         return CONTACTS_ERROR_NONE;
1517 }
1518
1519 static int __ctsvc_number_get_int(contacts_record_h record, unsigned int property_id, int *out)
1520 {
1521         ctsvc_number_s *number = (ctsvc_number_s*)record;
1522
1523         switch (property_id) {
1524         case CTSVC_PROPERTY_NUMBER_ID:
1525                 *out = number->id;
1526                 break;
1527         case CTSVC_PROPERTY_NUMBER_CONTACT_ID:
1528                 *out = number->contact_id;
1529                 break;
1530         case CTSVC_PROPERTY_NUMBER_TYPE:
1531                 *out = number->type;
1532                 break;
1533         default:
1534                 /* LCOV_EXCL_START */
1535                 ERR("property_id(%d) is not supported in value(number)", property_id);
1536                 return CONTACTS_ERROR_INVALID_PARAMETER;
1537                 /* LCOV_EXCL_STOP */
1538         }
1539         return CONTACTS_ERROR_NONE;
1540 }
1541
1542 static int __ctsvc_email_get_int(contacts_record_h record, unsigned int property_id, int *out)
1543 {
1544         ctsvc_email_s *email = (ctsvc_email_s*)record;
1545
1546         switch (property_id) {
1547         case CTSVC_PROPERTY_EMAIL_ID:
1548                 *out = email->id;
1549                 break;
1550         case CTSVC_PROPERTY_EMAIL_CONTACT_ID:
1551                 *out = email->contact_id;
1552                 break;
1553         case CTSVC_PROPERTY_EMAIL_TYPE:
1554                 *out = email->type;
1555                 break;
1556         default:
1557                 /* LCOV_EXCL_START */
1558                 ERR("property_id(%d) is not supported in value(email)", property_id);
1559                 return CONTACTS_ERROR_INVALID_PARAMETER;
1560                 /* LCOV_EXCL_STOP */
1561         }
1562         return CONTACTS_ERROR_NONE;
1563 }
1564
1565 static int __ctsvc_url_get_int(contacts_record_h record, unsigned int property_id, int *out)
1566 {
1567         ctsvc_url_s *url = (ctsvc_url_s*)record;
1568
1569         switch (property_id) {
1570         case CTSVC_PROPERTY_URL_ID:
1571                 *out = url->id;
1572                 break;
1573         case CTSVC_PROPERTY_URL_CONTACT_ID:
1574                 *out = url->contact_id;
1575                 break;
1576         case CTSVC_PROPERTY_URL_TYPE:
1577                 *out = url->type;
1578                 break;
1579         default:
1580                 /* LCOV_EXCL_START */
1581                 ERR("property_id(%d) is not supported in value(url)", property_id);
1582                 return CONTACTS_ERROR_INVALID_PARAMETER;
1583                 /* LCOV_EXCL_STOP */
1584         }
1585         return CONTACTS_ERROR_NONE;
1586 }
1587
1588 static int __ctsvc_event_get_int(contacts_record_h record, unsigned int property_id, int *out)
1589 {
1590         ctsvc_event_s *event = (ctsvc_event_s*)record;
1591
1592         switch (property_id) {
1593         case CTSVC_PROPERTY_EVENT_ID:
1594                 *out = event->id;
1595                 break;
1596         case CTSVC_PROPERTY_EVENT_CONTACT_ID:
1597                 *out = event->contact_id;
1598                 break;
1599         case CTSVC_PROPERTY_EVENT_TYPE:
1600                 *out = event->type;
1601                 break;
1602         case CTSVC_PROPERTY_EVENT_DATE:
1603                 *out = event->date;
1604                 break;
1605         case CTSVC_PROPERTY_EVENT_CALENDAR_TYPE:
1606                 *out = event->calendar_type;
1607                 break;
1608         default:
1609                 /* LCOV_EXCL_START */
1610                 ERR("property_id(%d) is not supported in value(event)", property_id);
1611                 return CONTACTS_ERROR_INVALID_PARAMETER;
1612                 /* LCOV_EXCL_STOP */
1613         }
1614         return CONTACTS_ERROR_NONE;
1615 }
1616
1617 static int __ctsvc_nickname_get_int(contacts_record_h record, unsigned int property_id, int *out)
1618 {
1619         ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
1620
1621         switch (property_id) {
1622         case CTSVC_PROPERTY_NICKNAME_ID:
1623                 *out = nickname->id;
1624                 break;
1625         case CTSVC_PROPERTY_NICKNAME_CONTACT_ID:
1626                 *out = nickname->contact_id;
1627                 break;
1628         default:
1629                 /* LCOV_EXCL_START */
1630                 ERR("property_id(%d) is not supported in value(nickname)", property_id);
1631                 return CONTACTS_ERROR_INVALID_PARAMETER;
1632                 /* LCOV_EXCL_STOP */
1633         }
1634         return CONTACTS_ERROR_NONE;
1635 }
1636
1637 static int __ctsvc_address_get_int(contacts_record_h record, unsigned int property_id, int *out)
1638 {
1639         ctsvc_address_s *address = (ctsvc_address_s*)record;
1640
1641         switch (property_id) {
1642         case CTSVC_PROPERTY_ADDRESS_ID:
1643                 *out = address->id;
1644                 break;
1645         case CTSVC_PROPERTY_ADDRESS_CONTACT_ID:
1646                 *out = address->contact_id;
1647                 break;
1648         case CTSVC_PROPERTY_ADDRESS_TYPE:
1649                 *out = address->type;
1650                 break;
1651         default:
1652                 /* LCOV_EXCL_START */
1653                 ERR("property_id(%d) is not supported in value(address)", property_id);
1654                 return CONTACTS_ERROR_INVALID_PARAMETER;
1655                 /* LCOV_EXCL_STOP */
1656         }
1657         return CONTACTS_ERROR_NONE;
1658 }
1659
1660 static int __ctsvc_messenger_get_int(contacts_record_h record, unsigned int property_id, int *out)
1661 {
1662         ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
1663
1664         switch (property_id) {
1665         case CTSVC_PROPERTY_MESSENGER_ID:
1666                 *out = messenger->id;
1667                 break;
1668         case CTSVC_PROPERTY_MESSENGER_CONTACT_ID:
1669                 *out = messenger->contact_id;
1670                 break;
1671         case CTSVC_PROPERTY_MESSENGER_TYPE:
1672                 *out = messenger->type;
1673                 break;
1674         default:
1675                 /* LCOV_EXCL_START */
1676                 ERR("property_id(%d) is not supported in value(messenger)", property_id);
1677                 return CONTACTS_ERROR_INVALID_PARAMETER;
1678                 /* LCOV_EXCL_STOP */
1679         }
1680         return CONTACTS_ERROR_NONE;
1681 }
1682
1683 static int __ctsvc_group_relation_get_int(contacts_record_h record, unsigned int property_id, int *out)
1684 {
1685         ctsvc_group_relation_s *group = (ctsvc_group_relation_s*)record;
1686
1687         switch (property_id) {
1688         case CTSVC_PROPERTY_GROUP_RELATION_ID:
1689                 *out = group->id;
1690                 break;
1691         case CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID:
1692                 *out = group->contact_id;
1693                 break;
1694         case CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID:
1695                 *out = group->group_id;
1696                 break;
1697         default:
1698                 /* LCOV_EXCL_START */
1699                 ERR("property_id(%d) is not supported in value(group)", property_id);
1700                 return CONTACTS_ERROR_INVALID_PARAMETER;
1701                 /* LCOV_EXCL_STOP */
1702         }
1703         return CONTACTS_ERROR_NONE;
1704 }
1705
1706 static int __ctsvc_activity_get_int(contacts_record_h record, unsigned int property_id, int *out)
1707 {
1708         ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
1709
1710         switch (property_id) {
1711         case CTSVC_PROPERTY_ACTIVITY_ID:
1712                 *out = activity->id;
1713                 break;
1714         case CTSVC_PROPERTY_ACTIVITY_CONTACT_ID:
1715                 *out = activity->contact_id;
1716                 break;
1717         case CTSVC_PROPERTY_ACTIVITY_TIMESTAMP:
1718                 *out = activity->timestamp;
1719                 break;
1720         default:
1721                 /* LCOV_EXCL_START */
1722                 ERR("property_id(%d) is not supported in value(activity)", property_id);
1723                 return CONTACTS_ERROR_INVALID_PARAMETER;
1724                 /* LCOV_EXCL_STOP */
1725         }
1726         return CONTACTS_ERROR_NONE;
1727 }
1728
1729 static int __ctsvc_activity_add_child_record(contacts_record_h record,
1730                 unsigned int property_id, contacts_record_h child_record)
1731 {
1732         ctsvc_activity_s *s_activity = (ctsvc_activity_s*)record;
1733         ctsvc_activity_photo_s *s_activity_photo = (ctsvc_activity_photo_s*)child_record;
1734
1735         RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO,
1736                         CONTACTS_ERROR_INVALID_PARAMETER,
1737                         "property_id(%d) is not supported",
1738                         property_id);
1739         RETVM_IF(s_activity_photo->base.r_type != CTSVC_RECORD_ACTIVITY_PHOTO,
1740                         CONTACTS_ERROR_INVALID_PARAMETER,
1741                         "r_type(%d) is wrong",
1742                         s_activity_photo->base.r_type);
1743         s_activity_photo->id = 0;
1744
1745         return ctsvc_list_add_child((contacts_list_h)s_activity->photos, child_record);
1746 }
1747
1748 static int __ctsvc_activity_remove_child_record(contacts_record_h record,
1749                 unsigned int property_id, contacts_record_h child_record)
1750 {
1751         ctsvc_activity_s *s_activity = (ctsvc_activity_s*)record;
1752         ctsvc_activity_photo_s *s_activity_photo = (ctsvc_activity_photo_s*)child_record;
1753
1754         RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO,
1755                         CONTACTS_ERROR_INVALID_PARAMETER,
1756                         "property_id(%d) is not supported",
1757                         property_id);
1758
1759         ctsvc_list_remove_child((contacts_list_h)s_activity->photos, child_record,
1760                         s_activity_photo->id ? true : false);
1761
1762         return CONTACTS_ERROR_NONE;
1763 }
1764
1765 static int __ctsvc_activity_get_child_record_count(contacts_record_h record,
1766                 unsigned int property_id, int *count)
1767 {
1768         ctsvc_activity_s *s_activity = (ctsvc_activity_s*)record;
1769         RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO, CONTACTS_ERROR_INVALID_PARAMETER, "property_id(%d) is not supported", property_id);
1770
1771         if (s_activity->photos)
1772                 contacts_list_get_count((contacts_list_h)s_activity->photos, count);
1773
1774         return CONTACTS_ERROR_NONE;
1775 }
1776
1777 static int __ctsvc_activity_get_child_record_at_p(contacts_record_h record,
1778                 unsigned int property_id, int index, contacts_record_h *out_record)
1779 {
1780         int count = 0;
1781         ctsvc_activity_s *s_activity = (ctsvc_activity_s*)record;
1782
1783         RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO, CONTACTS_ERROR_INVALID_PARAMETER, "property_id(%d) is not supported", property_id);
1784
1785         if (s_activity->photos)
1786                 contacts_list_get_count((contacts_list_h)s_activity->photos, &count);
1787
1788         if (count < index) {
1789                 /* LCOV_EXCL_START */
1790                 ERR("The index(%d) is greather than total length(%d)", index, count);
1791                 *out_record = NULL;
1792                 return CONTACTS_ERROR_NO_DATA;
1793                 /* LCOV_EXCL_STOP */
1794         }
1795
1796         return ctsvc_list_get_nth_record_p((contacts_list_h)s_activity->photos, index, out_record);
1797 }
1798
1799
1800 static int __ctsvc_activity_clone_child_record_list(contacts_record_h record,
1801                 unsigned int property_id, contacts_list_h *out_list)
1802 {
1803         int count;
1804         ctsvc_activity_s *s_activity = (ctsvc_activity_s*)record;
1805
1806         RETVM_IF(property_id != CTSVC_PROPERTY_ACTIVITY_ACTIVITY_PHOTO, CONTACTS_ERROR_INVALID_PARAMETER, "property_id(%d) is not supported", property_id);
1807
1808         contacts_list_get_count((contacts_list_h)s_activity->photos, &count);
1809         if (count <= 0) {
1810                 *out_list = NULL;
1811                 return CONTACTS_ERROR_NO_DATA;
1812         }
1813         return ctsvc_list_clone((contacts_list_h)s_activity->photos, out_list);
1814 }
1815
1816
1817 static int __ctsvc_activity_photo_get_int(contacts_record_h record, unsigned int property_id, int *out)
1818 {
1819         ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
1820
1821         switch (property_id) {
1822         case CTSVC_PROPERTY_ACTIVITY_PHOTO_ID:
1823                 *out = photo->id;
1824                 break;
1825         case CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID:
1826                 *out = photo->activity_id;
1827                 break;
1828         case CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX:
1829                 *out = photo->sort_index;
1830                 break;
1831         default:
1832                 /* LCOV_EXCL_START */
1833                 ERR("property_id(%d) is not supported in value(activity)", property_id);
1834                 return CONTACTS_ERROR_INVALID_PARAMETER;
1835                 /* LCOV_EXCL_STOP */
1836         }
1837         return CONTACTS_ERROR_NONE;
1838 }
1839
1840 static int __ctsvc_profile_get_int(contacts_record_h record, unsigned int property_id, int *out)
1841 {
1842         ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
1843
1844         switch (property_id) {
1845         case CTSVC_PROPERTY_PROFILE_ID:
1846                 *out = profile->id;
1847                 break;
1848         case CTSVC_PROPERTY_PROFILE_CONTACT_ID:
1849                 *out = profile->contact_id;
1850                 break;
1851         case CTSVC_PROPERTY_PROFILE_ORDER:
1852                 *out = profile->order;
1853                 break;
1854         default:
1855                 /* LCOV_EXCL_START */
1856                 ERR("property_id(%d) is not supported in value(profile)", property_id);
1857                 return CONTACTS_ERROR_INVALID_PARAMETER;
1858                 /* LCOV_EXCL_STOP */
1859         }
1860         return CONTACTS_ERROR_NONE;
1861 }
1862
1863 static int __ctsvc_relationship_get_int(contacts_record_h record, unsigned int property_id, int *out)
1864 {
1865         ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
1866
1867         switch (property_id) {
1868         case CTSVC_PROPERTY_RELATIONSHIP_ID:
1869                 *out = relationship->id;
1870                 break;
1871         case CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID:
1872                 *out = relationship->contact_id;
1873                 break;
1874         case CTSVC_PROPERTY_RELATIONSHIP_TYPE:
1875                 *out = relationship->type;
1876                 break;
1877         default:
1878                 /* LCOV_EXCL_START */
1879                 ERR("property_id(%d) is not supported in value(relationship)", property_id);
1880                 return CONTACTS_ERROR_INVALID_PARAMETER;
1881                 /* LCOV_EXCL_STOP */
1882         }
1883         return CONTACTS_ERROR_NONE;
1884 }
1885
1886 static int __ctsvc_image_get_int(contacts_record_h record, unsigned int property_id, int *out)
1887 {
1888         ctsvc_image_s *image = (ctsvc_image_s*)record;
1889
1890         switch (property_id) {
1891         case CTSVC_PROPERTY_IMAGE_ID:
1892                 *out = image->id;
1893                 break;
1894         case CTSVC_PROPERTY_IMAGE_CONTACT_ID:
1895                 *out = image->contact_id;
1896                 break;
1897         case CTSVC_PROPERTY_IMAGE_TYPE:
1898                 *out = image->type;
1899                 break;
1900         default:
1901                 /* LCOV_EXCL_START */
1902                 ERR("property_id(%d) is not supported in value(image)", property_id);
1903                 return CONTACTS_ERROR_INVALID_PARAMETER;
1904                 /* LCOV_EXCL_STOP */
1905         }
1906         return CONTACTS_ERROR_NONE;
1907 }
1908
1909 static int __ctsvc_extension_get_int(contacts_record_h record, unsigned int property_id, int *out)
1910 {
1911         ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
1912
1913         switch (property_id) {
1914         case CTSVC_PROPERTY_EXTENSION_ID:
1915                 *out = extension->id;
1916                 break;
1917         case CTSVC_PROPERTY_EXTENSION_CONTACT_ID:
1918                 *out = extension->contact_id;
1919                 break;
1920         case CTSVC_PROPERTY_EXTENSION_DATA1:
1921                 *out = extension->data1;
1922                 break;
1923         default:
1924                 /* LCOV_EXCL_START */
1925                 ERR("property_id(%d) is not supported in value(extension)", property_id);
1926                 return CONTACTS_ERROR_INVALID_PARAMETER;
1927                 /* LCOV_EXCL_STOP */
1928         }
1929         return CONTACTS_ERROR_NONE;
1930 }
1931
1932 static int __ctsvc_sip_get_int(contacts_record_h record, unsigned int property_id, int *out)
1933 {
1934         ctsvc_sip_s *sip = (ctsvc_sip_s *)record;
1935
1936         switch (property_id) {
1937         case CTSVC_PROPERTY_SIP_ID:
1938                 *out = sip->id;
1939                 break;
1940         case CTSVC_PROPERTY_SIP_CONTACT_ID:
1941                 *out = sip->contact_id;
1942                 break;
1943         case CTSVC_PROPERTY_SIP_TYPE:
1944                 *out = sip->type;
1945                 break;
1946         default:
1947                 /* LCOV_EXCL_START */
1948                 ERR("Invalid parameter : property_id(%d) is not supported in value(sip)", property_id);
1949                 return CONTACTS_ERROR_INVALID_PARAMETER;
1950                 /* LCOV_EXCL_STOP */
1951         }
1952         return CONTACTS_ERROR_NONE;
1953 }
1954
1955 static int __ctsvc_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
1956 {
1957         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
1958
1959         switch (property_id) {
1960         case CTSVC_PROPERTY_CONTACT_ID:
1961                 CHECK_DIRTY_VAL(contact->id, value, is_dirty);
1962                 contact->id = value;
1963                 break;
1964         case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
1965                 CHECK_DIRTY_VAL(contact->display_source_type, value, is_dirty);
1966                 contact->display_source_type = value;
1967                 break;
1968         case CTSVC_PROPERTY_CONTACT_PERSON_ID:
1969                 RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
1970                                 "property_id(%d) is a read-only value (contact)", property_id);
1971                 CHECK_DIRTY_VAL(contact->person_id, value, is_dirty);
1972                 contact->person_id = value;
1973                 break;
1974         case CTSVC_PROPERTY_CONTACT_CHANGED_TIME:
1975                 CHECK_DIRTY_VAL(contact->changed_time, value, is_dirty);
1976                 contact->changed_time = value;
1977                 break;
1978         case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
1979                 RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
1980                                 "property_id(%d) is a read-only value (contact)", property_id);
1981                 CHECK_DIRTY_VAL(contact->addressbook_id, value, is_dirty);
1982                 contact->addressbook_id = value;
1983                 break;
1984         case CTSVC_PROPERTY_CONTACT_LINK_MODE:
1985                 RETVM_IF(value != CONTACTS_CONTACT_LINK_MODE_NONE
1986                                 && value != CONTACTS_CONTACT_LINK_MODE_IGNORE_ONCE,
1987                                 CONTACTS_ERROR_INVALID_PARAMETER, "link mode is in invalid range (%d)", value);
1988                 RETVM_IF(0 < contact->id, CONTACTS_ERROR_INVALID_PARAMETER,
1989                                 "property_id(%d) is a read-only value (contact)", property_id);
1990                 CHECK_DIRTY_VAL(contact->link_mode, value, is_dirty);
1991                 contact->link_mode = value;
1992                 break;
1993         default:
1994                 /* LCOV_EXCL_START */
1995                 ERR("property_id(%d) is not supported in value (contact)", property_id);
1996                 return CONTACTS_ERROR_INVALID_PARAMETER;
1997                 /* LCOV_EXCL_STOP */
1998         }
1999         return CONTACTS_ERROR_NONE;
2000 }
2001
2002 static int __ctsvc_simple_contact_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2003 {
2004         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
2005
2006         switch (property_id) {
2007         case CTSVC_PROPERTY_CONTACT_ID:
2008                 CHECK_DIRTY_VAL(contact->contact_id, value, is_dirty);
2009                 contact->contact_id = value;
2010                 break;
2011         case CTSVC_PROPERTY_CONTACT_DISPLAY_SOURCE_DATA_ID:
2012                 CHECK_DIRTY_VAL(contact->display_source_type, value, is_dirty);
2013                 contact->display_source_type = value;
2014                 break;
2015         case CTSVC_PROPERTY_CONTACT_PERSON_ID:
2016                 CHECK_DIRTY_VAL(contact->person_id, value, is_dirty);
2017                 contact->person_id = value;
2018                 break;
2019         case CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID:
2020                 RETVM_IF(0 < contact->contact_id, CONTACTS_ERROR_INVALID_PARAMETER,
2021                                 "Invalide parameter : property_id(%d) is a read-only value (contact)", property_id);
2022                 CHECK_DIRTY_VAL(contact->addressbook_id, value, is_dirty);
2023                 contact->addressbook_id = value;
2024                 break;
2025         default:
2026                 /* LCOV_EXCL_START */
2027                 ERR("property_id(%d) is not supported in value(simple contact)", property_id);
2028                 return CONTACTS_ERROR_INVALID_PARAMETER;
2029                 /* LCOV_EXCL_STOP */
2030         }
2031         return CONTACTS_ERROR_NONE;
2032 }
2033
2034 static int __ctsvc_name_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2035 {
2036         ctsvc_name_s *name = (ctsvc_name_s*)record;
2037
2038         switch (property_id) {
2039         case CTSVC_PROPERTY_NAME_ID:
2040                 CHECK_DIRTY_VAL(name->id, value, is_dirty);
2041                 name->id = value;
2042                 break;
2043         case CTSVC_PROPERTY_NAME_CONTACT_ID:
2044                 RETVM_IF(0 < name->id, CONTACTS_ERROR_INVALID_PARAMETER,
2045                                 "property_id(%d) is a read-only value (name)", property_id);
2046                 CHECK_DIRTY_VAL(name->contact_id, value, is_dirty);
2047                 name->contact_id = value;
2048                 break;
2049         default:
2050                 /* LCOV_EXCL_START */
2051                 ERR("property_id(%d) is not supported in value(name)", property_id);
2052                 return CONTACTS_ERROR_INVALID_PARAMETER;
2053                 /* LCOV_EXCL_STOP */
2054         }
2055         return CONTACTS_ERROR_NONE;
2056 }
2057
2058 static int __ctsvc_company_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2059 {
2060         ctsvc_company_s *company = (ctsvc_company_s*)record;
2061
2062         switch (property_id) {
2063         case CTSVC_PROPERTY_COMPANY_ID:
2064                 CHECK_DIRTY_VAL(company->id, value, is_dirty);
2065                 company->id = value;
2066                 break;
2067         case CTSVC_PROPERTY_COMPANY_CONTACT_ID:
2068                 RETVM_IF(0 < company->id, CONTACTS_ERROR_INVALID_PARAMETER,
2069                                 "property_id(%d) is a read-only value (company)", property_id);
2070                 CHECK_DIRTY_VAL(company->contact_id, value, is_dirty);
2071                 company->contact_id = value;
2072                 break;
2073         case CTSVC_PROPERTY_COMPANY_TYPE:
2074                 RETVM_IF(value < CONTACTS_COMPANY_TYPE_OTHER
2075                                 || CONTACTS_COMPANY_TYPE_WORK < value,
2076                                 CONTACTS_ERROR_INVALID_PARAMETER, "company type is in invalid range (%d)", value);
2077
2078                 CHECK_DIRTY_VAL(company->type, value, is_dirty);
2079                 company->type = value;
2080                 break;
2081         default:
2082                 /* LCOV_EXCL_START */
2083                 ERR("property_id(%d) is not supported in value(company)", property_id);
2084                 return CONTACTS_ERROR_INVALID_PARAMETER;
2085                 /* LCOV_EXCL_STOP */
2086         }
2087         return CONTACTS_ERROR_NONE;
2088 }
2089
2090 static int __ctsvc_note_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2091 {
2092         ctsvc_note_s *note = (ctsvc_note_s*)record;
2093
2094         switch (property_id) {
2095         case CTSVC_PROPERTY_NOTE_ID:
2096                 CHECK_DIRTY_VAL(note->id, value, is_dirty);
2097                 note->id = value;
2098                 break;
2099         case CTSVC_PROPERTY_NOTE_CONTACT_ID:
2100                 RETVM_IF(0 < note->id, CONTACTS_ERROR_INVALID_PARAMETER,
2101                                 "property_id(%d) is a read-only value (note)", property_id);
2102                 CHECK_DIRTY_VAL(note->contact_id, value, is_dirty);
2103                 note->contact_id = value;
2104                 break;
2105         default:
2106                 /* LCOV_EXCL_START */
2107                 ERR("property_id(%d) is not supported in value(note)", property_id);
2108                 return CONTACTS_ERROR_INVALID_PARAMETER;
2109                 /* LCOV_EXCL_STOP */
2110         }
2111         return CONTACTS_ERROR_NONE;
2112 }
2113
2114 static int __ctsvc_number_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2115 {
2116         ctsvc_number_s *number = (ctsvc_number_s*)record;
2117
2118         switch (property_id) {
2119         case CTSVC_PROPERTY_NUMBER_ID:
2120                 CHECK_DIRTY_VAL(number->id, value, is_dirty);
2121                 number->id = value;
2122                 break;
2123         case CTSVC_PROPERTY_NUMBER_CONTACT_ID:
2124                 RETVM_IF(0 < number->id, CONTACTS_ERROR_INVALID_PARAMETER,
2125                                 "property_id(%d) is a read-only value (number)", property_id);
2126                 CHECK_DIRTY_VAL(number->contact_id, value, is_dirty);
2127                 number->contact_id = value;
2128                 break;
2129         case CTSVC_PROPERTY_NUMBER_TYPE:
2130                 CHECK_DIRTY_VAL(number->type, value, is_dirty);
2131                 number->type = value;
2132                 break;
2133         default:
2134                 /* LCOV_EXCL_START */
2135                 ERR("property_id(%d) is not supported in value(number)", property_id);
2136                 return CONTACTS_ERROR_INVALID_PARAMETER;
2137                 /* LCOV_EXCL_STOP */
2138         }
2139         return CONTACTS_ERROR_NONE;
2140 }
2141
2142 static int __ctsvc_email_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2143 {
2144         ctsvc_email_s *email = (ctsvc_email_s*)record;
2145
2146         switch (property_id) {
2147         case CTSVC_PROPERTY_EMAIL_ID:
2148                 CHECK_DIRTY_VAL(email->id, value, is_dirty);
2149                 email->id = value;
2150                 break;
2151         case CTSVC_PROPERTY_EMAIL_CONTACT_ID:
2152                 RETVM_IF(0 < email->id, CONTACTS_ERROR_INVALID_PARAMETER,
2153                                 "property_id(%d) is a read-only value (email)", property_id);
2154                 CHECK_DIRTY_VAL(email->contact_id, value, is_dirty);
2155                 email->contact_id = value;
2156                 break;
2157         case CTSVC_PROPERTY_EMAIL_TYPE:
2158                 RETVM_IF(value < CONTACTS_EMAIL_TYPE_OTHER
2159                                 || CONTACTS_EMAIL_TYPE_MOBILE < value,
2160                                 CONTACTS_ERROR_INVALID_PARAMETER, "email type is in invalid range (%d)", value);
2161
2162                 CHECK_DIRTY_VAL(email->type, value, is_dirty);
2163                 email->type = value;
2164                 break;
2165         default:
2166                 /* LCOV_EXCL_START */
2167                 ERR("property_id(%d) is not supported in value(email)", property_id);
2168                 return CONTACTS_ERROR_INVALID_PARAMETER;
2169                 /* LCOV_EXCL_STOP */
2170         }
2171         return CONTACTS_ERROR_NONE;
2172 }
2173
2174 static int __ctsvc_url_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2175 {
2176         ctsvc_url_s *url = (ctsvc_url_s*)record;
2177
2178         switch (property_id) {
2179         case CTSVC_PROPERTY_URL_ID:
2180                 CHECK_DIRTY_VAL(url->id, value, is_dirty);
2181                 url->id = value;
2182                 break;
2183         case CTSVC_PROPERTY_URL_CONTACT_ID:
2184                 RETVM_IF(0 < url->id, CONTACTS_ERROR_INVALID_PARAMETER,
2185                                 "property_id(%d) is a read-only value (url)", property_id);
2186                 CHECK_DIRTY_VAL(url->contact_id, value, is_dirty);
2187                 url->contact_id = value;
2188                 break;
2189         case CTSVC_PROPERTY_URL_TYPE:
2190                 RETVM_IF(value < CONTACTS_URL_TYPE_OTHER
2191                                 || CONTACTS_URL_TYPE_WORK < value,
2192                                 CONTACTS_ERROR_INVALID_PARAMETER, "url type is in invalid range (%d)", value);
2193
2194                 CHECK_DIRTY_VAL(url->type, value, is_dirty);
2195                 url->type = value;
2196                 break;
2197         default:
2198                 /* LCOV_EXCL_START */
2199                 ERR("property_id(%d) is not supported in value(url)", property_id);
2200                 return CONTACTS_ERROR_INVALID_PARAMETER;
2201                 /* LCOV_EXCL_STOP */
2202         }
2203         return CONTACTS_ERROR_NONE;
2204 }
2205
2206 static int __ctsvc_event_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2207 {
2208         ctsvc_event_s *event = (ctsvc_event_s*)record;
2209
2210         switch (property_id) {
2211         case CTSVC_PROPERTY_EVENT_ID:
2212                 CHECK_DIRTY_VAL(event->id, value, is_dirty);
2213                 event->id = value;
2214                 break;
2215         case CTSVC_PROPERTY_EVENT_CONTACT_ID:
2216                 RETVM_IF(0 < event->id, CONTACTS_ERROR_INVALID_PARAMETER,
2217                                 "property_id(%d) is a read-only value (event)", property_id);
2218                 CHECK_DIRTY_VAL(event->contact_id, value, is_dirty);
2219                 event->contact_id = value;
2220                 break;
2221         case CTSVC_PROPERTY_EVENT_TYPE:
2222                 RETVM_IF(value < CONTACTS_EVENT_TYPE_OTHER
2223                                 || CONTACTS_EVENT_TYPE_ANNIVERSARY < value,
2224                                 CONTACTS_ERROR_INVALID_PARAMETER, "event type is in invalid range (%d)", value);
2225                 CHECK_DIRTY_VAL(event->type, value, is_dirty);
2226                 event->type = value;
2227                 break;
2228         case CTSVC_PROPERTY_EVENT_DATE:
2229                 CHECK_DIRTY_VAL(event->date, value, is_dirty);
2230                 event->date = value;
2231                 break;
2232         case CTSVC_PROPERTY_EVENT_CALENDAR_TYPE:
2233                 CHECK_DIRTY_VAL(event->calendar_type, value, is_dirty);
2234                 event->calendar_type = value;
2235                 break;
2236         default:
2237                 /* LCOV_EXCL_START */
2238                 ERR("property_id(%d) is not supported in value(event)", property_id);
2239                 return CONTACTS_ERROR_INVALID_PARAMETER;
2240                 /* LCOV_EXCL_STOP */
2241         }
2242         return CONTACTS_ERROR_NONE;
2243 }
2244
2245 static int __ctsvc_nickname_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2246 {
2247         ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
2248
2249         switch (property_id) {
2250         case CTSVC_PROPERTY_NICKNAME_ID:
2251                 CHECK_DIRTY_VAL(nickname->id, value, is_dirty);
2252                 nickname->id = value;
2253                 break;
2254         case CTSVC_PROPERTY_NICKNAME_CONTACT_ID:
2255                 RETVM_IF(0 < nickname->id, CONTACTS_ERROR_INVALID_PARAMETER,
2256                                 "property_id(%d) is a read-only value (nickname)", property_id);
2257                 CHECK_DIRTY_VAL(nickname->contact_id, value, is_dirty);
2258                 nickname->contact_id = value;
2259                 break;
2260         default:
2261                 /* LCOV_EXCL_START */
2262                 ERR("property_id(%d) is not supported in value(nickname)", property_id);
2263                 return CONTACTS_ERROR_INVALID_PARAMETER;
2264                 /* LCOV_EXCL_STOP */
2265         }
2266         return CONTACTS_ERROR_NONE;
2267 }
2268
2269 static int __ctsvc_address_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2270 {
2271         ctsvc_address_s *address = (ctsvc_address_s*)record;
2272
2273         switch (property_id) {
2274         case CTSVC_PROPERTY_ADDRESS_ID:
2275                 CHECK_DIRTY_VAL(address->id, value, is_dirty);
2276                 address->id = value;
2277                 break;
2278         case CTSVC_PROPERTY_ADDRESS_CONTACT_ID:
2279                 RETVM_IF(0 < address->id, CONTACTS_ERROR_INVALID_PARAMETER,
2280                                 "property_id(%d) is a read-only value (address)", property_id);
2281                 CHECK_DIRTY_VAL(address->contact_id, value, is_dirty);
2282                 address->contact_id = value;
2283                 break;
2284         case CTSVC_PROPERTY_ADDRESS_TYPE:
2285                 RETVM_IF(value < CONTACTS_ADDRESS_TYPE_OTHER
2286                                 || CONTACTS_ADDRESS_TYPE_PARCEL < value,
2287                                 CONTACTS_ERROR_INVALID_PARAMETER, "address type is %d", value);
2288                 CHECK_DIRTY_VAL(address->type, value, is_dirty);
2289                 address->type = value;
2290                 break;
2291         default:
2292                 /* LCOV_EXCL_START */
2293                 ERR("property_id(%d) is not supported in value(address)", property_id);
2294                 return CONTACTS_ERROR_INVALID_PARAMETER;
2295                 /* LCOV_EXCL_STOP */
2296         }
2297         return CONTACTS_ERROR_NONE;
2298 }
2299
2300 static int __ctsvc_messenger_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2301 {
2302         ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
2303
2304         switch (property_id) {
2305         case CTSVC_PROPERTY_MESSENGER_ID:
2306                 CHECK_DIRTY_VAL(messenger->id, value, is_dirty);
2307                 messenger->id = value;
2308                 break;
2309         case CTSVC_PROPERTY_MESSENGER_CONTACT_ID:
2310                 RETVM_IF(0 < messenger->id, CONTACTS_ERROR_INVALID_PARAMETER,
2311                                 "property_id(%d) is a read-only value (messenger)", property_id);
2312                 CHECK_DIRTY_VAL(messenger->contact_id, value, is_dirty);
2313                 messenger->contact_id = value;
2314                 break;
2315         case CTSVC_PROPERTY_MESSENGER_TYPE:
2316                 RETVM_IF(value < CONTACTS_MESSENGER_TYPE_OTHER
2317                                 || CONTACTS_MESSENGER_TYPE_IRC < value,
2318                                 CONTACTS_ERROR_INVALID_PARAMETER, "messenger type is in invalid range (%d)", value);
2319
2320                 CHECK_DIRTY_VAL(messenger->type, value, is_dirty);
2321                 messenger->type = value;
2322                 break;
2323         default:
2324                 /* LCOV_EXCL_START */
2325                 ERR("property_id(%d) is not supported in value(messenger)", property_id);
2326                 return CONTACTS_ERROR_INVALID_PARAMETER;
2327                 /* LCOV_EXCL_STOP */
2328         }
2329         return CONTACTS_ERROR_NONE;
2330 }
2331
2332 static int __ctsvc_group_relation_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2333 {
2334         ctsvc_group_relation_s *group = (ctsvc_group_relation_s*)record;
2335
2336         switch (property_id) {
2337         case CTSVC_PROPERTY_GROUP_RELATION_ID:
2338                 CHECK_DIRTY_VAL(group->id, value, is_dirty);
2339                 group->id = value;
2340                 break;
2341         case CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID:
2342                 RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
2343                                 "property_id(%d) is a read-only value (group)", property_id);
2344                 CHECK_DIRTY_VAL(group->contact_id, value, is_dirty);
2345                 group->contact_id = value;
2346                 break;
2347         case CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID:
2348                 RETVM_IF(0 < group->id, CONTACTS_ERROR_INVALID_PARAMETER,
2349                                 "property_id(%d) is a read-only value (group)", property_id);
2350                 CHECK_DIRTY_VAL(group->group_id, value, is_dirty);
2351                 group->group_id = value;
2352                 break;
2353         default:
2354                 /* LCOV_EXCL_START */
2355                 ERR("property_id(%d) is not supported in value(group relation)", property_id);
2356                 return CONTACTS_ERROR_INVALID_PARAMETER;
2357                 /* LCOV_EXCL_STOP */
2358         }
2359         return CONTACTS_ERROR_NONE;
2360 }
2361
2362 static int __ctsvc_activity_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2363 {
2364         ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
2365
2366         switch (property_id) {
2367         case CTSVC_PROPERTY_ACTIVITY_ID:
2368                 CHECK_DIRTY_VAL(activity->id, value, is_dirty);
2369                 activity->id = value;
2370                 break;
2371         case CTSVC_PROPERTY_ACTIVITY_CONTACT_ID:
2372                 RETVM_IF(0 < activity->id, CONTACTS_ERROR_INVALID_PARAMETER,
2373                                 "property_id(%d) is a read-only value (activity)", property_id);
2374                 CHECK_DIRTY_VAL(activity->contact_id, value, is_dirty);
2375                 activity->contact_id = value;
2376                 break;
2377         case CTSVC_PROPERTY_ACTIVITY_TIMESTAMP:
2378                 CHECK_DIRTY_VAL(activity->timestamp, value, is_dirty);
2379                 activity->timestamp = value;
2380                 break;
2381         default:
2382                 /* LCOV_EXCL_START */
2383                 ERR("property_id(%d) is not supported in value(activity)", property_id);
2384                 return CONTACTS_ERROR_INVALID_PARAMETER;
2385                 /* LCOV_EXCL_STOP */
2386         }
2387         return CONTACTS_ERROR_NONE;
2388 }
2389
2390 static int __ctsvc_activity_photo_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2391 {
2392         ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
2393
2394         switch (property_id) {
2395         case CTSVC_PROPERTY_ACTIVITY_PHOTO_ID:
2396                 CHECK_DIRTY_VAL(photo->id, value, is_dirty);
2397                 photo->id = value;
2398                 break;
2399         case CTSVC_PROPERTY_ACTIVITY_PHOTO_ACTIVITY_ID:
2400                 CHECK_DIRTY_VAL(photo->activity_id, value, is_dirty);
2401                 photo->activity_id = value;
2402                 break;
2403         case CTSVC_PROPERTY_ACTIVITY_PHOTO_SORT_INDEX:
2404                 CHECK_DIRTY_VAL(photo->sort_index, value, is_dirty);
2405                 photo->sort_index = value;
2406                 break;
2407         default:
2408                 /* LCOV_EXCL_START */
2409                 ERR("property_id(%d) is not supported in value(activity)", property_id);
2410                 return CONTACTS_ERROR_INVALID_PARAMETER;
2411                 /* LCOV_EXCL_STOP */
2412         }
2413         return CONTACTS_ERROR_NONE;
2414 }
2415
2416 static int __ctsvc_profile_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2417 {
2418         ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
2419
2420         switch (property_id) {
2421         case CTSVC_PROPERTY_PROFILE_ID:
2422                 CHECK_DIRTY_VAL(profile->id, value, is_dirty);
2423                 profile->id = value;
2424                 break;
2425         case CTSVC_PROPERTY_PROFILE_CONTACT_ID:
2426                 RETVM_IF(0 < profile->id, CONTACTS_ERROR_INVALID_PARAMETER,
2427                                 "property_id(%d) is a read-only value (profile)", property_id);
2428                 CHECK_DIRTY_VAL(profile->contact_id, value, is_dirty);
2429                 profile->contact_id = value;
2430                 break;
2431         case CTSVC_PROPERTY_PROFILE_ORDER:
2432                 CHECK_DIRTY_VAL(profile->order, value, is_dirty);
2433                 profile->order = value;
2434                 break;
2435         default:
2436                 /* LCOV_EXCL_START */
2437                 ERR("property_id(%d) is not supported in value(profile)", property_id);
2438                 return CONTACTS_ERROR_INVALID_PARAMETER;
2439                 /* LCOV_EXCL_STOP */
2440         }
2441         return CONTACTS_ERROR_NONE;
2442 }
2443
2444 static int __ctsvc_relationship_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2445 {
2446         ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
2447
2448         switch (property_id) {
2449         case CTSVC_PROPERTY_RELATIONSHIP_ID:
2450                 CHECK_DIRTY_VAL(relationship->id, value, is_dirty);
2451                 relationship->id = value;
2452                 break;
2453         case CTSVC_PROPERTY_RELATIONSHIP_CONTACT_ID:
2454                 RETVM_IF(0 < relationship->id, CONTACTS_ERROR_INVALID_PARAMETER,
2455                                 "property_id(%d) is a read-only value (relationship)", property_id);
2456                 CHECK_DIRTY_VAL(relationship->contact_id, value, is_dirty);
2457                 relationship->contact_id = value;
2458                 break;
2459         case CTSVC_PROPERTY_RELATIONSHIP_TYPE:
2460                 RETVM_IF(value < CONTACTS_RELATIONSHIP_TYPE_OTHER
2461                                 || CONTACTS_RELATIONSHIP_TYPE_CUSTOM < value,
2462                                 CONTACTS_ERROR_INVALID_PARAMETER, "relationship type is in invalid range (%d)", value);
2463                 CHECK_DIRTY_VAL(relationship->type, value, is_dirty);
2464                 relationship->type = value;
2465                 break;
2466         default:
2467                 /* LCOV_EXCL_START */
2468                 ERR("property_id(%d) is not supported in value(relationship)", property_id);
2469                 return CONTACTS_ERROR_INVALID_PARAMETER;
2470                 /* LCOV_EXCL_STOP */
2471         }
2472         return CONTACTS_ERROR_NONE;
2473 }
2474
2475 static int __ctsvc_image_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2476 {
2477         ctsvc_image_s *image = (ctsvc_image_s*)record;
2478
2479         switch (property_id) {
2480         case CTSVC_PROPERTY_IMAGE_ID:
2481                 CHECK_DIRTY_VAL(image->id, value, is_dirty);
2482                 image->id = value;
2483                 break;
2484         case CTSVC_PROPERTY_IMAGE_CONTACT_ID:
2485                 RETVM_IF(0 < image->id, CONTACTS_ERROR_INVALID_PARAMETER,
2486                                 "property_id(%d) is a read-only value (image)", property_id);
2487                 CHECK_DIRTY_VAL(image->contact_id, value, is_dirty);
2488                 image->contact_id = value;
2489                 break;
2490         case CTSVC_PROPERTY_IMAGE_TYPE:
2491                 RETVM_IF(value < CONTACTS_IMAGE_TYPE_OTHER || CONTACTS_IMAGE_TYPE_CUSTOM < value,
2492                                 CONTACTS_ERROR_INVALID_PARAMETER,
2493                                 "image type is in invalid range (%d)", value);
2494                 CHECK_DIRTY_VAL(image->type, value, is_dirty);
2495                 image->type = value;
2496                 break;
2497         default:
2498                 /* LCOV_EXCL_START */
2499                 ERR("property_id(%d) is not supported in value(image)", property_id);
2500                 return CONTACTS_ERROR_INVALID_PARAMETER;
2501                 /* LCOV_EXCL_STOP */
2502         }
2503         return CONTACTS_ERROR_NONE;
2504 }
2505
2506 static int __ctsvc_extension_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2507 {
2508         ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
2509
2510         switch (property_id) {
2511         case CTSVC_PROPERTY_EXTENSION_ID:
2512                 CHECK_DIRTY_VAL(extension->id, value, is_dirty);
2513                 extension->id = value;
2514                 break;
2515         case CTSVC_PROPERTY_EXTENSION_CONTACT_ID:
2516                 RETVM_IF(0 < extension->id, CONTACTS_ERROR_INVALID_PARAMETER,
2517                                 "property_id(%d) is a read-only value (extension)", property_id);
2518                 CHECK_DIRTY_VAL(extension->contact_id, value, is_dirty);
2519                 extension->contact_id = value;
2520                 break;
2521         case CTSVC_PROPERTY_EXTENSION_DATA1:
2522                 CHECK_DIRTY_VAL(extension->data1, value, is_dirty);
2523                 extension->data1 = value;
2524                 break;
2525         default:
2526                 /* LCOV_EXCL_START */
2527                 ERR("property_id(%d) is not supported in value(extension)", property_id);
2528                 return CONTACTS_ERROR_INVALID_PARAMETER;
2529                 /* LCOV_EXCL_STOP */
2530         }
2531         return CONTACTS_ERROR_NONE;
2532 }
2533
2534 static int __ctsvc_sip_set_int(contacts_record_h record, unsigned int property_id, int value, bool *is_dirty)
2535 {
2536         ctsvc_sip_s *sip = (ctsvc_sip_s *)record;
2537
2538         switch (property_id) {
2539         case CTSVC_PROPERTY_SIP_ID:
2540                 CHECK_DIRTY_VAL(sip->id, value, is_dirty);
2541                 sip->id = value;
2542                 break;
2543         case CTSVC_PROPERTY_SIP_CONTACT_ID:
2544                 RETVM_IF(0 < sip->id, CONTACTS_ERROR_INVALID_PARAMETER,
2545                                 "Invalid parameter : property_id(%d) is a read-only value (sip)", property_id);
2546                 CHECK_DIRTY_VAL(sip->contact_id, value, is_dirty);
2547                 sip->contact_id = value;
2548                 break;
2549         case CTSVC_PROPERTY_SIP_TYPE:
2550                 RETVM_IF(value < CONTACTS_SIP_TYPE_OTHER,
2551                                 CONTACTS_ERROR_INVALID_PARAMETER, "Invalid parameter : sip type is in invalid range (%d)", value);
2552                 CHECK_DIRTY_VAL(sip->type, value, is_dirty);
2553                 sip->type = value;
2554                 break;
2555         default:
2556                 /* LCOV_EXCL_START */
2557                 ERR("Invalid parameter : property_id(0x%x) is not supported in value(sip)", property_id);
2558                 return CONTACTS_ERROR_INVALID_PARAMETER;
2559                 /* LCOV_EXCL_STOP */
2560         }
2561         return CONTACTS_ERROR_NONE;
2562 }
2563
2564 static int __ctsvc_contact_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
2565 {
2566         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
2567         switch (property_id) {
2568         case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
2569                 *out_str = GET_STR(copy, contact->display_name);
2570                 break;
2571         case CTSVC_PROPERTY_CONTACT_RINGTONE:
2572                 *out_str = GET_STR(copy, contact->ringtone_path);
2573                 break;
2574         case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
2575                 *out_str = GET_STR(copy, contact->image_thumbnail_path);
2576                 break;
2577         case CTSVC_PROPERTY_CONTACT_UID:
2578                 *out_str = GET_STR(copy, contact->uid);
2579                 break;
2580         case CTSVC_PROPERTY_CONTACT_VIBRATION:
2581                 *out_str = GET_STR(copy, contact->vibration);
2582                 break;
2583         case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
2584                 *out_str = GET_STR(copy, contact->message_alert);
2585                 break;
2586         default:
2587                 /* LCOV_EXCL_START */
2588                 ERR("property_id(%d) is not supported in value(contact)", property_id);
2589                 return CONTACTS_ERROR_INVALID_PARAMETER;
2590                 /* LCOV_EXCL_STOP */
2591         }
2592         return CONTACTS_ERROR_NONE;
2593 }
2594
2595 static int __ctsvc_contact_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
2596 {
2597         return __ctsvc_contact_get_str_real(record, property_id, out_str, false);
2598 }
2599
2600 static int __ctsvc_contact_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
2601 {
2602         return __ctsvc_contact_get_str_real(record, property_id, out_str, true);
2603 }
2604
2605 static int __ctsvc_contact_get_record_list_p(contacts_record_h record,
2606                 unsigned int property_id, contacts_list_h *list)
2607 {
2608         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
2609
2610         switch (property_id) {
2611         case CTSVC_PROPERTY_CONTACT_NAME:
2612                 *list = (contacts_list_h)contact->name;
2613                 break;
2614         case CTSVC_PROPERTY_CONTACT_COMPANY:
2615                 *list = (contacts_list_h)contact->company;
2616                 break;
2617         case CTSVC_PROPERTY_CONTACT_NOTE:
2618                 *list = (contacts_list_h)contact->note;
2619                 break;
2620         case CTSVC_PROPERTY_CONTACT_NUMBER:
2621                 *list = (contacts_list_h)contact->numbers;
2622                 break;
2623         case CTSVC_PROPERTY_CONTACT_EMAIL:
2624                 *list = (contacts_list_h)contact->emails;
2625                 break;
2626         case CTSVC_PROPERTY_CONTACT_EVENT:
2627                 *list = (contacts_list_h)contact->events;
2628                 break;
2629         case CTSVC_PROPERTY_CONTACT_MESSENGER:
2630                 *list = (contacts_list_h)contact->messengers;
2631                 break;
2632         case CTSVC_PROPERTY_CONTACT_ADDRESS:
2633                 *list = (contacts_list_h)contact->postal_addrs;
2634                 break;
2635         case CTSVC_PROPERTY_CONTACT_URL:
2636                 *list = (contacts_list_h)contact->urls;
2637                 break;
2638         case CTSVC_PROPERTY_CONTACT_NICKNAME:
2639                 *list = (contacts_list_h)contact->nicknames;
2640                 break;
2641         case CTSVC_PROPERTY_CONTACT_PROFILE:
2642                 *list = (contacts_list_h)contact->profiles;
2643                 break;
2644         case CTSVC_PROPERTY_CONTACT_RELATIONSHIP:
2645                 *list = (contacts_list_h)contact->relationships;
2646                 break;
2647         case CTSVC_PROPERTY_CONTACT_IMAGE:
2648                 *list = (contacts_list_h)contact->images;
2649                 break;
2650         case CTSVC_PROPERTY_CONTACT_GROUP_RELATION:
2651                 *list = (contacts_list_h)contact->grouprelations;
2652                 break;
2653         case CTSVC_PROPERTY_CONTACT_EXTENSION:
2654                 *list = (contacts_list_h)contact->extensions;
2655                 break;
2656         case CTSVC_PROPERTY_CONTACT_SIP:
2657                 *list = (contacts_list_h)contact->sips;
2658                 break;
2659         default:
2660                 /* LCOV_EXCL_START */
2661                 ERR("property_id(%d) is not supported in value(contact)", property_id);
2662                 return CONTACTS_ERROR_INVALID_PARAMETER;
2663                 /* LCOV_EXCL_STOP */
2664         }
2665         return CONTACTS_ERROR_NONE;
2666 }
2667
2668 static int __ctsvc_contact_get_child_record_count(contacts_record_h record,
2669                 unsigned int property_id, int *count)
2670 {
2671         int ret;
2672         contacts_list_h list = NULL;
2673
2674         *count = 0;
2675         ret = __ctsvc_contact_get_record_list_p(record, property_id, &list);
2676         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2677                 return ret;
2678
2679         if (list)
2680                 contacts_list_get_count(list, count);
2681
2682         return CONTACTS_ERROR_NONE;
2683 }
2684
2685 static int __ctsvc_contact_get_child_record_at_p(contacts_record_h record,
2686                 unsigned int property_id, int index, contacts_record_h *out_record)
2687 {
2688         int ret;
2689         int count;
2690         contacts_list_h list = NULL;
2691
2692         ret = __ctsvc_contact_get_record_list_p(record, property_id, &list);
2693         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2694                 return ret;
2695
2696         contacts_list_get_count(list, &count);
2697         if (count < index) {
2698                 /* LCOV_EXCL_START */
2699                 ERR("The index(%d) is greather than total length(%d)", index, count);
2700                 *out_record = NULL;
2701                 return CONTACTS_ERROR_NO_DATA;
2702                 /* LCOV_EXCL_STOP */
2703         } else {
2704                 return ctsvc_list_get_nth_record_p(list, index, out_record);
2705         }
2706 }
2707
2708 static int __ctsvc_contact_clone_child_record_list(contacts_record_h record,
2709                 unsigned int property_id, contacts_list_h *out_list)
2710 {
2711         int ret;
2712         int count;
2713         contacts_list_h list = NULL;
2714
2715         ret = __ctsvc_contact_get_record_list_p(record, property_id, &list);
2716         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2717                 return ret;
2718
2719         contacts_list_get_count(list, &count);
2720         if (count <= 0) {
2721                 *out_list = NULL;
2722                 return CONTACTS_ERROR_NO_DATA;
2723         }
2724         ctsvc_list_clone(list, out_list);
2725
2726         return CONTACTS_ERROR_NONE;
2727 }
2728
2729
2730 static int __ctsvc_contact_reset_child_record_id(contacts_record_h child_record)
2731 {
2732         ctsvc_record_s *record = (ctsvc_record_s*)child_record;
2733
2734         switch (record->r_type) {
2735         case CTSVC_RECORD_NAME:
2736                 ((ctsvc_name_s*)record)->id = 0;
2737                 break;
2738         case CTSVC_RECORD_COMPANY:
2739                 ((ctsvc_company_s*)record)->id = 0;
2740                 break;
2741         case CTSVC_RECORD_NOTE:
2742                 ((ctsvc_note_s*)record)->id = 0;
2743                 break;
2744         case CTSVC_RECORD_NUMBER:
2745                 ((ctsvc_number_s*)record)->id = 0;
2746                 break;
2747         case CTSVC_RECORD_EMAIL:
2748                 ((ctsvc_email_s*)record)->id = 0;
2749                 break;
2750         case CTSVC_RECORD_URL:
2751                 ((ctsvc_url_s*)record)->id = 0;
2752                 break;
2753         case CTSVC_RECORD_EVENT:
2754                 ((ctsvc_event_s*)record)->id = 0;
2755                 break;
2756         case CTSVC_RECORD_NICKNAME:
2757                 ((ctsvc_nickname_s*)record)->id = 0;
2758                 break;
2759         case CTSVC_RECORD_ADDRESS:
2760                 ((ctsvc_address_s*)record)->id = 0;
2761                 break;
2762         case CTSVC_RECORD_MESSENGER:
2763                 ((ctsvc_messenger_s*)record)->id = 0;
2764                 break;
2765         case CTSVC_RECORD_GROUP_RELATION:
2766                 ((ctsvc_group_relation_s*)record)->id = 0;
2767                 break;
2768         case CTSVC_RECORD_ACTIVITY:
2769                 ((ctsvc_activity_s*)record)->id = 0;
2770                 break;
2771         case CTSVC_RECORD_PROFILE:
2772                 ((ctsvc_profile_s*)record)->id = 0;
2773                 break;
2774         case CTSVC_RECORD_RELATIONSHIP:
2775                 ((ctsvc_relationship_s*)record)->id = 0;
2776                 break;
2777         case CTSVC_RECORD_IMAGE:
2778                 ((ctsvc_image_s*)record)->id = 0;
2779                 break;
2780         case CTSVC_RECORD_EXTENSION:
2781                 ((ctsvc_extension_s*)record)->id = 0;
2782                 break;
2783         case CTSVC_RECORD_SIP:
2784                 ((ctsvc_sip_s *)record)->id = 0;
2785                 break;
2786         default:
2787                 /* LCOV_EXCL_START */
2788                 ERR("record(%d) is not child of contact", record->r_type);
2789                 return CONTACTS_ERROR_INVALID_PARAMETER;
2790                 /* LCOV_EXCL_STOP */
2791         }
2792         return CONTACTS_ERROR_NONE;
2793 }
2794
2795 static int __ctsvc_contact_get_child_record_id(contacts_record_h child_record)
2796 {
2797         ctsvc_record_s *record = (ctsvc_record_s*)child_record;
2798
2799         switch (record->r_type) {
2800         case CTSVC_RECORD_NAME:
2801                 return ((ctsvc_name_s*)record)->id;
2802         case CTSVC_RECORD_COMPANY:
2803                 return ((ctsvc_company_s*)record)->id;
2804         case CTSVC_RECORD_NOTE:
2805                 return ((ctsvc_note_s*)record)->id;
2806         case CTSVC_RECORD_NUMBER:
2807                 return ((ctsvc_number_s*)record)->id;
2808         case CTSVC_RECORD_EMAIL:
2809                 return ((ctsvc_email_s*)record)->id;
2810         case CTSVC_RECORD_URL:
2811                 return ((ctsvc_url_s*)record)->id;
2812         case CTSVC_RECORD_EVENT:
2813                 return ((ctsvc_event_s*)record)->id;
2814         case CTSVC_RECORD_NICKNAME:
2815                 return ((ctsvc_nickname_s*)record)->id;
2816         case CTSVC_RECORD_ADDRESS:
2817                 return ((ctsvc_address_s*)record)->id;
2818         case CTSVC_RECORD_MESSENGER:
2819                 return ((ctsvc_messenger_s*)record)->id;
2820         case CTSVC_RECORD_GROUP_RELATION:
2821                 return ((ctsvc_group_relation_s*)record)->id;
2822         case CTSVC_RECORD_ACTIVITY:
2823                 return ((ctsvc_activity_s*)record)->id;
2824         case CTSVC_RECORD_PROFILE:
2825                 return ((ctsvc_profile_s*)record)->id;
2826         case CTSVC_RECORD_RELATIONSHIP:
2827                 return ((ctsvc_relationship_s*)record)->id;
2828         case CTSVC_RECORD_IMAGE:
2829                 return ((ctsvc_image_s*)record)->id;
2830         case CTSVC_RECORD_EXTENSION:
2831                 return ((ctsvc_extension_s*)record)->id;
2832         case CTSVC_RECORD_SIP:
2833                 return ((ctsvc_sip_s *)record)->id;
2834         default:
2835                 /* LCOV_EXCL_START */
2836                 ERR("record(%d) is not child of contact", record->r_type);
2837                 return 0;
2838                 /* LCOV_EXCL_STOP */
2839         }
2840         return 0;
2841 }
2842
2843 static int __ctsvc_contact_add_child_record(contacts_record_h record,
2844                 unsigned int property_id, contacts_record_h child_record)
2845 {
2846         int ret;
2847         contacts_list_h list = NULL;
2848         ctsvc_record_s *s_record = (ctsvc_record_s*)child_record;
2849
2850         ret = __ctsvc_contact_get_record_list_p(record, property_id, &list);
2851         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2852                 return ret;
2853
2854         if (CTSVC_RECORD_NAME == s_record->r_type && 1 == ((ctsvc_list_s*)list)->count) {
2855                 /* LCOV_EXCL_START */
2856                 ERR("This type(%d) of child_record can not be added anymore", s_record->r_type);
2857                 return CONTACTS_ERROR_INVALID_PARAMETER;
2858                 /* LCOV_EXCL_STOP */
2859         }
2860
2861         ret = __ctsvc_contact_reset_child_record_id(child_record);
2862         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2863                 return ret;
2864
2865         ctsvc_list_add_child(list, child_record);
2866
2867         return CONTACTS_ERROR_NONE;
2868 }
2869
2870 static int __ctsvc_contact_remove_child_record(contacts_record_h record,
2871                 unsigned int property_id, contacts_record_h child_record)
2872 {
2873         int id;
2874         int ret;
2875         contacts_list_h list = NULL;
2876
2877         ret = __ctsvc_contact_get_record_list_p(record, property_id, &list);
2878         if (CONTACTS_ERROR_INVALID_PARAMETER == ret)
2879                 return ret;
2880
2881         id = __ctsvc_contact_get_child_record_id(child_record);
2882         ctsvc_list_remove_child(list, child_record, id ? true : false);
2883
2884         return CONTACTS_ERROR_NONE;
2885 }
2886
2887 static int __ctsvc_simple_contact_get_str_real(contacts_record_h record,
2888                 unsigned int property_id, char **out_str, bool copy)
2889 {
2890         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
2891
2892         switch (property_id) {
2893         case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
2894                 *out_str = GET_STR(copy, contact->display_name);
2895                 break;
2896         case CTSVC_PROPERTY_CONTACT_RINGTONE:
2897                 *out_str = GET_STR(copy, contact->ringtone_path);
2898                 break;
2899         case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
2900                 *out_str = GET_STR(copy, contact->image_thumbnail_path);
2901                 break;
2902         case CTSVC_PROPERTY_CONTACT_UID:
2903                 *out_str = GET_STR(copy, contact->uid);
2904                 break;
2905         case CTSVC_PROPERTY_CONTACT_VIBRATION:
2906                 *out_str = GET_STR(copy, contact->vibration);
2907                 break;
2908         case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
2909                 *out_str = GET_STR(copy, contact->message_alert);
2910                 break;
2911         default:
2912                 /* LCOV_EXCL_START */
2913                 ERR("property_id(%d) is not supported in value(simple_contact)", property_id);
2914                 return CONTACTS_ERROR_INVALID_PARAMETER;
2915                 /* LCOV_EXCL_STOP */
2916         }
2917         return CONTACTS_ERROR_NONE;
2918 }
2919
2920 static int __ctsvc_simple_contact_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
2921 {
2922         return __ctsvc_simple_contact_get_str_real(record, property_id, out_str, false);
2923 }
2924
2925 static int __ctsvc_simple_contact_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
2926 {
2927         return __ctsvc_simple_contact_get_str_real(record, property_id, out_str, true);
2928 }
2929
2930 static int __ctsvc_name_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
2931 {
2932         ctsvc_name_s *name = (ctsvc_name_s*)record;
2933
2934         switch (property_id) {
2935         case CTSVC_PROPERTY_NAME_FIRST:
2936                 *out_str = GET_STR(copy, name->first);
2937                 break;
2938         case CTSVC_PROPERTY_NAME_LAST:
2939                 *out_str = GET_STR(copy, name->last);
2940                 break;
2941         case CTSVC_PROPERTY_NAME_ADDITION:
2942                 *out_str = GET_STR(copy, name->addition);
2943                 break;
2944         case CTSVC_PROPERTY_NAME_SUFFIX:
2945                 *out_str = GET_STR(copy, name->suffix);
2946                 break;
2947         case CTSVC_PROPERTY_NAME_PREFIX:
2948                 *out_str = GET_STR(copy, name->prefix);
2949                 break;
2950         case CTSVC_PROPERTY_NAME_PHONETIC_FIRST:
2951                 *out_str = GET_STR(copy, name->phonetic_first);
2952                 break;
2953         case CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE:
2954                 *out_str = GET_STR(copy, name->phonetic_middle);
2955                 break;
2956         case CTSVC_PROPERTY_NAME_PHONETIC_LAST:
2957                 *out_str = GET_STR(copy, name->phonetic_last);
2958                 break;
2959         default:
2960                 /* LCOV_EXCL_START */
2961                 ERR("property_id(%d) is not supported in value(name)", property_id);
2962                 return CONTACTS_ERROR_INVALID_PARAMETER;
2963                 /* LCOV_EXCL_STOP */
2964         }
2965         return CONTACTS_ERROR_NONE;
2966 }
2967
2968 static int __ctsvc_name_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
2969 {
2970         return __ctsvc_name_get_str_real(record, property_id, out_str, false);
2971 }
2972
2973 static int __ctsvc_name_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
2974 {
2975         return __ctsvc_name_get_str_real(record, property_id, out_str, true);
2976 }
2977
2978 static int __ctsvc_company_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
2979 {
2980         ctsvc_company_s *company = (ctsvc_company_s*)record;
2981
2982         switch (property_id) {
2983         case CTSVC_PROPERTY_COMPANY_LABEL:
2984                 *out_str = GET_STR(copy, company->label);
2985                 break;
2986         case CTSVC_PROPERTY_COMPANY_NAME:
2987                 *out_str = GET_STR(copy, company->name);
2988                 break;
2989         case CTSVC_PROPERTY_COMPANY_DEPARTMENT:
2990                 *out_str = GET_STR(copy, company->department);
2991                 break;
2992         case CTSVC_PROPERTY_COMPANY_JOB_TITLE:
2993                 *out_str = GET_STR(copy, company->job_title);
2994                 break;
2995         case CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME:
2996                 *out_str = GET_STR(copy, company->assistant_name);
2997                 break;
2998         case CTSVC_PROPERTY_COMPANY_ROLE:
2999                 *out_str = GET_STR(copy, company->role);
3000                 break;
3001         case CTSVC_PROPERTY_COMPANY_LOGO:
3002                 *out_str = GET_STR(copy, company->logo);
3003                 break;
3004         case CTSVC_PROPERTY_COMPANY_LOCATION:
3005                 *out_str = GET_STR(copy, company->location);
3006                 break;
3007         case CTSVC_PROPERTY_COMPANY_DESCRIPTION:
3008                 *out_str = GET_STR(copy, company->description);
3009                 break;
3010         case CTSVC_PROPERTY_COMPANY_PHONETIC_NAME:
3011                 *out_str = GET_STR(copy, company->phonetic_name);
3012                 break;
3013         default:
3014                 /* LCOV_EXCL_START */
3015                 ERR("property_id(%d) is not supported in value(company)", property_id);
3016                 return CONTACTS_ERROR_INVALID_PARAMETER;
3017                 /* LCOV_EXCL_STOP */
3018         }
3019         return CONTACTS_ERROR_NONE;
3020 }
3021
3022 static int __ctsvc_company_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3023 {
3024         return __ctsvc_company_get_str_real(record, property_id, out_str, false);
3025 }
3026
3027 static int __ctsvc_company_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3028 {
3029         return __ctsvc_company_get_str_real(record, property_id, out_str, true);
3030 }
3031
3032 static int __ctsvc_note_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3033 {
3034         ctsvc_note_s *note = (ctsvc_note_s*)record;
3035
3036         switch (property_id) {
3037         case CTSVC_PROPERTY_NOTE_NOTE:
3038                 *out_str = GET_STR(copy, note->note);
3039                 break;
3040         default:
3041                 /* LCOV_EXCL_START */
3042                 ERR("property_id(%d) is not supported in value(note)", property_id);
3043                 return CONTACTS_ERROR_INVALID_PARAMETER;
3044                 /* LCOV_EXCL_STOP */
3045         }
3046         return CONTACTS_ERROR_NONE;
3047 }
3048
3049 static int __ctsvc_note_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3050 {
3051         return __ctsvc_note_get_str_real(record, property_id, out_str, false);
3052 }
3053
3054 static int __ctsvc_note_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3055 {
3056         return __ctsvc_note_get_str_real(record, property_id, out_str, true);
3057 }
3058
3059 static int __ctsvc_number_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3060 {
3061         ctsvc_number_s *number = (ctsvc_number_s*)record;
3062
3063         switch (property_id) {
3064         case CTSVC_PROPERTY_NUMBER_LABEL:
3065                 *out_str = GET_STR(copy, number->label);
3066                 break;
3067         case CTSVC_PROPERTY_NUMBER_NUMBER:
3068                 *out_str = GET_STR(copy, number->number);
3069                 break;
3070         default:
3071                 /* LCOV_EXCL_START */
3072                 ERR("property_id(%d) is not supported in value(number)", property_id);
3073                 return CONTACTS_ERROR_INVALID_PARAMETER;
3074                 /* LCOV_EXCL_STOP */
3075         }
3076         return CONTACTS_ERROR_NONE;
3077 }
3078
3079 static int __ctsvc_number_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3080 {
3081         return __ctsvc_number_get_str_real(record, property_id, out_str, false);
3082 }
3083
3084 static int __ctsvc_number_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3085 {
3086         return __ctsvc_number_get_str_real(record, property_id, out_str, true);
3087 }
3088
3089 static int __ctsvc_email_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3090 {
3091         ctsvc_email_s *email = (ctsvc_email_s*)record;
3092
3093         switch (property_id) {
3094         case CTSVC_PROPERTY_EMAIL_EMAIL:
3095                 *out_str = GET_STR(copy, email->email_addr);
3096                 break;
3097         case CTSVC_PROPERTY_EMAIL_LABEL:
3098                 *out_str = GET_STR(copy, email->label);
3099                 break;
3100         default:
3101                 /* LCOV_EXCL_START */
3102                 ERR("property_id(%d) is not supported in value(email)", property_id);
3103                 return CONTACTS_ERROR_INVALID_PARAMETER;
3104                 /* LCOV_EXCL_STOP */
3105         }
3106         return CONTACTS_ERROR_NONE;
3107 }
3108
3109 static int __ctsvc_email_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3110 {
3111         return __ctsvc_email_get_str_real(record, property_id, out_str, false);
3112 }
3113
3114 static int __ctsvc_email_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3115 {
3116         return __ctsvc_email_get_str_real(record, property_id, out_str, true);
3117 }
3118
3119 static int __ctsvc_url_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3120 {
3121         ctsvc_url_s *url = (ctsvc_url_s*)record;
3122
3123         switch (property_id) {
3124         case CTSVC_PROPERTY_URL_URL:
3125                 *out_str = GET_STR(copy, url->url);
3126                 break;
3127         case CTSVC_PROPERTY_URL_LABEL:
3128                 *out_str = GET_STR(copy, url->label);
3129                 break;
3130         default:
3131                 /* LCOV_EXCL_START */
3132                 ERR("property_id(%d) is not supported in value(url)", property_id);
3133                 return CONTACTS_ERROR_INVALID_PARAMETER;
3134                 /* LCOV_EXCL_STOP */
3135         }
3136         return CONTACTS_ERROR_NONE;
3137 }
3138
3139 static int __ctsvc_url_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3140 {
3141         return __ctsvc_url_get_str_real(record, property_id, out_str, false);
3142 }
3143
3144 static int __ctsvc_url_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3145 {
3146         return __ctsvc_url_get_str_real(record, property_id, out_str, true);
3147 }
3148
3149 static int __ctsvc_event_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3150 {
3151         ctsvc_event_s *event = (ctsvc_event_s*)record;
3152
3153         switch (property_id) {
3154         case CTSVC_PROPERTY_EVENT_LABEL:
3155                 *out_str = GET_STR(copy, event->label);
3156                 break;
3157         default:
3158                 /* LCOV_EXCL_START */
3159                 ERR("property_id(%d) is not supported in value(event)", property_id);
3160                 return CONTACTS_ERROR_INVALID_PARAMETER;
3161                 /* LCOV_EXCL_STOP */
3162         }
3163         return CONTACTS_ERROR_NONE;
3164 }
3165
3166 static int __ctsvc_event_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3167 {
3168         return __ctsvc_event_get_str_real(record, property_id, out_str, false);
3169 }
3170
3171 static int __ctsvc_event_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3172 {
3173         return __ctsvc_event_get_str_real(record, property_id, out_str, true);
3174 }
3175
3176 static int __ctsvc_nickname_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3177 {
3178         ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
3179
3180         switch (property_id) {
3181         case CTSVC_PROPERTY_NICKNAME_NAME:
3182                 *out_str = GET_STR(copy, nickname->nickname);
3183                 break;
3184         default:
3185                 /* LCOV_EXCL_START */
3186                 ERR("property_id(%d) is not supported in value(nickname)", property_id);
3187                 return CONTACTS_ERROR_INVALID_PARAMETER;
3188                 /* LCOV_EXCL_STOP */
3189         }
3190         return CONTACTS_ERROR_NONE;
3191 }
3192
3193 static int __ctsvc_nickname_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3194 {
3195         return __ctsvc_nickname_get_str_real(record, property_id, out_str, false);
3196 }
3197
3198 static int __ctsvc_nickname_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3199 {
3200         return __ctsvc_nickname_get_str_real(record, property_id, out_str, true);
3201 }
3202
3203 static int __ctsvc_address_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3204 {
3205         ctsvc_address_s *address = (ctsvc_address_s*)record;
3206
3207         switch (property_id) {
3208         case CTSVC_PROPERTY_ADDRESS_LABEL:
3209                 *out_str = GET_STR(copy, address->label);
3210                 break;
3211         case CTSVC_PROPERTY_ADDRESS_POSTBOX:
3212                 *out_str = GET_STR(copy, address->pobox);
3213                 break;
3214         case CTSVC_PROPERTY_ADDRESS_POSTAL_CODE:
3215                 *out_str = GET_STR(copy, address->postalcode);
3216                 break;
3217         case CTSVC_PROPERTY_ADDRESS_REGION:
3218                 *out_str = GET_STR(copy, address->region);
3219                 break;
3220         case CTSVC_PROPERTY_ADDRESS_LOCALITY:
3221                 *out_str = GET_STR(copy, address->locality);
3222                 break;
3223         case CTSVC_PROPERTY_ADDRESS_STREET:
3224                 *out_str = GET_STR(copy, address->street);
3225                 break;
3226         case CTSVC_PROPERTY_ADDRESS_COUNTRY:
3227                 *out_str = GET_STR(copy, address->country);
3228                 break;
3229         case CTSVC_PROPERTY_ADDRESS_EXTENDED:
3230                 *out_str = GET_STR(copy, address->extended);
3231                 break;
3232         default:
3233                 /* LCOV_EXCL_START */
3234                 ERR("property_id(%d) is not supported in value(address)", property_id);
3235                 return CONTACTS_ERROR_INVALID_PARAMETER;
3236                 /* LCOV_EXCL_STOP */
3237         }
3238         return CONTACTS_ERROR_NONE;
3239 }
3240
3241 static int __ctsvc_address_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3242 {
3243         return __ctsvc_address_get_str_real(record, property_id, out_str, false);
3244 }
3245
3246 static int __ctsvc_address_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3247 {
3248         return __ctsvc_address_get_str_real(record, property_id, out_str, true);
3249 }
3250
3251 static int __ctsvc_messenger_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3252 {
3253         ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
3254
3255         switch (property_id) {
3256         case CTSVC_PROPERTY_MESSENGER_LABEL:
3257                 *out_str = GET_STR(copy, messenger->label);
3258                 break;
3259         case CTSVC_PROPERTY_MESSENGER_IM_ID:
3260                 *out_str = GET_STR(copy, messenger->im_id);
3261                 break;
3262         default:
3263                 /* LCOV_EXCL_START */
3264                 ERR("property_id(%d) is not supported in value(messenger)", property_id);
3265                 return CONTACTS_ERROR_INVALID_PARAMETER;
3266                 /* LCOV_EXCL_STOP */
3267         }
3268         return CONTACTS_ERROR_NONE;
3269 }
3270
3271 static int __ctsvc_messenger_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3272 {
3273         return __ctsvc_messenger_get_str_real(record, property_id, out_str, false);
3274 }
3275
3276 static int __ctsvc_messenger_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3277 {
3278         return __ctsvc_messenger_get_str_real(record, property_id, out_str, true);
3279 }
3280
3281 static int __ctsvc_group_relation_get_str_real(contacts_record_h record,
3282                 unsigned int property_id, char **out_str, bool copy)
3283 {
3284         ctsvc_group_relation_s *group_relation = (ctsvc_group_relation_s*)record;
3285
3286         switch (property_id) {
3287         case CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME:
3288                 *out_str = GET_STR(copy, group_relation->group_name);
3289                 break;
3290         default:
3291                 /* LCOV_EXCL_START */
3292                 ERR("property_id(%d) is not supported in value(group_relation)", property_id);
3293                 return CONTACTS_ERROR_INVALID_PARAMETER;
3294                 /* LCOV_EXCL_STOP */
3295         }
3296         return CONTACTS_ERROR_NONE;
3297 }
3298
3299 static int __ctsvc_group_relation_get_str_p(contacts_record_h record,
3300                 unsigned int property_id, char **out_str)
3301 {
3302         return __ctsvc_group_relation_get_str_real(record, property_id, out_str, false);
3303 }
3304
3305 static int __ctsvc_group_relation_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3306 {
3307         return __ctsvc_group_relation_get_str_real(record, property_id, out_str, true);
3308 }
3309
3310 static int __ctsvc_activity_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3311 {
3312         ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
3313
3314         switch (property_id) {
3315         case CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME:
3316                 *out_str = GET_STR(copy, activity->source_name);
3317                 break;
3318         case CTSVC_PROPERTY_ACTIVITY_STATUS:
3319                 *out_str = GET_STR(copy, activity->status);
3320                 break;
3321         case CTSVC_PROPERTY_ACTIVITY_SERVICE_OPERATION:
3322                 *out_str = GET_STR(copy, activity->service_operation);
3323                 break;
3324         case CTSVC_PROPERTY_ACTIVITY_URI:
3325                 *out_str = GET_STR(copy, activity->uri);
3326                 break;
3327         default:
3328                 /* LCOV_EXCL_START */
3329                 ERR("property_id(%d) is not supported in value(activity)", property_id);
3330                 return CONTACTS_ERROR_INVALID_PARAMETER;
3331                 /* LCOV_EXCL_STOP */
3332         }
3333         return CONTACTS_ERROR_NONE;
3334 }
3335
3336 static int __ctsvc_activity_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3337 {
3338         return __ctsvc_activity_get_str_real(record, property_id, out_str, false);
3339 }
3340
3341 static int __ctsvc_activity_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3342 {
3343         return __ctsvc_activity_get_str_real(record, property_id, out_str, true);
3344 }
3345
3346 static int __ctsvc_activity_photo_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3347 {
3348         ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
3349
3350         switch (property_id) {
3351         case CTSVC_PROPERTY_ACTIVITY_PHOTO_URL:
3352                 *out_str = GET_STR(copy, photo->photo_url);
3353                 break;
3354         default:
3355                 /* LCOV_EXCL_START */
3356                 ERR("property_id(%d) is not supported in value(activity)", property_id);
3357                 return CONTACTS_ERROR_INVALID_PARAMETER;
3358                 /* LCOV_EXCL_STOP */
3359         }
3360         return CONTACTS_ERROR_NONE;
3361 }
3362
3363 static int __ctsvc_activity_photo_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3364 {
3365         return __ctsvc_activity_photo_get_str_real(record, property_id, out_str, false);
3366 }
3367
3368 static int __ctsvc_activity_photo_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3369 {
3370         return __ctsvc_activity_photo_get_str_real(record, property_id, out_str, true);
3371 }
3372
3373 static int __ctsvc_profile_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3374 {
3375         ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
3376
3377         switch (property_id) {
3378         case CTSVC_PROPERTY_PROFILE_UID:
3379                 *out_str = GET_STR(copy, profile->uid);
3380                 break;
3381         case CTSVC_PROPERTY_PROFILE_TEXT:
3382                 *out_str = GET_STR(copy, profile->text);
3383                 break;
3384         case CTSVC_PROPERTY_PROFILE_SERVICE_OPERATION:
3385                 *out_str = GET_STR(copy, profile->service_operation);
3386                 break;
3387         case CTSVC_PROPERTY_PROFILE_MIME:
3388                 *out_str = GET_STR(copy, profile->mime);
3389                 break;
3390         case CTSVC_PROPERTY_PROFILE_APP_ID:
3391                 *out_str = GET_STR(copy, profile->app_id);
3392                 break;
3393         case CTSVC_PROPERTY_PROFILE_URI:
3394                 *out_str = GET_STR(copy, profile->uri);
3395                 break;
3396         case CTSVC_PROPERTY_PROFILE_CATEGORY:
3397                 *out_str = GET_STR(copy, profile->category);
3398                 break;
3399         case CTSVC_PROPERTY_PROFILE_EXTRA_DATA:
3400                 *out_str = GET_STR(copy, profile->extra_data);
3401                 break;
3402         default:
3403                 /* LCOV_EXCL_START */
3404                 ERR("property_id(%d) is not supported in value(profile)", property_id);
3405                 return CONTACTS_ERROR_INVALID_PARAMETER;
3406                 /* LCOV_EXCL_STOP */
3407         }
3408         return CONTACTS_ERROR_NONE;
3409 }
3410
3411 static int __ctsvc_profile_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3412 {
3413         return __ctsvc_profile_get_str_real(record, property_id, out_str, false);
3414 }
3415
3416 static int __ctsvc_profile_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3417 {
3418         return __ctsvc_profile_get_str_real(record, property_id, out_str, true);
3419 }
3420
3421 static int __ctsvc_relationship_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3422 {
3423         ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
3424
3425         switch (property_id) {
3426         case CTSVC_PROPERTY_RELATIONSHIP_LABEL:
3427                 *out_str = GET_STR(copy, relationship->label);
3428                 break;
3429         case CTSVC_PROPERTY_RELATIONSHIP_NAME:
3430                 *out_str = GET_STR(copy, relationship->name);
3431                 break;
3432         default:
3433                 /* LCOV_EXCL_START */
3434                 ERR("property_id(%d) is not supported in value(relationship)", property_id);
3435                 return CONTACTS_ERROR_INVALID_PARAMETER;
3436                 /* LCOV_EXCL_STOP */
3437         }
3438         return CONTACTS_ERROR_NONE;
3439 }
3440
3441 static int __ctsvc_relationship_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3442 {
3443         return __ctsvc_relationship_get_str_real(record, property_id, out_str, false);
3444 }
3445
3446 static int __ctsvc_relationship_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3447 {
3448         return __ctsvc_relationship_get_str_real(record, property_id, out_str, true);
3449 }
3450
3451 static int __ctsvc_image_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3452 {
3453         ctsvc_image_s *image = (ctsvc_image_s*)record;
3454
3455         switch (property_id) {
3456         case CTSVC_PROPERTY_IMAGE_LABEL:
3457                 *out_str = GET_STR(copy, image->label);
3458                 break;
3459         case CTSVC_PROPERTY_IMAGE_PATH:
3460                 *out_str = GET_STR(copy, image->path);
3461                 break;
3462         default:
3463                 /* LCOV_EXCL_START */
3464                 ERR("property_id(%d) is not supported in value(image)", property_id);
3465                 return CONTACTS_ERROR_INVALID_PARAMETER;
3466                 /* LCOV_EXCL_STOP */
3467         }
3468         return CONTACTS_ERROR_NONE;
3469 }
3470
3471 static int __ctsvc_image_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3472 {
3473         return __ctsvc_image_get_str_real(record, property_id, out_str, false);
3474 }
3475
3476 static int __ctsvc_image_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3477 {
3478         return __ctsvc_image_get_str_real(record, property_id, out_str, true);
3479 }
3480
3481 static int __ctsvc_extension_get_str_real(contacts_record_h record, unsigned int property_id, char **out_str, bool copy)
3482 {
3483         ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
3484
3485         switch (property_id) {
3486         case CTSVC_PROPERTY_EXTENSION_DATA2:
3487                 *out_str = GET_STR(copy, extension->data2);
3488                 break;
3489         case CTSVC_PROPERTY_EXTENSION_DATA3:
3490                 *out_str = GET_STR(copy, extension->data3);
3491                 break;
3492         case CTSVC_PROPERTY_EXTENSION_DATA4:
3493                 *out_str = GET_STR(copy, extension->data4);
3494                 break;
3495         case CTSVC_PROPERTY_EXTENSION_DATA5:
3496                 *out_str = GET_STR(copy, extension->data5);
3497                 break;
3498         case CTSVC_PROPERTY_EXTENSION_DATA6:
3499                 *out_str = GET_STR(copy, extension->data6);
3500                 break;
3501         case CTSVC_PROPERTY_EXTENSION_DATA7:
3502                 *out_str = GET_STR(copy, extension->data7);
3503                 break;
3504         case CTSVC_PROPERTY_EXTENSION_DATA8:
3505                 *out_str = GET_STR(copy, extension->data8);
3506                 break;
3507         case CTSVC_PROPERTY_EXTENSION_DATA9:
3508                 *out_str = GET_STR(copy, extension->data9);
3509                 break;
3510         case CTSVC_PROPERTY_EXTENSION_DATA10:
3511                 *out_str = GET_STR(copy, extension->data10);
3512                 break;
3513         case CTSVC_PROPERTY_EXTENSION_DATA11:
3514                 *out_str = GET_STR(copy, extension->data11);
3515                 break;
3516         case CTSVC_PROPERTY_EXTENSION_DATA12:
3517                 *out_str = GET_STR(copy, extension->data12);
3518                 break;
3519         default:
3520                 /* LCOV_EXCL_START */
3521                 ERR("property_id(%d) is not supported in value(extension)", property_id);
3522                 return CONTACTS_ERROR_INVALID_PARAMETER;
3523                 /* LCOV_EXCL_STOP */
3524         }
3525         return CONTACTS_ERROR_NONE;
3526 }
3527
3528 static int __ctsvc_extension_get_str_p(contacts_record_h record, unsigned int property_id, char **out_str)
3529 {
3530         return __ctsvc_extension_get_str_real(record, property_id, out_str, false);
3531 }
3532
3533 static int __ctsvc_extension_get_str(contacts_record_h record, unsigned int property_id, char **out_str)
3534 {
3535         return __ctsvc_extension_get_str_real(record, property_id, out_str, true);
3536 }
3537
3538 static int __ctsvc_sip_get_str_real(contacts_record_h record, unsigned int property_id, char** out_str, bool copy)
3539 {
3540         ctsvc_sip_s *sip = (ctsvc_sip_s *)record;
3541
3542         switch (property_id) {
3543         case CTSVC_PROPERTY_SIP_ADDRESS:
3544                 *out_str = GET_STR(copy, sip->address);
3545                 break;
3546         case CTSVC_PROPERTY_SIP_LABEL:
3547                 *out_str = GET_STR(copy, sip->label);
3548                 break;
3549         default:
3550                 /* LCOV_EXCL_START */
3551                 ERR("Invalid parameter : property_id(%d) is not supported in value(sip)", property_id);
3552                 return CONTACTS_ERROR_INVALID_PARAMETER;
3553                 /* LCOV_EXCL_STOP */
3554         }
3555         return CONTACTS_ERROR_NONE;
3556 }
3557
3558 static int __ctsvc_sip_get_str_p(contacts_record_h record, unsigned int property_id, char** out_str)
3559 {
3560         return __ctsvc_sip_get_str_real(record, property_id, out_str, false);
3561 }
3562
3563 static int __ctsvc_sip_get_str(contacts_record_h record, unsigned int property_id, char** out_str)
3564 {
3565         return __ctsvc_sip_get_str_real(record, property_id, out_str, true);
3566 }
3567
3568 static int __ctsvc_contact_set_str(contacts_record_h record, unsigned int property_id,
3569                 const char *str, bool *is_dirty)
3570 {
3571         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
3572
3573         switch (property_id) {
3574         case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
3575                 CHECK_DIRTY_STR(contact->display_name, str, is_dirty);
3576                 FREEandSTRDUP(contact->display_name, str);
3577                 break;
3578                 /*
3579                    ERR("property_id(%d) is a read-only value (contact)", property_id);
3580                    return CONTACTS_ERROR_INVALID_PARAMETER;
3581                    */
3582         case CTSVC_PROPERTY_CONTACT_RINGTONE:
3583                 CHECK_DIRTY_STR(contact->ringtone_path, str, is_dirty);
3584                 FREEandSTRDUP(contact->ringtone_path, str);
3585                 break;
3586         case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
3587                 CHECK_DIRTY_STR(contact->image_thumbnail_path, str, is_dirty);
3588                 FREEandSTRDUP(contact->image_thumbnail_path, str);
3589                 break;
3590         case CTSVC_PROPERTY_CONTACT_UID:
3591                 CHECK_DIRTY_STR(contact->uid, str, is_dirty);
3592                 FREEandSTRDUP(contact->uid, str);
3593                 break;
3594         case CTSVC_PROPERTY_CONTACT_VIBRATION:
3595                 CHECK_DIRTY_STR(contact->vibration, str, is_dirty);
3596                 FREEandSTRDUP(contact->vibration, str);
3597                 break;
3598         case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
3599                 CHECK_DIRTY_STR(contact->message_alert, str, is_dirty);
3600                 FREEandSTRDUP(contact->message_alert, str);
3601                 break;
3602         default:
3603                 /* LCOV_EXCL_START */
3604                 ERR("property_id(%d) is not supported in value(contact)", property_id);
3605                 return CONTACTS_ERROR_INVALID_PARAMETER;
3606                 /* LCOV_EXCL_STOP */
3607         }
3608         return CONTACTS_ERROR_NONE;
3609 }
3610
3611
3612 static int __ctsvc_simple_contact_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3613 {
3614         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
3615
3616         switch (property_id) {
3617         case CTSVC_PROPERTY_CONTACT_DISPLAY_NAME:
3618                 CHECK_DIRTY_STR(contact->display_name, str, is_dirty);
3619                 FREEandSTRDUP(contact->display_name, str);
3620                 break;
3621                 /*
3622                    ERR("property_id(%d) is a read-only value (contact)", property_id);
3623                    return CONTACTS_ERROR_INVALID_PARAMETER;
3624                    */
3625         case CTSVC_PROPERTY_CONTACT_RINGTONE:
3626                 CHECK_DIRTY_STR(contact->ringtone_path, str, is_dirty);
3627                 FREEandSTRDUP(contact->ringtone_path, str);
3628                 break;
3629         case CTSVC_PROPERTY_CONTACT_IMAGE_THUMBNAIL:
3630                 CHECK_DIRTY_STR(contact->image_thumbnail_path, str, is_dirty);
3631                 FREEandSTRDUP(contact->image_thumbnail_path, str);
3632                 break;
3633         case CTSVC_PROPERTY_CONTACT_UID:
3634                 CHECK_DIRTY_STR(contact->uid, str, is_dirty);
3635                 FREEandSTRDUP(contact->uid, str);
3636                 break;
3637         case CTSVC_PROPERTY_CONTACT_VIBRATION:
3638                 CHECK_DIRTY_STR(contact->vibration, str, is_dirty);
3639                 FREEandSTRDUP(contact->vibration, str);
3640                 break;
3641         case CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT:
3642                 CHECK_DIRTY_STR(contact->message_alert, str, is_dirty);
3643                 FREEandSTRDUP(contact->message_alert, str);
3644                 break;
3645         default:
3646                 /* LCOV_EXCL_START */
3647                 ERR("property_id(%d) is not supported in value(simple_contact)", property_id);
3648                 return CONTACTS_ERROR_INVALID_PARAMETER;
3649                 /* LCOV_EXCL_STOP */
3650         }
3651         return CONTACTS_ERROR_NONE;
3652 }
3653
3654 static int __ctsvc_name_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3655 {
3656         ctsvc_name_s *name = (ctsvc_name_s*)record;
3657
3658         switch (property_id) {
3659         case CTSVC_PROPERTY_NAME_FIRST:
3660                 CHECK_DIRTY_STR(name->first, str, is_dirty);
3661                 FREEandSTRDUP(name->first, str);
3662                 break;
3663         case CTSVC_PROPERTY_NAME_LAST:
3664                 CHECK_DIRTY_STR(name->last, str, is_dirty);
3665                 FREEandSTRDUP(name->last, str);
3666                 break;
3667         case CTSVC_PROPERTY_NAME_ADDITION:
3668                 CHECK_DIRTY_STR(name->addition, str, is_dirty);
3669                 FREEandSTRDUP(name->addition, str);
3670                 break;
3671         case CTSVC_PROPERTY_NAME_SUFFIX:
3672                 CHECK_DIRTY_STR(name->suffix, str, is_dirty);
3673                 FREEandSTRDUP(name->suffix, str);
3674                 break;
3675         case CTSVC_PROPERTY_NAME_PREFIX:
3676                 CHECK_DIRTY_STR(name->prefix, str, is_dirty);
3677                 FREEandSTRDUP(name->prefix, str);
3678                 break;
3679         case CTSVC_PROPERTY_NAME_PHONETIC_FIRST:
3680                 CHECK_DIRTY_STR(name->phonetic_first, str, is_dirty);
3681                 FREEandSTRDUP(name->phonetic_first, str);
3682                 break;
3683         case CTSVC_PROPERTY_NAME_PHONETIC_MIDDLE:
3684                 CHECK_DIRTY_STR(name->phonetic_middle, str, is_dirty);
3685                 FREEandSTRDUP(name->phonetic_middle, str);
3686                 break;
3687         case CTSVC_PROPERTY_NAME_PHONETIC_LAST:
3688                 CHECK_DIRTY_STR(name->phonetic_last, str, is_dirty);
3689                 FREEandSTRDUP(name->phonetic_last, str);
3690                 break;
3691         default:
3692                 /* LCOV_EXCL_START */
3693                 ERR("property_id(%d) is not supported in value(name)", property_id);
3694                 return CONTACTS_ERROR_INVALID_PARAMETER;
3695                 /* LCOV_EXCL_STOP */
3696         }
3697         return CONTACTS_ERROR_NONE;
3698 }
3699
3700 static int __ctsvc_company_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3701 {
3702         ctsvc_company_s *company = (ctsvc_company_s*)record;
3703
3704         switch (property_id) {
3705         case CTSVC_PROPERTY_COMPANY_LABEL:
3706                 CHECK_DIRTY_STR(company->label, str, is_dirty);
3707                 FREEandSTRDUP(company->label, str);
3708                 break;
3709         case CTSVC_PROPERTY_COMPANY_NAME:
3710                 CHECK_DIRTY_STR(company->name, str, is_dirty);
3711                 FREEandSTRDUP(company->name, str);
3712                 break;
3713         case CTSVC_PROPERTY_COMPANY_DEPARTMENT:
3714                 CHECK_DIRTY_STR(company->department, str, is_dirty);
3715                 FREEandSTRDUP(company->department, str);
3716                 break;
3717         case CTSVC_PROPERTY_COMPANY_JOB_TITLE:
3718                 CHECK_DIRTY_STR(company->job_title, str, is_dirty);
3719                 FREEandSTRDUP(company->job_title, str);
3720                 break;
3721         case CTSVC_PROPERTY_COMPANY_ASSISTANT_NAME:
3722                 CHECK_DIRTY_STR(company->assistant_name, str, is_dirty);
3723                 FREEandSTRDUP(company->assistant_name, str);
3724                 break;
3725         case CTSVC_PROPERTY_COMPANY_ROLE:
3726                 CHECK_DIRTY_STR(company->role, str, is_dirty);
3727                 FREEandSTRDUP(company->role, str);
3728                 break;
3729         case CTSVC_PROPERTY_COMPANY_LOGO:
3730                 if (company->logo && company->is_vcard && (NULL == str || STRING_EQUAL != strcmp(company->logo, str))) {
3731                         company->is_vcard = false;
3732                         __ctsvc_temp_image_hash_table_remove(company->logo);
3733                 }
3734                 CHECK_DIRTY_STR(company->logo, str, is_dirty);
3735                 FREEandSTRDUP(company->logo, str);
3736                 break;
3737         case CTSVC_PROPERTY_COMPANY_LOCATION:
3738                 CHECK_DIRTY_STR(company->location, str, is_dirty);
3739                 FREEandSTRDUP(company->location, str);
3740                 break;
3741         case CTSVC_PROPERTY_COMPANY_DESCRIPTION:
3742                 CHECK_DIRTY_STR(company->description, str, is_dirty);
3743                 FREEandSTRDUP(company->description, str);
3744                 break;
3745         case CTSVC_PROPERTY_COMPANY_PHONETIC_NAME:
3746                 CHECK_DIRTY_STR(company->phonetic_name, str, is_dirty);
3747                 FREEandSTRDUP(company->phonetic_name, str);
3748                 break;
3749         default:
3750                 /* LCOV_EXCL_START */
3751                 ERR("property_id(%d) is not supported in value(company)", property_id);
3752                 return CONTACTS_ERROR_INVALID_PARAMETER;
3753                 /* LCOV_EXCL_STOP */
3754         }
3755         return CONTACTS_ERROR_NONE;
3756 }
3757
3758 static int __ctsvc_note_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3759 {
3760         ctsvc_note_s *note = (ctsvc_note_s*)record;
3761
3762         switch (property_id) {
3763         case CTSVC_PROPERTY_NOTE_NOTE:
3764                 CHECK_DIRTY_STR(note->note, str, is_dirty);
3765                 FREEandSTRDUP(note->note, str);
3766                 break;
3767         default:
3768                 /* LCOV_EXCL_START */
3769                 ERR("property_id(%d) is not supported in value(note)", property_id);
3770                 return CONTACTS_ERROR_INVALID_PARAMETER;
3771                 /* LCOV_EXCL_STOP */
3772         }
3773         return CONTACTS_ERROR_NONE;
3774 }
3775
3776 static int __ctsvc_number_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3777 {
3778         ctsvc_number_s *number = (ctsvc_number_s*)record;
3779
3780         switch (property_id) {
3781         case CTSVC_PROPERTY_NUMBER_LABEL:
3782                 CHECK_DIRTY_STR(number->label, str, is_dirty);
3783                 FREEandSTRDUP(number->label, str);
3784                 break;
3785         case CTSVC_PROPERTY_NUMBER_NUMBER:
3786                 CHECK_DIRTY_STR(number->number, str, is_dirty);
3787                 FREEandSTRDUP(number->number, str);
3788                 break;
3789         default:
3790                 /* LCOV_EXCL_START */
3791                 ERR("property_id(%d) is not supported in value(number)", property_id);
3792                 return CONTACTS_ERROR_INVALID_PARAMETER;
3793                 /* LCOV_EXCL_STOP */
3794         }
3795         return CONTACTS_ERROR_NONE;
3796 }
3797
3798 static int __ctsvc_email_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3799 {
3800         ctsvc_email_s *email = (ctsvc_email_s*)record;
3801
3802         switch (property_id) {
3803         case CTSVC_PROPERTY_EMAIL_EMAIL:
3804                 CHECK_DIRTY_STR(email->email_addr, str, is_dirty);
3805                 FREEandSTRDUP(email->email_addr, str);
3806                 break;
3807         case CTSVC_PROPERTY_EMAIL_LABEL:
3808                 CHECK_DIRTY_STR(email->label, str, is_dirty);
3809                 FREEandSTRDUP(email->label, str);
3810                 break;
3811         default:
3812                 /* LCOV_EXCL_START */
3813                 ERR("property_id(%d) is not supported in value(email)", property_id);
3814                 return CONTACTS_ERROR_INVALID_PARAMETER;
3815                 /* LCOV_EXCL_STOP */
3816         }
3817         return CONTACTS_ERROR_NONE;
3818 }
3819
3820 static int __ctsvc_url_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3821 {
3822         ctsvc_url_s *url = (ctsvc_url_s*)record;
3823
3824         switch (property_id) {
3825         case CTSVC_PROPERTY_URL_URL:
3826                 CHECK_DIRTY_STR(url->url, str, is_dirty);
3827                 FREEandSTRDUP(url->url, str);
3828                 break;
3829         case CTSVC_PROPERTY_URL_LABEL:
3830                 CHECK_DIRTY_STR(url->label, str, is_dirty);
3831                 FREEandSTRDUP(url->label, str);
3832                 break;
3833         default:
3834                 /* LCOV_EXCL_START */
3835                 ERR("property_id(%d) is not supported in value(url)", property_id);
3836                 return CONTACTS_ERROR_INVALID_PARAMETER;
3837                 /* LCOV_EXCL_STOP */
3838         }
3839         return CONTACTS_ERROR_NONE;
3840 }
3841
3842 static int __ctsvc_event_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3843 {
3844         ctsvc_event_s *event = (ctsvc_event_s*)record;
3845
3846         switch (property_id) {
3847         case CTSVC_PROPERTY_EVENT_LABEL:
3848                 CHECK_DIRTY_STR(event->label, str, is_dirty);
3849                 FREEandSTRDUP(event->label, str);
3850                 break;
3851         default:
3852                 /* LCOV_EXCL_START */
3853                 ERR("property_id(%d) is not supported in value(event)", property_id);
3854                 return CONTACTS_ERROR_INVALID_PARAMETER;
3855                 /* LCOV_EXCL_STOP */
3856         }
3857         return CONTACTS_ERROR_NONE;
3858 }
3859
3860 static int __ctsvc_nickname_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3861 {
3862         ctsvc_nickname_s *nickname = (ctsvc_nickname_s*)record;
3863
3864         switch (property_id) {
3865         case CTSVC_PROPERTY_NICKNAME_NAME:
3866                 CHECK_DIRTY_STR(nickname->nickname, str, is_dirty);
3867                 FREEandSTRDUP(nickname->nickname, str);
3868                 break;
3869         default:
3870                 /* LCOV_EXCL_START */
3871                 ERR("property_id(%d) is not supported in value(nickname)", property_id);
3872                 return CONTACTS_ERROR_INVALID_PARAMETER;
3873                 /* LCOV_EXCL_STOP */
3874         }
3875         return CONTACTS_ERROR_NONE;
3876 }
3877
3878 static int __ctsvc_address_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3879 {
3880         ctsvc_address_s *address = (ctsvc_address_s*)record;
3881
3882         switch (property_id) {
3883         case CTSVC_PROPERTY_ADDRESS_LABEL:
3884                 CHECK_DIRTY_STR(address->label, str, is_dirty);
3885                 FREEandSTRDUP(address->label, str);
3886                 break;
3887         case CTSVC_PROPERTY_ADDRESS_POSTBOX:
3888                 CHECK_DIRTY_STR(address->pobox, str, is_dirty);
3889                 FREEandSTRDUP(address->pobox, str);
3890                 break;
3891         case CTSVC_PROPERTY_ADDRESS_POSTAL_CODE:
3892                 CHECK_DIRTY_STR(address->postalcode, str, is_dirty);
3893                 FREEandSTRDUP(address->postalcode, str);
3894                 break;
3895         case CTSVC_PROPERTY_ADDRESS_REGION:
3896                 CHECK_DIRTY_STR(address->region, str, is_dirty);
3897                 FREEandSTRDUP(address->region, str);
3898                 break;
3899         case CTSVC_PROPERTY_ADDRESS_LOCALITY:
3900                 CHECK_DIRTY_STR(address->locality, str, is_dirty);
3901                 FREEandSTRDUP(address->locality, str);
3902                 break;
3903         case CTSVC_PROPERTY_ADDRESS_STREET:
3904                 CHECK_DIRTY_STR(address->street, str, is_dirty);
3905                 FREEandSTRDUP(address->street, str);
3906                 break;
3907         case CTSVC_PROPERTY_ADDRESS_COUNTRY:
3908                 CHECK_DIRTY_STR(address->country, str, is_dirty);
3909                 FREEandSTRDUP(address->country, str);
3910                 break;
3911         case CTSVC_PROPERTY_ADDRESS_EXTENDED:
3912                 CHECK_DIRTY_STR(address->extended, str, is_dirty);
3913                 FREEandSTRDUP(address->extended, str);
3914                 break;
3915         default:
3916                 /* LCOV_EXCL_START */
3917                 ERR("property_id(%d) is not supported in value(address)", property_id);
3918                 return CONTACTS_ERROR_INVALID_PARAMETER;
3919                 /* LCOV_EXCL_STOP */
3920         }
3921         return CONTACTS_ERROR_NONE;
3922 }
3923
3924 static int __ctsvc_messenger_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3925 {
3926         ctsvc_messenger_s *messenger = (ctsvc_messenger_s*)record;
3927
3928         switch (property_id) {
3929         case CTSVC_PROPERTY_MESSENGER_LABEL:
3930                 CHECK_DIRTY_STR(messenger->label, str, is_dirty);
3931                 FREEandSTRDUP(messenger->label, str);
3932                 break;
3933         case CTSVC_PROPERTY_MESSENGER_IM_ID:
3934                 CHECK_DIRTY_STR(messenger->im_id, str, is_dirty);
3935                 FREEandSTRDUP(messenger->im_id, str);
3936                 break;
3937         default:
3938                 /* LCOV_EXCL_START */
3939                 ERR("property_id(%d) is not supported in value(messenger)", property_id);
3940                 return CONTACTS_ERROR_INVALID_PARAMETER;
3941                 /* LCOV_EXCL_STOP */
3942         }
3943         return CONTACTS_ERROR_NONE;
3944 }
3945
3946 static int __ctsvc_group_relation_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3947 {
3948         ctsvc_group_relation_s *group_relation = (ctsvc_group_relation_s*)record;
3949
3950         switch (property_id) {
3951         case CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME:
3952                 CHECK_DIRTY_STR(group_relation->group_name, str, is_dirty);
3953                 FREEandSTRDUP(group_relation->group_name, str);
3954                 break;
3955                 /*
3956                    ERR("property_id(%d) is a read-only value (group_relation)", property_id);
3957                    return CONTACTS_ERROR_INVALID_PARAMETER;
3958                    */
3959         default:
3960                 /* LCOV_EXCL_START */
3961                 ERR("property_id(%d) is not supported in value(group_relation)", property_id);
3962                 return CONTACTS_ERROR_INVALID_PARAMETER;
3963                 /* LCOV_EXCL_STOP */
3964         }
3965         return CONTACTS_ERROR_NONE;
3966 }
3967
3968 static int __ctsvc_activity_set_str(contacts_record_h record, unsigned int property_id, const char *str, bool *is_dirty)
3969 {
3970         ctsvc_activity_s *activity = (ctsvc_activity_s*)record;
3971
3972         switch (property_id) {
3973         case CTSVC_PROPERTY_ACTIVITY_SOURCE_NAME:
3974                 CHECK_DIRTY_STR(activity->source_name, str, is_dirty);
3975                 FREEandSTRDUP(activity->source_name, str);
3976                 break;
3977         case CTSVC_PROPERTY_ACTIVITY_STATUS:
3978                 CHECK_DIRTY_STR(activity->status, str, is_dirty);
3979                 FREEandSTRDUP(activity->status, str);
3980                 break;
3981         case CTSVC_PROPERTY_ACTIVITY_SERVICE_OPERATION:
3982                 CHECK_DIRTY_STR(activity->service_operation, str, is_dirty);
3983                 FREEandSTRDUP(activity->service_operation, str);
3984                 break;
3985         case CTSVC_PROPERTY_ACTIVITY_URI:
3986                 CHECK_DIRTY_STR(activity->uri, str, is_dirty);
3987                 FREEandSTRDUP(activity->uri, str);
3988                 break;
3989         default:
3990                 /* LCOV_EXCL_START */
3991                 ERR("property_id(%d) is not supported in value(activity)", property_id);
3992                 return CONTACTS_ERROR_INVALID_PARAMETER;
3993                 /* LCOV_EXCL_STOP */
3994         }
3995         return CONTACTS_ERROR_NONE;
3996 }
3997
3998 static int __ctsvc_activity_photo_set_str(contacts_record_h record, unsigned int property_id,
3999                 const char *str, bool *is_dirty)
4000 {
4001         ctsvc_activity_photo_s *photo = (ctsvc_activity_photo_s*)record;
4002
4003         switch (property_id) {
4004         case CTSVC_PROPERTY_ACTIVITY_PHOTO_URL:
4005                 CHECK_DIRTY_STR(photo->photo_url, str, is_dirty);
4006                 FREEandSTRDUP(photo->photo_url, str);
4007                 break;
4008         default:
4009                 /* LCOV_EXCL_START */
4010                 ERR("property_id(%d) is not supported in value(activity)", property_id);
4011                 return CONTACTS_ERROR_INVALID_PARAMETER;
4012                 /* LCOV_EXCL_STOP */
4013         }
4014         return CONTACTS_ERROR_NONE;
4015 }
4016
4017 static int __ctsvc_profile_set_str(contacts_record_h record, unsigned int property_id,
4018                 const char *str, bool *is_dirty)
4019 {
4020         ctsvc_profile_s *profile = (ctsvc_profile_s*)record;
4021
4022         switch (property_id) {
4023         case CTSVC_PROPERTY_PROFILE_UID:
4024                 CHECK_DIRTY_STR(profile->uid, str, is_dirty);
4025                 FREEandSTRDUP(profile->uid, str);
4026                 break;
4027         case CTSVC_PROPERTY_PROFILE_TEXT:
4028                 CHECK_DIRTY_STR(profile->text, str, is_dirty);
4029                 FREEandSTRDUP(profile->text, str);
4030                 break;
4031         case CTSVC_PROPERTY_PROFILE_SERVICE_OPERATION:
4032                 CHECK_DIRTY_STR(profile->service_operation, str, is_dirty);
4033                 FREEandSTRDUP(profile->service_operation, str);
4034                 break;
4035         case CTSVC_PROPERTY_PROFILE_MIME:
4036                 CHECK_DIRTY_STR(profile->mime, str, is_dirty);
4037                 FREEandSTRDUP(profile->mime, str);
4038                 break;
4039         case CTSVC_PROPERTY_PROFILE_APP_ID:
4040                 CHECK_DIRTY_STR(profile->app_id, str, is_dirty);
4041                 FREEandSTRDUP(profile->app_id, str);
4042                 break;
4043         case CTSVC_PROPERTY_PROFILE_URI:
4044                 CHECK_DIRTY_STR(profile->uri, str, is_dirty);
4045                 FREEandSTRDUP(profile->uri, str);
4046                 break;
4047         case CTSVC_PROPERTY_PROFILE_CATEGORY:
4048                 CHECK_DIRTY_STR(profile->category, str, is_dirty);
4049                 FREEandSTRDUP(profile->category, str);
4050                 break;
4051         case CTSVC_PROPERTY_PROFILE_EXTRA_DATA:
4052                 CHECK_DIRTY_STR(profile->extra_data, str, is_dirty);
4053                 FREEandSTRDUP(profile->extra_data, str);
4054                 break;
4055         default:
4056                 /* LCOV_EXCL_START */
4057                 ERR("property_id(%d) is not supported in value(profile)", property_id);
4058                 return CONTACTS_ERROR_INVALID_PARAMETER;
4059                 /* LCOV_EXCL_STOP */
4060         }
4061         return CONTACTS_ERROR_NONE;
4062 }
4063
4064 static int __ctsvc_relationship_set_str(contacts_record_h record, unsigned int property_id,
4065                 const char *str, bool *is_dirty)
4066 {
4067         ctsvc_relationship_s *relationship = (ctsvc_relationship_s*)record;
4068
4069         switch (property_id) {
4070         case CTSVC_PROPERTY_RELATIONSHIP_LABEL:
4071                 CHECK_DIRTY_STR(relationship->label, str, is_dirty);
4072                 FREEandSTRDUP(relationship->label, str);
4073                 break;
4074         case CTSVC_PROPERTY_RELATIONSHIP_NAME:
4075                 CHECK_DIRTY_STR(relationship->name, str, is_dirty);
4076                 FREEandSTRDUP(relationship->name, str);
4077                 break;
4078         default:
4079                 /* LCOV_EXCL_START */
4080                 ERR("property_id(%d) is not supported in value(relationship)", property_id);
4081                 return CONTACTS_ERROR_INVALID_PARAMETER;
4082                 /* LCOV_EXCL_STOP */
4083         }
4084         return CONTACTS_ERROR_NONE;
4085 }
4086
4087 static int __ctsvc_image_set_str(contacts_record_h record, unsigned int property_id,
4088                 const char *str, bool *is_dirty)
4089 {
4090         ctsvc_image_s *image = (ctsvc_image_s*)record;
4091
4092         switch (property_id) {
4093         case CTSVC_PROPERTY_IMAGE_LABEL:
4094                 CHECK_DIRTY_STR(image->label, str, is_dirty);
4095                 FREEandSTRDUP(image->label, str);
4096                 break;
4097         case CTSVC_PROPERTY_IMAGE_PATH:
4098                 if (image->path && image->is_vcard
4099                                 && (NULL == str || STRING_EQUAL != strcmp(image->path, str))) {
4100                         image->is_vcard = false;
4101                         __ctsvc_temp_image_hash_table_remove(image->path);
4102                 }
4103                 CHECK_DIRTY_STR(image->path, str, is_dirty);
4104                 FREEandSTRDUP(image->path, str);
4105                 break;
4106         default:
4107                 /* LCOV_EXCL_START */
4108                 ERR("property_id(%d) is not supported in value(image)", property_id);
4109                 return CONTACTS_ERROR_INVALID_PARAMETER;
4110                 /* LCOV_EXCL_STOP */
4111         }
4112         return CONTACTS_ERROR_NONE;
4113 }
4114
4115 static int __ctsvc_extension_set_str(contacts_record_h record, unsigned int property_id,
4116                 const char *str, bool *is_dirty)
4117 {
4118         ctsvc_extension_s *extension = (ctsvc_extension_s*)record;
4119
4120         switch (property_id) {
4121         case CTSVC_PROPERTY_EXTENSION_DATA2:
4122                 CHECK_DIRTY_STR(extension->data2, str, is_dirty);
4123                 FREEandSTRDUP(extension->data2, str);
4124                 break;
4125         case CTSVC_PROPERTY_EXTENSION_DATA3:
4126                 CHECK_DIRTY_STR(extension->data3, str, is_dirty);
4127                 FREEandSTRDUP(extension->data3, str);
4128                 break;
4129         case CTSVC_PROPERTY_EXTENSION_DATA4:
4130                 CHECK_DIRTY_STR(extension->data4, str, is_dirty);
4131                 FREEandSTRDUP(extension->data4, str);
4132                 break;
4133         case CTSVC_PROPERTY_EXTENSION_DATA5:
4134                 CHECK_DIRTY_STR(extension->data5, str, is_dirty);
4135                 FREEandSTRDUP(extension->data5, str);
4136                 break;
4137         case CTSVC_PROPERTY_EXTENSION_DATA6:
4138                 CHECK_DIRTY_STR(extension->data6, str, is_dirty);
4139                 FREEandSTRDUP(extension->data6, str);
4140                 break;
4141         case CTSVC_PROPERTY_EXTENSION_DATA7:
4142                 CHECK_DIRTY_STR(extension->data7, str, is_dirty);
4143                 FREEandSTRDUP(extension->data7, str);
4144                 break;
4145         case CTSVC_PROPERTY_EXTENSION_DATA8:
4146                 CHECK_DIRTY_STR(extension->data8, str, is_dirty);
4147                 FREEandSTRDUP(extension->data8, str);
4148                 break;
4149         case CTSVC_PROPERTY_EXTENSION_DATA9:
4150                 CHECK_DIRTY_STR(extension->data9, str, is_dirty);
4151                 FREEandSTRDUP(extension->data9, str);
4152                 break;
4153         case CTSVC_PROPERTY_EXTENSION_DATA10:
4154                 CHECK_DIRTY_STR(extension->data10, str, is_dirty);
4155                 FREEandSTRDUP(extension->data10, str);
4156                 break;
4157         case CTSVC_PROPERTY_EXTENSION_DATA11:
4158                 CHECK_DIRTY_STR(extension->data11, str, is_dirty);
4159                 FREEandSTRDUP(extension->data11, str);
4160                 break;
4161         case CTSVC_PROPERTY_EXTENSION_DATA12:
4162                 CHECK_DIRTY_STR(extension->data12, str, is_dirty);
4163                 FREEandSTRDUP(extension->data12, str);
4164                 break;
4165         default:
4166                 /* LCOV_EXCL_START */
4167                 ERR("property_id(%d) is not supported in value(extension)", property_id);
4168                 return CONTACTS_ERROR_INVALID_PARAMETER;
4169                 /* LCOV_EXCL_STOP */
4170         }
4171         return CONTACTS_ERROR_NONE;
4172 }
4173
4174 static int __ctsvc_sip_set_str(contacts_record_h record, unsigned int property_id,
4175                 const char* str, bool *is_dirty)
4176 {
4177         ctsvc_sip_s *sip = (ctsvc_sip_s *)record;
4178
4179         switch (property_id) {
4180         case CTSVC_PROPERTY_SIP_ADDRESS:
4181                 CHECK_DIRTY_STR(sip->address, str, is_dirty);
4182                 FREEandSTRDUP(sip->address, str);
4183                 break;
4184         case CTSVC_PROPERTY_SIP_LABEL:
4185                 CHECK_DIRTY_STR(sip->label, str, is_dirty);
4186                 FREEandSTRDUP(sip->label, str);
4187                 break;
4188         default:
4189                 /* LCOV_EXCL_START */
4190                 ERR("Invalid parameter : property_id(%d) is not supported in value(sip)", property_id);
4191                 return CONTACTS_ERROR_INVALID_PARAMETER;
4192                 /* LCOV_EXCL_STOP */
4193         }
4194         return CONTACTS_ERROR_NONE;
4195 }
4196
4197 static int __ctsvc_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4198 {
4199         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
4200         switch (property_id) {
4201         case CTSVC_PROPERTY_CONTACT_IS_FAVORITE:
4202                 *value = contact->is_favorite;
4203                 break;
4204         case CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER:
4205                 *value = contact->has_phonenumber;
4206                 break;
4207         case CTSVC_PROPERTY_CONTACT_HAS_EMAIL:
4208                 *value = contact->has_email;
4209                 break;
4210         default:
4211                 /* LCOV_EXCL_START */
4212                 ERR("property_id(0x%x) is not supported in value(contact)", property_id);
4213                 return CONTACTS_ERROR_INVALID_PARAMETER;
4214                 /* LCOV_EXCL_STOP */
4215         }
4216         return CONTACTS_ERROR_NONE;
4217 }
4218
4219 static int __ctsvc_simple_contact_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4220 {
4221         ctsvc_simple_contact_s *contact = (ctsvc_simple_contact_s*)record;
4222         switch (property_id) {
4223         case CTSVC_PROPERTY_CONTACT_IS_FAVORITE:
4224                 *value = contact->is_favorite;
4225                 break;
4226         case CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER:
4227                 *value = contact->has_phonenumber;
4228                 break;
4229         case CTSVC_PROPERTY_CONTACT_HAS_EMAIL:
4230                 *value = contact->has_email;
4231                 break;
4232         default:
4233                 /* LCOV_EXCL_START */
4234                 ERR("property_id(0x%x) is not supported in value(contact)", property_id);
4235                 return CONTACTS_ERROR_INVALID_PARAMETER;
4236                 /* LCOV_EXCL_STOP */
4237         }
4238         return CONTACTS_ERROR_NONE;
4239 }
4240
4241
4242 static int __ctsvc_number_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4243 {
4244         ctsvc_number_s *number = (ctsvc_number_s*)record;
4245         switch (property_id) {
4246         case CTSVC_PROPERTY_NUMBER_IS_DEFAULT:
4247                 *value = number->is_default;
4248                 break;
4249         default:
4250                 /* LCOV_EXCL_START */
4251                 ERR("property_id(0x%x) is not supported in value(number)", property_id);
4252                 return CONTACTS_ERROR_INVALID_PARAMETER;
4253                 /* LCOV_EXCL_STOP */
4254         }
4255         return CONTACTS_ERROR_NONE;
4256 }
4257
4258 static int __ctsvc_email_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4259 {
4260         ctsvc_email_s *email = (ctsvc_email_s*)record;
4261         switch (property_id) {
4262         case CTSVC_PROPERTY_EMAIL_IS_DEFAULT:
4263                 *value = email->is_default;
4264                 break;
4265         default:
4266                 /* LCOV_EXCL_START */
4267                 ERR("property_id(0x%x) is not supported in value(email)", property_id);
4268                 return CONTACTS_ERROR_INVALID_PARAMETER;
4269                 /* LCOV_EXCL_STOP */
4270         }
4271         return CONTACTS_ERROR_NONE;
4272 }
4273
4274 static int __ctsvc_event_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4275 {
4276         ctsvc_event_s *event = (ctsvc_event_s*)record;
4277         switch (property_id) {
4278         case CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH: /* deprecated */
4279                 WARN(DEPRECATED_STRING_FORMAT, "is_leap_month");
4280                 *value = event->is_leap_month;
4281                 break;
4282         default:
4283                 /* LCOV_EXCL_START */
4284                 ERR("property_id(0x%x) is not supported in value(event)", property_id);
4285                 return CONTACTS_ERROR_INVALID_PARAMETER;
4286                 /* LCOV_EXCL_STOP */
4287         }
4288         return CONTACTS_ERROR_NONE;
4289 }
4290
4291 static int __ctsvc_image_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4292 {
4293         ctsvc_image_s *image = (ctsvc_image_s*)record;
4294         switch (property_id) {
4295         case CTSVC_PROPERTY_IMAGE_IS_DEFAULT:
4296                 *value = image->is_default;
4297                 break;
4298         default:
4299                 /* LCOV_EXCL_START */
4300                 ERR("property_id(0x%x) is not supported in value(image)", property_id);
4301                 return CONTACTS_ERROR_INVALID_PARAMETER;
4302                 /* LCOV_EXCL_STOP */
4303         }
4304         return CONTACTS_ERROR_NONE;
4305 }
4306
4307 static int __ctsvc_address_get_bool(contacts_record_h record, unsigned int property_id, bool *value)
4308 {
4309         ctsvc_address_s *address = (ctsvc_address_s*)record;
4310         switch (property_id) {
4311         case CTSVC_PROPERTY_ADDRESS_IS_DEFAULT:
4312                 *value = address->is_default;
4313                 break;
4314         default:
4315                 /* LCOV_EXCL_START */
4316                 ERR("property_id(0x%x) is not supported in value(address)", property_id);
4317                 return CONTACTS_ERROR_INVALID_PARAMETER;
4318                 /* LCOV_EXCL_STOP */
4319         }
4320         return CONTACTS_ERROR_NONE;
4321 }
4322
4323 static int __ctsvc_contact_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4324 {
4325         ctsvc_contact_s *contact = (ctsvc_contact_s*)record;
4326
4327         switch (property_id) {
4328         case CTSVC_PROPERTY_CONTACT_IS_FAVORITE:
4329                 CHECK_DIRTY_VAL(contact->is_favorite, value, is_dirty);
4330                 contact->is_favorite = value;
4331                 break;
4332         case CTSVC_PROPERTY_CONTACT_HAS_PHONENUMBER:
4333                 CHECK_DIRTY_VAL(contact->has_phonenumber, value, is_dirty);
4334                 contact->has_phonenumber = value;
4335                 break;
4336         case CTSVC_PROPERTY_CONTACT_HAS_EMAIL:
4337                 CHECK_DIRTY_VAL(contact->has_email, value, is_dirty);
4338                 contact->has_email = value;
4339                 break;
4340                 /*
4341                    ERR("property_id(%d) is a read-only value(contact)", property_id);
4342                    break;
4343                    */
4344         default:
4345                 /* LCOV_EXCL_START */
4346                 ERR("property_id(0x%x) is not supported in value(contact)", property_id);
4347                 return CONTACTS_ERROR_INVALID_PARAMETER;
4348                 /* LCOV_EXCL_STOP */
4349         }
4350         return CONTACTS_ERROR_NONE;
4351 }
4352
4353 static int __ctsvc_number_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4354 {
4355         ctsvc_number_s *number = (ctsvc_number_s*)record;
4356
4357         switch (property_id) {
4358         case CTSVC_PROPERTY_NUMBER_IS_DEFAULT:
4359                 CHECK_DIRTY_VAL(number->is_default, value, is_dirty);
4360                 number->is_default = value;
4361                 break;
4362         default:
4363                 /* LCOV_EXCL_START */
4364                 ERR("property_id(%d) is not supported in value(number)", property_id);
4365                 return CONTACTS_ERROR_INVALID_PARAMETER;
4366                 /* LCOV_EXCL_STOP */
4367         }
4368         return CONTACTS_ERROR_NONE;
4369 }
4370
4371 static int __ctsvc_email_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4372 {
4373         ctsvc_email_s *email = (ctsvc_email_s*)record;
4374
4375         switch (property_id) {
4376         case CTSVC_PROPERTY_EMAIL_IS_DEFAULT:
4377                 CHECK_DIRTY_VAL(email->is_default, value, is_dirty);
4378                 email->is_default = value;
4379                 break;
4380         default:
4381                 /* LCOV_EXCL_START */
4382                 ERR("property_id(%d) is not supported in value(email)", property_id);
4383                 return CONTACTS_ERROR_INVALID_PARAMETER;
4384                 /* LCOV_EXCL_STOP */
4385         }
4386         return CONTACTS_ERROR_NONE;
4387 }
4388
4389 static int __ctsvc_event_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4390 {
4391         ctsvc_event_s *event = (ctsvc_event_s*)record;
4392
4393         switch (property_id) {
4394         case CTSVC_PROPERTY_EVENT_IS_LEAP_MONTH:
4395                 WARN(DEPRECATED_STRING_FORMAT, "is_leap_month");
4396                 CHECK_DIRTY_VAL(event->is_leap_month, value, is_dirty);
4397                 event->is_leap_month = value;
4398                 break;
4399         default:
4400                 /* LCOV_EXCL_START */
4401                 ERR("property_id(%d) is not supported in value(event)", property_id);
4402                 return CONTACTS_ERROR_INVALID_PARAMETER;
4403                 /* LCOV_EXCL_STOP */
4404         }
4405         return CONTACTS_ERROR_NONE;
4406 }
4407
4408 static int __ctsvc_image_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4409 {
4410         ctsvc_image_s *image = (ctsvc_image_s*)record;
4411
4412         switch (property_id) {
4413         case CTSVC_PROPERTY_IMAGE_IS_DEFAULT:
4414                 CHECK_DIRTY_VAL(image->is_default, value, is_dirty);
4415                 image->is_default = value;
4416                 break;
4417         default:
4418                 /* LCOV_EXCL_START */
4419                 ERR("property_id(0x%x) is not supported in value(image)", property_id);
4420                 return CONTACTS_ERROR_INVALID_PARAMETER;
4421                 /* LCOV_EXCL_STOP */
4422         }
4423         return CONTACTS_ERROR_NONE;
4424 }
4425
4426 static int __ctsvc_address_set_bool(contacts_record_h record, unsigned int property_id, bool value, bool *is_dirty)
4427 {
4428         ctsvc_address_s *address = (ctsvc_address_s*)record;
4429
4430         switch (property_id) {
4431         case CTSVC_PROPERTY_ADDRESS_IS_DEFAULT:
4432                 CHECK_DIRTY_VAL(address->is_default, value, is_dirty);
4433                 address->is_default = value;
4434                 break;
4435         default:
4436                 /* LCOV_EXCL_START */
4437                 ERR("property_id(%d) is not supported in value(address)", property_id);
4438                 return CONTACTS_ERROR_INVALID_PARAMETER;
4439                 /* LCOV_EXCL_STOP */
4440         }
4441         return CONTACTS_ERROR_NONE;
4442 }
4443
4444 static int __ctsvc_contact_clone(contacts_record_h record, contacts_record_h *out_record)
4445 {
4446         ctsvc_contact_s *out_data = NULL;
4447         ctsvc_contact_s *src_data = NULL;
4448
4449         src_data = (ctsvc_contact_s*)record;
4450         out_data = calloc(1, sizeof(ctsvc_contact_s));
4451         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4452
4453         out_data->id = src_data->id;
4454         out_data->person_id = src_data->person_id;
4455         out_data->addressbook_id = src_data->addressbook_id;
4456         out_data->changed_time = src_data->changed_time;
4457         out_data->changed_ver = src_data->changed_ver;
4458         out_data->link_mode = src_data->link_mode;
4459         out_data->display_source_type = src_data->display_source_type;
4460         out_data->display_name_language = src_data->display_name_language;
4461         out_data->reverse_display_name_language = src_data->reverse_display_name_language;
4462         out_data->has_phonenumber = src_data->has_phonenumber;
4463         out_data->has_email = src_data->has_email;
4464         out_data->is_favorite = src_data->is_favorite;
4465
4466         out_data->display_name = SAFE_STRDUP(src_data->display_name);
4467         out_data->reverse_display_name = SAFE_STRDUP(src_data->reverse_display_name);
4468         out_data->uid = SAFE_STRDUP(src_data->uid);
4469         out_data->ringtone_path = SAFE_STRDUP(src_data->ringtone_path);
4470         out_data->vibration = SAFE_STRDUP(src_data->vibration);
4471         out_data->message_alert = SAFE_STRDUP(src_data->message_alert);
4472         out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);
4473         out_data->sort_name = SAFE_STRDUP(src_data->sort_name);
4474         out_data->reverse_sort_name = SAFE_STRDUP(src_data->reverse_sort_name);
4475         out_data->sortkey = SAFE_STRDUP(src_data->sortkey);
4476         out_data->reverse_sortkey = SAFE_STRDUP(src_data->reverse_sortkey);
4477
4478         ctsvc_list_clone((contacts_list_h)src_data->name, (contacts_list_h*)&out_data->name);
4479         out_data->name->l_type = CTSVC_RECORD_NAME;
4480
4481         ctsvc_list_clone((contacts_list_h)src_data->company, (contacts_list_h*)&out_data->company);
4482         out_data->company->l_type = CTSVC_RECORD_COMPANY;
4483
4484         ctsvc_list_clone((contacts_list_h)src_data->note, (contacts_list_h*)&out_data->note);
4485         out_data->note->l_type = CTSVC_RECORD_NOTE;
4486
4487         ctsvc_list_clone((contacts_list_h)src_data->numbers, (contacts_list_h*)&out_data->numbers);
4488         out_data->numbers->l_type = CTSVC_RECORD_NUMBER;
4489
4490         ctsvc_list_clone((contacts_list_h)src_data->emails, (contacts_list_h*)&out_data->emails);
4491         out_data->emails->l_type = CTSVC_RECORD_EMAIL;
4492
4493         ctsvc_list_clone((contacts_list_h)src_data->grouprelations, (contacts_list_h*)&out_data->grouprelations);
4494         out_data->grouprelations->l_type = CTSVC_RECORD_GROUP_RELATION;
4495
4496         ctsvc_list_clone((contacts_list_h)src_data->events, (contacts_list_h*)&out_data->events);
4497         out_data->events->l_type = CTSVC_RECORD_EVENT;
4498
4499         ctsvc_list_clone((contacts_list_h)src_data->messengers, (contacts_list_h*)&out_data->messengers);
4500         out_data->messengers->l_type = CTSVC_RECORD_MESSENGER;
4501
4502         ctsvc_list_clone((contacts_list_h)src_data->postal_addrs, (contacts_list_h*)&out_data->postal_addrs);
4503         out_data->postal_addrs->l_type = CTSVC_RECORD_ADDRESS;
4504
4505         ctsvc_list_clone((contacts_list_h)src_data->urls, (contacts_list_h*)&out_data->urls);
4506         out_data->urls->l_type = CTSVC_RECORD_URL;
4507
4508         ctsvc_list_clone((contacts_list_h)src_data->nicknames, (contacts_list_h*)&out_data->nicknames);
4509         out_data->nicknames->l_type = CTSVC_RECORD_NICKNAME;
4510
4511         ctsvc_list_clone((contacts_list_h)src_data->profiles, (contacts_list_h*)&out_data->profiles);
4512         out_data->profiles->l_type = CTSVC_RECORD_PROFILE;
4513
4514         ctsvc_list_clone((contacts_list_h)src_data->relationships, (contacts_list_h*)&out_data->relationships);
4515         out_data->relationships->l_type = CTSVC_RECORD_RELATIONSHIP;
4516
4517         ctsvc_list_clone((contacts_list_h)src_data->images, (contacts_list_h*)&out_data->images);
4518         out_data->images->l_type = CTSVC_RECORD_IMAGE;
4519
4520         ctsvc_list_clone((contacts_list_h)src_data->extensions, (contacts_list_h*)&out_data->extensions);
4521         out_data->extensions->l_type = CTSVC_RECORD_EXTENSION;
4522
4523         ctsvc_list_clone((contacts_list_h)src_data->sips, (contacts_list_h*)&out_data->sips);
4524         out_data->sips->l_type = CTSVC_RECORD_SIP;
4525
4526         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4527         if (CONTACTS_ERROR_NONE != ret) {
4528                 /* LCOV_EXCL_START */
4529                 ERR("ctsvc_record_copy_base() Fail");
4530                 __ctsvc_contact_destroy((contacts_record_h)out_data, true);
4531                 return ret;
4532                 /* LCOV_EXCL_STOP */
4533         }
4534
4535         *out_record = (contacts_record_h)out_data;
4536
4537         return CONTACTS_ERROR_NONE;
4538 }
4539
4540
4541 static int __ctsvc_activity_clone(contacts_record_h record, contacts_record_h *out_record)
4542 {
4543         ctsvc_activity_s *out_data = NULL;
4544         ctsvc_activity_s *src_data = NULL;
4545
4546         src_data = (ctsvc_activity_s*)record;
4547         out_data = calloc(1, sizeof(ctsvc_activity_s));
4548         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4549
4550         out_data->id = src_data->id;
4551         out_data->contact_id = src_data->contact_id;
4552         out_data->timestamp = src_data->timestamp;
4553         out_data->source_name = SAFE_STRDUP(src_data->source_name);
4554         out_data->status = SAFE_STRDUP(src_data->status);
4555         out_data->service_operation = SAFE_STRDUP(src_data->service_operation);
4556         out_data->uri = SAFE_STRDUP(src_data->uri);
4557
4558         ctsvc_list_clone((contacts_list_h)src_data->photos, (contacts_list_h*)&out_data->photos);
4559         out_data->photos->l_type = CTSVC_RECORD_ACTIVITY_PHOTO;
4560
4561         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4562         if (CONTACTS_ERROR_NONE != ret) {
4563                 /* LCOV_EXCL_START */
4564                 ERR("ctsvc_record_copy_base() Fail");
4565                 __ctsvc_activity_destroy((contacts_record_h)out_data, true);
4566                 return ret;
4567                 /* LCOV_EXCL_STOP */
4568         }
4569
4570         *out_record = (contacts_record_h)out_data;
4571         return CONTACTS_ERROR_NONE;
4572 }
4573
4574 static int __ctsvc_activity_photo_clone(contacts_record_h record, contacts_record_h *out_record)
4575 {
4576         ctsvc_activity_photo_s *out_data = NULL;
4577         ctsvc_activity_photo_s *src_data = NULL;
4578
4579         src_data = (ctsvc_activity_photo_s*)record;
4580         out_data = calloc(1, sizeof(ctsvc_activity_photo_s));
4581         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4582
4583         out_data->id = src_data->id;
4584         out_data->activity_id = src_data->activity_id;
4585         out_data->photo_url = SAFE_STRDUP(src_data->photo_url);
4586         out_data->sort_index = src_data->sort_index;
4587
4588         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4589         if (CONTACTS_ERROR_NONE != ret) {
4590                 /* LCOV_EXCL_START */
4591                 ERR("ctsvc_record_copy_base() Fail");
4592                 __ctsvc_activity_photo_destroy((contacts_record_h)out_data, true);
4593                 return ret;
4594                 /* LCOV_EXCL_STOP */
4595         }
4596
4597         *out_record = (contacts_record_h)out_data;
4598         return CONTACTS_ERROR_NONE;
4599 }
4600
4601 static int __ctsvc_address_clone(contacts_record_h record, contacts_record_h *out_record)
4602 {
4603         ctsvc_address_s *out_data = NULL;
4604         ctsvc_address_s *src_data = NULL;
4605
4606         src_data = (ctsvc_address_s*)record;
4607         out_data = calloc(1, sizeof(ctsvc_address_s));
4608         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4609
4610         out_data->id = src_data->id;
4611         out_data->contact_id = src_data->contact_id;
4612         out_data->type = src_data->type;
4613         out_data->is_default = src_data->is_default;
4614         out_data->label = SAFE_STRDUP(src_data->label);
4615         out_data->pobox = SAFE_STRDUP(src_data->pobox);
4616         out_data->postalcode = SAFE_STRDUP(src_data->postalcode);
4617         out_data->region = SAFE_STRDUP(src_data->region);
4618         out_data->locality = SAFE_STRDUP(src_data->locality);
4619         out_data->street = SAFE_STRDUP(src_data->street);
4620         out_data->extended = SAFE_STRDUP(src_data->extended);
4621         out_data->country = SAFE_STRDUP(src_data->country);
4622
4623         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4624         if (CONTACTS_ERROR_NONE != ret) {
4625                 /* LCOV_EXCL_START */
4626                 ERR("ctsvc_record_copy_base() Fail");
4627                 __ctsvc_address_destroy((contacts_record_h)out_data, true);
4628                 return ret;
4629                 /* LCOV_EXCL_STOP */
4630         }
4631
4632         *out_record = (contacts_record_h)out_data;
4633         return CONTACTS_ERROR_NONE;
4634 }
4635
4636 static int __ctsvc_company_clone(contacts_record_h record, contacts_record_h *out_record)
4637 {
4638         ctsvc_company_s *out_data = NULL;
4639         ctsvc_company_s *src_data = NULL;
4640
4641         src_data = (ctsvc_company_s*)record;
4642         out_data = calloc(1, sizeof(ctsvc_company_s));
4643         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4644
4645         out_data->id = src_data->id;
4646         out_data->contact_id = src_data->contact_id;
4647         out_data->is_default = src_data->is_default;
4648         out_data->type = src_data->type;
4649         out_data->is_vcard = src_data->is_vcard;
4650         out_data->label = SAFE_STRDUP(src_data->label);
4651         out_data->name = SAFE_STRDUP(src_data->name);
4652         out_data->department = SAFE_STRDUP(src_data->department);
4653         out_data->job_title = SAFE_STRDUP(src_data->job_title);
4654         out_data->role = SAFE_STRDUP(src_data->role);
4655         out_data->assistant_name = SAFE_STRDUP(src_data->assistant_name);
4656         if (src_data->logo && src_data->is_vcard)
4657                 __ctsvc_temp_image_hash_table_insert(src_data->logo);
4658         out_data->logo = SAFE_STRDUP(src_data->logo);
4659         out_data->location = SAFE_STRDUP(src_data->location);
4660         out_data->description = SAFE_STRDUP(src_data->description);
4661         out_data->phonetic_name = SAFE_STRDUP(src_data->phonetic_name);
4662
4663         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4664         if (CONTACTS_ERROR_NONE != ret) {
4665                 /* LCOV_EXCL_START */
4666                 ERR("ctsvc_record_copy_base() Fail");
4667                 __ctsvc_company_destroy((contacts_record_h)out_data, true);
4668                 return ret;
4669                 /* LCOV_EXCL_STOP */
4670         }
4671
4672         *out_record = (contacts_record_h)out_data;
4673         return CONTACTS_ERROR_NONE;
4674 }
4675
4676 static int __ctsvc_email_clone(contacts_record_h record, contacts_record_h *out_record)
4677 {
4678         ctsvc_email_s *out_data = NULL;
4679         ctsvc_email_s *src_data = NULL;
4680
4681         src_data = (ctsvc_email_s*)record;
4682         out_data = calloc(1, sizeof(ctsvc_email_s));
4683         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4684
4685         out_data->id = src_data->id;
4686         out_data->is_default = src_data->is_default;
4687         out_data->contact_id = src_data->contact_id;
4688         out_data->type = src_data->type;
4689         out_data->label = SAFE_STRDUP(src_data->label);
4690         out_data->email_addr = SAFE_STRDUP(src_data->email_addr);
4691
4692         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4693         if (CONTACTS_ERROR_NONE != ret) {
4694                 /* LCOV_EXCL_START */
4695                 ERR("ctsvc_record_copy_base() Fail");
4696                 __ctsvc_email_destroy((contacts_record_h)out_data, true);
4697                 return ret;
4698                 /* LCOV_EXCL_STOP */
4699         }
4700
4701         *out_record = (contacts_record_h)out_data;
4702         return CONTACTS_ERROR_NONE;
4703 }
4704
4705 static int __ctsvc_event_clone(contacts_record_h record, contacts_record_h *out_record)
4706 {
4707         ctsvc_event_s *out_data = NULL;
4708         ctsvc_event_s *src_data = NULL;
4709
4710         src_data = (ctsvc_event_s*)record;
4711         out_data = calloc(1, sizeof(ctsvc_event_s));
4712         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4713
4714         out_data->id = src_data->id;
4715         out_data->contact_id = src_data->contact_id;
4716         out_data->type = src_data->type;
4717         out_data->label = SAFE_STRDUP(src_data->label);
4718         out_data->date = src_data->date;
4719         out_data->calendar_type = src_data->calendar_type;
4720         out_data->is_leap_month = src_data->is_leap_month;
4721
4722         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4723         if (CONTACTS_ERROR_NONE != ret) {
4724                 /* LCOV_EXCL_START */
4725                 ERR("ctsvc_record_copy_base() Fail");
4726                 __ctsvc_event_destroy((contacts_record_h)out_data, true);
4727                 return ret;
4728                 /* LCOV_EXCL_STOP */
4729         }
4730
4731         *out_record = (contacts_record_h)out_data;
4732         return CONTACTS_ERROR_NONE;
4733 }
4734
4735 static int __ctsvc_extension_clone(contacts_record_h record, contacts_record_h *out_record)
4736 {
4737         ctsvc_extension_s *out_data = NULL;
4738         ctsvc_extension_s *src_data = NULL;
4739
4740         src_data = (ctsvc_extension_s*)record;
4741         out_data = calloc(1, sizeof(ctsvc_extension_s));
4742         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4743
4744         out_data->id = src_data->id;
4745         out_data->contact_id = src_data->contact_id;
4746         /* out_data->is_default = src_data->is_default; */
4747         out_data->data1 = src_data->data1;
4748         out_data->data2 = SAFE_STRDUP(src_data->data2);
4749         out_data->data3 = SAFE_STRDUP(src_data->data3);
4750         out_data->data4 = SAFE_STRDUP(src_data->data4);
4751         out_data->data5 = SAFE_STRDUP(src_data->data5);
4752         out_data->data6 = SAFE_STRDUP(src_data->data6);
4753         out_data->data7 = SAFE_STRDUP(src_data->data7);
4754         out_data->data8 = SAFE_STRDUP(src_data->data8);
4755         out_data->data9 = SAFE_STRDUP(src_data->data9);
4756         out_data->data10 = SAFE_STRDUP(src_data->data10);
4757         out_data->data11 = SAFE_STRDUP(src_data->data11);
4758         out_data->data12 = SAFE_STRDUP(src_data->data12);
4759
4760         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4761         if (CONTACTS_ERROR_NONE != ret) {
4762                 /* LCOV_EXCL_START */
4763                 ERR("ctsvc_record_copy_base() Fail");
4764                 __ctsvc_extension_destroy((contacts_record_h)out_data, true);
4765                 return ret;
4766                 /* LCOV_EXCL_STOP */
4767         }
4768
4769         *out_record = (contacts_record_h)out_data;
4770         return CONTACTS_ERROR_NONE;
4771 }
4772
4773 static int __ctsvc_group_relation_clone(contacts_record_h record, contacts_record_h *out_record)
4774 {
4775         ctsvc_group_relation_s *out_data = NULL;
4776         ctsvc_group_relation_s *src_data = NULL;
4777
4778         src_data = (ctsvc_group_relation_s*)record;
4779         out_data = calloc(1, sizeof(ctsvc_group_relation_s));
4780         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4781
4782         out_data->id = src_data->id;
4783         out_data->group_id = src_data->group_id;
4784         out_data->contact_id = src_data->contact_id;
4785         out_data->group_name = SAFE_STRDUP(src_data->group_name);
4786
4787         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4788         if (CONTACTS_ERROR_NONE != ret) {
4789                 /* LCOV_EXCL_START */
4790                 ERR("ctsvc_record_copy_base() Fail");
4791                 __ctsvc_group_relation_destroy((contacts_record_h)out_data, true);
4792                 return ret;
4793                 /* LCOV_EXCL_STOP */
4794         }
4795
4796         *out_record = (contacts_record_h)out_data;
4797         return CONTACTS_ERROR_NONE;
4798 }
4799
4800 static int __ctsvc_messenger_clone(contacts_record_h record, contacts_record_h *out_record)
4801 {
4802         ctsvc_messenger_s *out_data = NULL;
4803         ctsvc_messenger_s *src_data = NULL;
4804
4805         src_data = (ctsvc_messenger_s*)record;
4806         out_data = calloc(1, sizeof(ctsvc_messenger_s));
4807         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4808
4809         out_data->id = src_data->id;
4810         out_data->contact_id = src_data->contact_id;
4811         out_data->type = src_data->type;
4812         out_data->label = SAFE_STRDUP(src_data->label);
4813         out_data->im_id = SAFE_STRDUP(src_data->im_id);
4814
4815         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4816         if (CONTACTS_ERROR_NONE != ret) {
4817                 /* LCOV_EXCL_START */
4818                 ERR("ctsvc_record_copy_base() Fail");
4819                 __ctsvc_messenger_destroy((contacts_record_h)out_data, true);
4820                 return ret;
4821                 /* LCOV_EXCL_STOP */
4822         }
4823
4824         *out_record = (contacts_record_h)out_data;
4825         return CONTACTS_ERROR_NONE;
4826 }
4827
4828 static int __ctsvc_name_clone(contacts_record_h record, contacts_record_h *out_record)
4829 {
4830         ctsvc_name_s *out_data = NULL;
4831         ctsvc_name_s *src_data = NULL;
4832
4833         src_data = (ctsvc_name_s*)record;
4834
4835         out_data = calloc(1, sizeof(ctsvc_name_s));
4836         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4837
4838         out_data->is_default = src_data->is_default;
4839         out_data->id = src_data->id;
4840         out_data->contact_id = src_data->contact_id;
4841         out_data->language_type = src_data->language_type;
4842         out_data->first = SAFE_STRDUP(src_data->first);
4843         out_data->last = SAFE_STRDUP(src_data->last);
4844         out_data->addition = SAFE_STRDUP(src_data->addition);
4845         out_data->prefix = SAFE_STRDUP(src_data->prefix);
4846         out_data->suffix = SAFE_STRDUP(src_data->suffix);
4847         out_data->phonetic_first = SAFE_STRDUP(src_data->phonetic_first);
4848         out_data->phonetic_middle = SAFE_STRDUP(src_data->phonetic_middle);
4849         out_data->phonetic_last = SAFE_STRDUP(src_data->phonetic_last);
4850         out_data->lookup = SAFE_STRDUP(src_data->lookup);
4851         out_data->reverse_lookup = SAFE_STRDUP(src_data->reverse_lookup);
4852
4853         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4854         if (CONTACTS_ERROR_NONE != ret) {
4855                 /* LCOV_EXCL_START */
4856                 ERR("ctsvc_record_copy_base() Fail");
4857                 __ctsvc_name_destroy((contacts_record_h)out_data, true);
4858                 return ret;
4859                 /* LCOV_EXCL_STOP */
4860         }
4861
4862         *out_record = (contacts_record_h)out_data;
4863         return CONTACTS_ERROR_NONE;
4864 }
4865
4866 static int __ctsvc_nickname_clone(contacts_record_h record, contacts_record_h *out_record)
4867 {
4868         ctsvc_nickname_s *out_data = NULL;
4869         ctsvc_nickname_s *src_data = NULL;
4870
4871         src_data = (ctsvc_nickname_s*)record;
4872         out_data = calloc(1, sizeof(ctsvc_nickname_s));
4873         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4874
4875         out_data->id = src_data->id;
4876         out_data->contact_id = src_data->contact_id;
4877         out_data->type = src_data->type;
4878         out_data->label = SAFE_STRDUP(src_data->label);
4879         out_data->nickname = SAFE_STRDUP(src_data->nickname);
4880
4881         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4882         if (CONTACTS_ERROR_NONE != ret) {
4883                 /* LCOV_EXCL_START */
4884                 ERR("ctsvc_record_copy_base() Fail");
4885                 __ctsvc_nickname_destroy((contacts_record_h)out_data, true);
4886                 return ret;
4887                 /* LCOV_EXCL_STOP */
4888         }
4889
4890         *out_record = (contacts_record_h)out_data;
4891         return CONTACTS_ERROR_NONE;
4892 }
4893
4894 static int __ctsvc_note_clone(contacts_record_h record, contacts_record_h *out_record)
4895 {
4896         ctsvc_note_s *out_data = NULL;
4897         ctsvc_note_s *src_data = NULL;
4898
4899         src_data = (ctsvc_note_s*)record;
4900         out_data = calloc(1, sizeof(ctsvc_note_s));
4901         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4902
4903         out_data->id = src_data->id;
4904         out_data->contact_id = src_data->contact_id;
4905         out_data->note = SAFE_STRDUP(src_data->note);
4906
4907         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4908         if (CONTACTS_ERROR_NONE != ret) {
4909                 /* LCOV_EXCL_START */
4910                 ERR("ctsvc_record_copy_base() Fail");
4911                 __ctsvc_note_destroy((contacts_record_h)out_data, true);
4912                 return ret;
4913                 /* LCOV_EXCL_STOP */
4914         }
4915
4916         *out_record = (contacts_record_h)out_data;
4917         return CONTACTS_ERROR_NONE;
4918 }
4919
4920 static int __ctsvc_number_clone(contacts_record_h record, contacts_record_h *out_record)
4921 {
4922         ctsvc_number_s *out_data = NULL;
4923         ctsvc_number_s *src_data = NULL;
4924
4925         src_data = (ctsvc_number_s*)record;
4926         out_data = calloc(1, sizeof(ctsvc_number_s));
4927         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4928
4929         out_data->is_default = src_data->is_default;
4930         out_data->id = src_data->id;
4931         out_data->contact_id = src_data->contact_id;
4932         out_data->type = src_data->type;
4933         out_data->label = SAFE_STRDUP(src_data->label);
4934         out_data->number = SAFE_STRDUP(src_data->number);
4935         out_data->lookup = SAFE_STRDUP(src_data->lookup);
4936
4937         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4938         if (CONTACTS_ERROR_NONE != ret) {
4939                 /* LCOV_EXCL_START */
4940                 ERR("ctsvc_record_copy_base() Fail");
4941                 __ctsvc_number_destroy((contacts_record_h)out_data, true);
4942                 return ret;
4943                 /* LCOV_EXCL_STOP */
4944         }
4945
4946         *out_record = (contacts_record_h)out_data;
4947         return CONTACTS_ERROR_NONE;
4948 }
4949
4950 static int __ctsvc_profile_clone(contacts_record_h record, contacts_record_h *out_record)
4951 {
4952         ctsvc_profile_s *out_data = NULL;
4953         ctsvc_profile_s *src_data = NULL;
4954
4955         src_data = (ctsvc_profile_s*)record;
4956         out_data = calloc(1, sizeof(ctsvc_profile_s));
4957         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4958
4959         out_data->id = src_data->id;
4960         out_data->contact_id = src_data->contact_id;
4961         out_data->order = src_data->order;
4962         out_data->uid = SAFE_STRDUP(src_data->uid);
4963         out_data->text = SAFE_STRDUP(src_data->text);
4964         out_data->service_operation = SAFE_STRDUP(src_data->service_operation);
4965         out_data->mime = SAFE_STRDUP(src_data->mime);
4966         out_data->app_id = SAFE_STRDUP(src_data->app_id);
4967         out_data->uri = SAFE_STRDUP(src_data->uri);
4968         out_data->category = SAFE_STRDUP(src_data->category);
4969         out_data->extra_data = SAFE_STRDUP(src_data->extra_data);
4970
4971         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
4972         if (CONTACTS_ERROR_NONE != ret) {
4973                 /* LCOV_EXCL_START */
4974                 ERR("ctsvc_record_copy_base() Fail");
4975                 __ctsvc_profile_destroy((contacts_record_h)out_data, true);
4976                 return ret;
4977                 /* LCOV_EXCL_STOP */
4978         }
4979
4980         *out_record = (contacts_record_h)out_data;
4981
4982         return CONTACTS_ERROR_NONE;
4983 }
4984
4985 static int __ctsvc_relationship_clone(contacts_record_h record, contacts_record_h *out_record)
4986 {
4987         ctsvc_relationship_s *out_data = NULL;
4988         ctsvc_relationship_s *src_data = NULL;
4989
4990         src_data = (ctsvc_relationship_s*)record;
4991         out_data = calloc(1, sizeof(ctsvc_relationship_s));
4992         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
4993
4994         out_data->id = src_data->id;
4995         out_data->contact_id = src_data->contact_id;
4996         out_data->type = src_data->type;
4997         out_data->label = SAFE_STRDUP(src_data->label);
4998         out_data->name = SAFE_STRDUP(src_data->name);
4999
5000         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
5001         if (CONTACTS_ERROR_NONE != ret) {
5002                 /* LCOV_EXCL_START */
5003                 ERR("ctsvc_record_copy_base() Fail");
5004                 __ctsvc_relationship_destroy((contacts_record_h)out_data, true);
5005                 return ret;
5006                 /* LCOV_EXCL_STOP */
5007         }
5008
5009         *out_record = (contacts_record_h)out_data;
5010         return CONTACTS_ERROR_NONE;
5011 }
5012
5013 static int __ctsvc_image_clone(contacts_record_h record, contacts_record_h *out_record)
5014 {
5015         ctsvc_image_s *out_data = NULL;
5016         ctsvc_image_s *src_data = NULL;
5017
5018         src_data = (ctsvc_image_s*)record;
5019         out_data = calloc(1, sizeof(ctsvc_image_s));
5020         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
5021
5022         out_data->is_default = src_data->is_default;
5023         out_data->id = src_data->id;
5024         out_data->contact_id = src_data->contact_id;
5025         out_data->type = src_data->type;
5026         out_data->is_vcard = src_data->is_vcard;
5027         out_data->label = SAFE_STRDUP(src_data->label);
5028         if (src_data->path && src_data->is_vcard)
5029                 __ctsvc_temp_image_hash_table_insert(src_data->path);
5030         out_data->path = SAFE_STRDUP(src_data->path);
5031
5032         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
5033         if (CONTACTS_ERROR_NONE != ret) {
5034                 /* LCOV_EXCL_START */
5035                 ERR("ctsvc_record_copy_base() Fail");
5036                 __ctsvc_image_destroy((contacts_record_h)out_data, true);
5037                 return ret;
5038                 /* LCOV_EXCL_STOP */
5039         }
5040
5041         *out_record = (contacts_record_h)out_data;
5042         return CONTACTS_ERROR_NONE;
5043 }
5044
5045 static int __ctsvc_simple_contact_clone(contacts_record_h record, contacts_record_h *out_record)
5046 {
5047         ctsvc_simple_contact_s *out_data = NULL;
5048         ctsvc_simple_contact_s *src_data = NULL;
5049
5050         src_data = (ctsvc_simple_contact_s*)record;
5051         out_data = calloc(1, sizeof(ctsvc_simple_contact_s));
5052         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
5053
5054         out_data->contact_id = src_data->contact_id;
5055         out_data->person_id = src_data->person_id;
5056         out_data->addressbook_id = src_data->addressbook_id;
5057         out_data->changed_time = src_data->changed_time;
5058         out_data->display_source_type = src_data->display_source_type;
5059         out_data->has_phonenumber = src_data->has_phonenumber;
5060         out_data->has_email = src_data->has_email;
5061         out_data->is_favorite = src_data->is_favorite;
5062
5063         out_data->display_name = SAFE_STRDUP(src_data->display_name);
5064         out_data->uid = SAFE_STRDUP(src_data->uid);
5065         out_data->ringtone_path = SAFE_STRDUP(src_data->ringtone_path);
5066         out_data->vibration = SAFE_STRDUP(src_data->vibration);
5067         out_data->message_alert = SAFE_STRDUP(src_data->message_alert);
5068         out_data->image_thumbnail_path = SAFE_STRDUP(src_data->image_thumbnail_path);
5069
5070         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
5071         if (CONTACTS_ERROR_NONE != ret) {
5072                 /* LCOV_EXCL_START */
5073                 ERR("ctsvc_record_copy_base() Fail");
5074                 __ctsvc_simple_contact_destroy((contacts_record_h)out_data, true);
5075                 return ret;
5076                 /* LCOV_EXCL_STOP */
5077         }
5078
5079         *out_record = (contacts_record_h)out_data;
5080         return CONTACTS_ERROR_NONE;
5081 }
5082
5083 static int __ctsvc_url_clone(contacts_record_h record, contacts_record_h *out_record)
5084 {
5085         ctsvc_url_s *out_data = NULL;
5086         ctsvc_url_s *src_data = NULL;
5087
5088         src_data = (ctsvc_url_s*)record;
5089         out_data = calloc(1, sizeof(ctsvc_url_s));
5090         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY, "calloc() Fail");
5091
5092         out_data->id = src_data->id;
5093         out_data->contact_id = src_data->contact_id;
5094         out_data->type = src_data->type;
5095         out_data->label = SAFE_STRDUP(src_data->label);
5096         out_data->url = SAFE_STRDUP(src_data->url);
5097
5098         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
5099         if (CONTACTS_ERROR_NONE != ret) {
5100                 /* LCOV_EXCL_START */
5101                 ERR("ctsvc_record_copy_base() Fail");
5102                 __ctsvc_url_destroy((contacts_record_h)out_data, true);
5103                 return ret;
5104                 /* LCOV_EXCL_STOP */
5105         }
5106
5107         *out_record = (contacts_record_h)out_data;
5108         return CONTACTS_ERROR_NONE;
5109 }
5110
5111 static int __ctsvc_sip_clone(contacts_record_h record, contacts_record_h *out_record)
5112 {
5113         ctsvc_sip_s *out_data = NULL;
5114         ctsvc_sip_s *src_data = NULL;
5115
5116         src_data = (ctsvc_sip_s*)record;
5117         out_data = calloc(1, sizeof(ctsvc_sip_s));
5118         RETVM_IF(NULL == out_data, CONTACTS_ERROR_OUT_OF_MEMORY,
5119                         "Out of memeory : calloc(ctsvc_sip_s) Fail(%d)", CONTACTS_ERROR_OUT_OF_MEMORY);
5120
5121         out_data->id = src_data->id;
5122         out_data->contact_id = src_data->contact_id;
5123         out_data->address = SAFE_STRDUP(src_data->address);
5124         out_data->type = src_data->type;
5125         out_data->label = SAFE_STRDUP(src_data->label);
5126
5127         int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
5128         if (CONTACTS_ERROR_NONE != ret) {
5129                 /* LCOV_EXCL_START */
5130                 ERR("ctsvc_record_copy_base() Fail");
5131                 __ctsvc_sip_destroy((contacts_record_h)out_data, true);
5132                 return ret;
5133                 /* LCOV_EXCL_STOP */
5134         }
5135
5136         *out_record = (contacts_record_h)out_data;
5137         return CONTACTS_ERROR_NONE;
5138 }