fb8432b7f69f5167f153a74b81728730c4961673
[profile/ivi/wrt-plugins-tizen.git] / src / platform / Tizen / Contact / query-svc / query-utility.h
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /**
18  * @file                query-utility.h
19  * @author      JihwaPark (82-32-3016262, jh7979.park@samsung.com)
20  * @version      1.0(2010.10.05)
21  * @brief       This file is internal header file for own module
22  */
23
24 #ifndef __QUERY_UTILITY_H__
25 #define __QUERY_UTILITY_H__
26
27 #include "query-service.h"
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif /* __cplusplus */
32
33 sqlite3 *g_hDBCt;
34
35 #define QUERY_DB_PATH "/opt/dbspace/.contacts-svc.db"
36
37 typedef enum
38 {
39         INTEGER = 0,
40         STRING,
41         REAL
42 }primitive_type;
43
44 typedef enum
45 {
46         TABLE_INVALID = -1,
47         TABLE_PERSON,
48         TABLE_CONTACT,
49         TABLE_DATA,
50         TABLE_PRESENCE,
51         TABLE_GROUP,
52         TABLE_GROUP_RELATION,
53         TABLE_MAX,
54 }table_name_e;
55
56 typedef enum
57 {
58         FIELD_INVALID = -1,
59         FIELD_PERSON_CONTACT_ID,
60         FIELD_PERSON_IS_SELF,
61         FIELD_CONTACT_ID_FOR_NAME,
62         FIELD_CONTACT_ID_FOR_PHOTO,
63         FIELD_CONTACT_ID_FOR_RINGTONE,
64         FIELD_PERSON_PREFIX_NAME,
65         FIELD_PERSON_FIRST_NAME,
66         FIELD_PERSON_MIDDLE_NAME,
67         FIELD_PERSON_LAST_NAME,
68         FIELD_PERSON_PHONETIC_NAME,
69         FIELD_PERSON_DISPLAY_NAME = 10,
70         FIELD_PERSON_PHOTO_URI,
71         FIELD_PERSON_LAST_UPDATED_TIME,
72         FIELD_PERSON_IS_FAVORITE,
73         FIELD_PERSON_SEND_TO_VOICEMAIL,
74         FIELD_PERSON_RINGTONE,
75
76         FIELD_CONTACT_PERSON_ID,
77         FIELD_CONTACT_CONTACT_ID,
78         FIELD_CONTACT_ACCOUNT_ID,
79         FIELD_CHANGED_TIME,
80         FIELD_IS_FAVORITE,
81         FIELD_PHOTO_URI,
82         FIELD_RINGTONE,
83         FIELD_NOTE,
84         FIELD_UID,
85
86         FIELD_DATA_PERSON_ID,
87         FIELD_DATA_CONTACT_ID,
88         FIELD_DATA_DATATYPE_ID,
89         FIELD_DATA1,
90         FIELD_DATA2,
91         FIELD_DATA3,
92         FIELD_DATA4,
93         FIELD_DATA5,
94         FIELD_DATA6,
95         FIELD_DATA7,
96         FIELD_DATA8,
97         FIELD_DATA9,
98         FIELD_DATA10,
99         FIELD_DATA11,
100         FIELD_PRESENCE_CONTACT_ID,
101         FIELD_PRESENCE_STATE,
102         FIELD_PRESENCE_MESSAGE,
103         FIELD_PRESENCE_ICON_URI,
104         FIELD_PRESENCE_CAPABILITY,
105         FIELD_MAX
106 }data_field_e;
107
108 static char* field_key[FIELD_MAX] =
109 {
110         "person.person_id", //0
111         "person.is_self",
112         "person.contact_id_for_name",
113         "person.contact_id_for_photo",
114         "person.contactid_for_ringtone",
115         "person.prefix",
116         "person.first_name",
117         "person.middle_name",
118         "person.last_name",
119         "person.phonetic_name",
120         "person.display_name", //10
121         "person.photo_URI",
122         "person.last_updated_timestamp",
123         "person.is_favorite",
124         "person.send_to_voicemail",
125         "person.ringtone",
126         "contacts.person_id",
127         "contacts.contact_id",
128         "contacts.addrbook_id",
129         "contacts.changed_time",
130         "contacts.is_favorite",
131         "contacts.image0",
132         "contacts.ringtone",
133         "contacts.note",
134         "contacts.uid",
135         "data.person_id",
136         "data.contact_id",
137         "data.datatype",
138         "data.data1",
139         "data.data2",
140         "data.data3",
141         "data.data4",
142         "data.data5",
143         "data.data6",
144         "data.data7",
145         "data.data8",
146         "data.data9",
147         "data.data10",
148         "data.data11",
149         "presence.contact_id",
150         "presence.state",
151         "presence.message",
152         "presence.icon_uri",
153         "presence.capability"
154 };
155
156 static char* condition_field_key[FIELD_MAX] =
157 {
158         "person_id", //0
159         "is_self",
160         "contact_id_for_name",
161         "contact_id_for_photo",
162         "contactid_for_ringtone",
163         "prefix",
164         "first_name",
165         "middle_name",
166         "last_name",
167         "phonetic_name",
168         "display_name", //10
169         "photo_URI",
170         "last_updated_timestamp",
171         "is_favorite",
172         "send_to_voicemail",
173         "ringtone",
174         "person_id",
175         "contact_id",
176         "addrbook_id",
177         "changed_time",
178         "is_favorite",
179         "image0",
180         "ringtone",
181         "note",
182         "uid",
183         "person_id",
184         "contact_id",
185         "datatype",
186         "data1",
187         "data2",
188         "data3",
189         "data4",
190         "data5",
191         "data6",
192         "data7",
193         "data8",
194         "data9",
195         "data10",
196         "data11",
197         "contact_id",
198         "state",
199         "message",
200         "icon_uri",
201         "capability"
202 };
203
204 typedef enum
205 {
206         FIELD_GROUP_INVALID = -1,
207         FIELD_GROUP_ID,
208         FIELD_GROUP_NAME,
209         FIELD_GROUP_RINGTONE,
210         FIELD_GROUP_MAX,
211 }group_key;
212
213 static char* group_field_key[FIELD_GROUP_MAX] =
214 {
215         "group_id", //0
216         "group_name",
217         "ringtone"
218 };
219
220 typedef enum
221 {
222         FIELD_GROUP_RELATION_INVALID = -1,
223         FIELD_GROUP_RELATION_GROUP_ID,
224         FIELD_GROUP_RELATION_CONTACT_ID,
225         FIELD_GROUP_RELATION_MAX,
226 }group_relation_key;
227
228 static char* relation_field_key[FIELD_GROUP_RELATION_MAX] =
229 {
230         "group_id", //0
231         "contact_id"
232 };
233
234 typedef enum
235 {
236         FIELD_X_INVALID = -1,
237         FIELD_X_DATA1,
238         FIELD_X_DATA2,
239         FIELD_X_DATA3,
240         FIELD_X_DATA4,
241         FIELD_X_DATA5,
242         FIELD_X_DATA6,
243         FIELD_X_DATA7,
244         FIELD_X_DATA8,
245         FIELD_X_DATA9,
246         FIELD_X_DATA10,
247         FIELD_X_MAX,
248 }x_field_e;
249
250 static char* x_field_key[FIELD_X_MAX] =
251 {
252         "data.data1", //0
253         "data.data2",
254         "data.data3",
255         "data.data4",
256         "data.data5",
257         "data.data6",
258         "data.data7",
259         "data.data8",
260         "data.data9",
261         "data.data10"
262 };
263
264 static char* condition_x_field_key[FIELD_X_MAX] =
265 {
266         "data1", //0
267         "data2",
268         "data3",
269         "data4",
270         "data5",
271         "data6",
272         "data7",
273         "data8",
274         "data9",
275         "data10"
276 };
277
278 static char* alias_key[27] =
279 {
280         " ",
281         "a",
282         "b",
283         "c",
284         "d",
285         "e",
286         "f",
287         "g",
288         "h",
289         "i",
290         "j",
291         "k",
292         "l",
293         "m",
294         "n",
295         "o",
296         "p",
297         "q",
298         "r",
299         "s",
300         "t",
301         "u",
302         "v",
303         "w",
304         "x",
305         "y",
306         "z"
307 };
308
309 static char* condition_key[CONDITION_MAX] =
310 {
311         "=",
312         "!=",
313         ">",
314         "<",
315         ">=",
316         "<=",
317         "&",
318         "|",
319         "like"
320 };
321
322 static char* table_key[TABLE_MAX] =
323 {
324         "person",
325         "contacts",
326         "data",
327         "presence",
328         "groups",
329         "group_relations"
330 };
331
332 static char* condition_type_key[CONDITION_TYPE_MAX] =
333 {
334         "(",
335         ")",
336         "AND",
337         "OR"
338 };
339
340 clock_t _get_clock();
341
342 void _print_time(clock_t begin, clock_t finish, const char* function_name);
343
344 query_error _contact_db_init();
345
346 query_error _contact_db_finish();
347
348 query_error _trans_begin(void);
349
350 query_error _trans_end(int is_success);
351
352 query_error _contact_exec_query(char* query);
353
354 int _contact_query_step(stmt pStmt);
355
356 void _ct_query_finalize(stmt pStmt);
357
358 int _ct_query_column_int(stmt pStmt, int pos);
359
360 char* _ct_query_column_text(stmt pStmt, int pos);
361
362 int _contact_query_bind_int(stmt pStmt, int pos, int num);
363
364 int _contact_query_bind_double(stmt pStmt, int pos, double num);
365
366 int _contact_query_bind_text(stmt pStmt, int pos, char* str);
367
368 void _contact_query_stmt_reset(stmt stmt);
369
370 double _contact_query_column_double(stmt pStmt, int pos);
371
372 stmt _contact_query_prepare(char *query);
373
374 int _convert_person_attribute_to_mimetype_id(contact_attribute_e attribute);
375
376 predefine_datatype _convert_attribute_to_mimetype_id(contact_attribute_e attribute);
377
378 char* _convert_person_attribute_to_column_name(contact_attribute_e attribute);
379
380 char* _convert_person_attribute_to_condition_column_name(contact_attribute_e attribute);
381
382 char* _convert_attribute_to_condition_normalize_column(contact_attribute_e attribute);
383
384 char* _convert_attribute_to_normalize_column(contact_attribute_e attribute);
385
386 char* _convert_attribute_to_condition_column_name(contact_attribute_e attribute);
387
388 primitive_type _convert_check_attribute_primitive_type(contact_attribute_e attribute);
389
390 char* _convert_x_attribute_to_condition_column_name(contact_x_attribute_e attribute);
391
392 char* _convert_attribute_to_column_name(contact_attribute_e attribute);
393
394 char* _convert_x_attribute_to_column_name(contact_x_attribute_e attribute);
395
396 tables_e _contact_table_name_to_table_type(char* table_name);
397
398 char* _convert_person_attribute_to_table_name(contact_attribute_e attribute);
399
400 char* _convert_attribute_to_table_name(contact_attribute_e attribute);
401
402 char* _convert_x_attribute_to_table_name(contact_x_attribute_e attribute);
403
404 char* _convert_condition_type_to_string(condition_type_e type);
405
406 void _query_get_count(const char* table_name, query_type_e query_type, int* count);
407
408 void __free_datatype_list(gpointer data, gpointer user_data);
409
410 void _free_handle_info(advanced_handle_t* handle);
411
412 int _free_for_limit_iter(advanced_handle_t* handle);
413
414 void _free_name_info(name_t* name_info);
415
416 void _free_num_info(number_t* num_info);
417
418 void _free_email_info(email_t* email_info);
419
420 void _free_url_info(url_t* url_info);
421
422 void _free_nick_info(nick_name_t* nick_info);
423
424 void _free_anniversary_info(event_info_t* event_info);
425
426 void _free_organization_info(organization_t* organization_info);
427
428 void _free_address_info(address_t* address_info);
429
430 void _free_x_info(x_info_t* x_info);
431
432 void _free_projection_list(gpointer data, gpointer user_data);
433
434 db_datatype _convert_datatype_to_db_type(predefine_datatype datatype);
435
436 query_error _set_datatype_list(advanced_handle_t* q_handle, contact_attribute_e attribute);
437
438 query_error _set_datatype_list_by_x_attribute(advanced_handle_t* q_handle, int datatype_id, contact_x_attribute_e attribute);
439
440 char* _convert_condition_to_string(condition_e condition);
441
442 query_error _normalize_str(const char* src, char* dest, int dest_size);
443
444 query_error _remove_invalid_chars(char *src, char* desc);
445
446 int _convert_type_string_to_int(contact_attribute_e attribute, const char* value);
447
448 int _is_type_bitwise_int(contact_attribute_e attribute);
449
450 #ifdef __cplusplus
451 }
452 #endif /* __cplusplus */
453
454 #endif // __QUERY_UTILITY_H__
455