a25935e3cee298dec7a9ce8656f0c3e366d6e4aa
[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_UID,
84
85         FIELD_DATA_PERSON_ID,
86         FIELD_DATA_CONTACT_ID,
87         FIELD_DATA_DATATYPE_ID,
88         FIELD_DATA1,
89         FIELD_DATA2,
90         FIELD_DATA3,
91         FIELD_DATA4,
92         FIELD_DATA5,
93         FIELD_DATA6,
94         FIELD_DATA7,
95         FIELD_DATA8,
96         FIELD_DATA9,
97         FIELD_DATA10,
98         FIELD_DATA11,
99         FIELD_PRESENCE_CONTACT_ID,
100         FIELD_PRESENCE_STATE,
101         FIELD_PRESENCE_MESSAGE,
102         FIELD_PRESENCE_ICON_URI,
103         FIELD_PRESENCE_CAPABILITY,
104         FIELD_MAX
105 }data_field_e;
106
107 static char* field_key[FIELD_MAX] =
108 {
109         "person.person_id", //0
110         "person.is_self",
111         "person.contact_id_for_name",
112         "person.contact_id_for_photo",
113         "person.contactid_for_ringtone",
114         "person.prefix",
115         "person.first_name",
116         "person.middle_name",
117         "person.last_name",
118         "person.phonetic_name",
119         "person.display_name", //10
120         "person.photo_URI",
121         "person.last_updated_timestamp",
122         "person.is_favorite",
123         "person.send_to_voicemail",
124         "person.ringtone",
125         "contacts.person_id",
126         "contacts.contact_id",
127         "contacts.addrbook_id",
128         "contacts.changed_time",
129         "contacts.is_favorite",
130         "contacts.image_thumbnail_path",
131         "contacts.ringtone_path",
132         "contacts.uid",
133         "data.person_id",
134         "data.contact_id",
135         "data.datatype",
136         "data.data1",
137         "data.data2",
138         "data.data3",
139         "data.data4",
140         "data.data5",
141         "data.data6",
142         "data.data7",
143         "data.data8",
144         "data.data9",
145         "data.data10",
146         "data.data11",
147         "presence.contact_id",
148         "presence.state",
149         "presence.message",
150         "presence.icon_uri",
151         "presence.capability"
152 };
153
154 static char* condition_field_key[FIELD_MAX] =
155 {
156         "person_id", //0
157         "is_self",
158         "contact_id_for_name",
159         "contact_id_for_photo",
160         "contactid_for_ringtone",
161         "prefix",
162         "first_name",
163         "middle_name",
164         "last_name",
165         "phonetic_name",
166         "display_name", //10
167         "photo_URI",
168         "last_updated_timestamp",
169         "is_favorite",
170         "send_to_voicemail",
171         "ringtone",
172         "person_id",
173         "contact_id",
174         "addrbook_id",
175         "changed_time",
176         "is_favorite",
177         "image_thumbnail_path",
178         "ringtone_path",
179         "uid",
180         "person_id",
181         "contact_id",
182         "datatype",
183         "data1",
184         "data2",
185         "data3",
186         "data4",
187         "data5",
188         "data6",
189         "data7",
190         "data8",
191         "data9",
192         "data10",
193         "data11",
194         "contact_id",
195         "state",
196         "message",
197         "icon_uri",
198         "capability"
199 };
200
201 typedef enum
202 {
203         FIELD_GROUP_INVALID = -1,
204         FIELD_GROUP_ID,
205         FIELD_GROUP_NAME,
206         FIELD_GROUP_RINGTONE,
207         FIELD_GROUP_MAX,
208 }group_key;
209
210 static char* group_field_key[FIELD_GROUP_MAX] =
211 {
212         "group_id", //0
213         "group_name",
214         "ringtone_path"
215 };
216
217 typedef enum
218 {
219         FIELD_GROUP_RELATION_INVALID = -1,
220         FIELD_GROUP_RELATION_GROUP_ID,
221         FIELD_GROUP_RELATION_CONTACT_ID,
222         FIELD_GROUP_RELATION_MAX,
223 }group_relation_key;
224
225 static char* relation_field_key[FIELD_GROUP_RELATION_MAX] =
226 {
227         "group_id", //0
228         "contact_id"
229 };
230
231 typedef enum
232 {
233         FIELD_X_INVALID = -1,
234         FIELD_X_DATA1,
235         FIELD_X_DATA2,
236         FIELD_X_DATA3,
237         FIELD_X_DATA4,
238         FIELD_X_DATA5,
239         FIELD_X_DATA6,
240         FIELD_X_DATA7,
241         FIELD_X_DATA8,
242         FIELD_X_DATA9,
243         FIELD_X_DATA10,
244         FIELD_X_MAX,
245 }x_field_e;
246
247 static char* x_field_key[FIELD_X_MAX] =
248 {
249         "data.data1", //0
250         "data.data2",
251         "data.data3",
252         "data.data4",
253         "data.data5",
254         "data.data6",
255         "data.data7",
256         "data.data8",
257         "data.data9",
258         "data.data10"
259 };
260
261 static char* condition_x_field_key[FIELD_X_MAX] =
262 {
263         "data1", //0
264         "data2",
265         "data3",
266         "data4",
267         "data5",
268         "data6",
269         "data7",
270         "data8",
271         "data9",
272         "data10"
273 };
274
275 static char* alias_key[27] =
276 {
277         " ",
278         "a",
279         "b",
280         "c",
281         "d",
282         "e",
283         "f",
284         "g",
285         "h",
286         "i",
287         "j",
288         "k",
289         "l",
290         "m",
291         "n",
292         "o",
293         "p",
294         "q",
295         "r",
296         "s",
297         "t",
298         "u",
299         "v",
300         "w",
301         "x",
302         "y",
303         "z"
304 };
305
306 static char* condition_key[CONDITION_MAX] =
307 {
308         "=",
309         "!=",
310         ">",
311         "<",
312         ">=",
313         "<=",
314         "&",
315         "|",
316         "like"
317 };
318
319 static char* table_key[TABLE_MAX] =
320 {
321         "person",
322         "contacts",
323         "data",
324         "presence",
325         "groups",
326         "group_relations"
327 };
328
329 static char* condition_type_key[CONDITION_TYPE_MAX] =
330 {
331         "(",
332         ")",
333         "AND",
334         "OR"
335 };
336
337 clock_t _get_clock();
338
339 void _print_time(clock_t begin, clock_t finish, const char* function_name);
340
341 query_error _contact_db_init();
342
343 query_error _contact_db_finish();
344
345 query_error _trans_begin(void);
346
347 query_error _trans_end(int is_success);
348
349 query_error _contact_exec_query(char* query);
350
351 int _contact_query_step(stmt pStmt);
352
353 void _ct_query_finalize(stmt pStmt);
354
355 int _ct_query_column_int(stmt pStmt, int pos);
356
357 char* _ct_query_column_text(stmt pStmt, int pos);
358
359 int _contact_query_bind_int(stmt pStmt, int pos, int num);
360
361 int _contact_query_bind_double(stmt pStmt, int pos, double num);
362
363 int _contact_query_bind_text(stmt pStmt, int pos, char* str);
364
365 void _contact_query_stmt_reset(stmt stmt);
366
367 double _contact_query_column_double(stmt pStmt, int pos);
368
369 stmt _contact_query_prepare(char *query);
370
371 int _convert_person_attribute_to_mimetype_id(contact_attribute_e attribute);
372
373 predefine_datatype _convert_attribute_to_mimetype_id(contact_attribute_e attribute);
374
375 char* _convert_person_attribute_to_column_name(contact_attribute_e attribute);
376
377 char* _convert_person_attribute_to_condition_column_name(contact_attribute_e attribute);
378
379 char* _convert_attribute_to_condition_normalize_column(contact_attribute_e attribute);
380
381 char* _convert_attribute_to_normalize_column(contact_attribute_e attribute);
382
383 char* _convert_attribute_to_condition_column_name(contact_attribute_e attribute);
384
385 primitive_type _convert_check_attribute_primitive_type(contact_attribute_e attribute);
386
387 char* _convert_x_attribute_to_condition_column_name(contact_x_attribute_e attribute);
388
389 char* _convert_attribute_to_column_name(contact_attribute_e attribute);
390
391 char* _convert_x_attribute_to_column_name(contact_x_attribute_e attribute);
392
393 tables_e _contact_table_name_to_table_type(char* table_name);
394
395 char* _convert_person_attribute_to_table_name(contact_attribute_e attribute);
396
397 char* _convert_attribute_to_table_name(contact_attribute_e attribute);
398
399 char* _convert_x_attribute_to_table_name(contact_x_attribute_e attribute);
400
401 char* _convert_condition_type_to_string(condition_type_e type);
402
403 void _query_get_count(const char* table_name, query_type_e query_type, int* count);
404
405 void __free_datatype_list(gpointer data, gpointer user_data);
406
407 void _free_handle_info(advanced_handle_t* handle);
408
409 int _free_for_limit_iter(advanced_handle_t* handle);
410
411 void _free_name_info(name_t* name_info);
412
413 void _free_num_info(number_t* num_info);
414
415 void _free_email_info(email_t* email_info);
416
417 void _free_url_info(url_t* url_info);
418
419 void _free_nick_info(nick_name_t* nick_info);
420
421 void _free_anniversary_info(event_info_t* event_info);
422
423 void _free_organization_info(organization_t* organization_info);
424
425 void _free_address_info(address_t* address_info);
426
427 void _free_x_info(x_info_t* x_info);
428
429 void _free_projection_list(gpointer data, gpointer user_data);
430
431 db_datatype _convert_datatype_to_db_type(predefine_datatype datatype);
432
433 query_error _set_datatype_list(advanced_handle_t* q_handle, contact_attribute_e attribute);
434
435 query_error _set_datatype_list_by_x_attribute(advanced_handle_t* q_handle, int datatype_id, contact_x_attribute_e attribute);
436
437 char* _convert_condition_to_string(condition_e condition);
438
439 query_error _normalize_str(const char* src, char* dest, int dest_size);
440
441 query_error _remove_invalid_chars(char *src, char* desc);
442
443 int _convert_type_string_to_int(contact_attribute_e attribute, const char* value);
444
445 int _is_type_bitwise_int(contact_attribute_e attribute);
446
447 #ifdef __cplusplus
448 }
449 #endif /* __cplusplus */
450
451 #endif // __QUERY_UTILITY_H__
452