return ret;
}
+API int contacts_db_search_records_for_snippet(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret;
+ contacts_h contact = NULL;
+
+ ret = ctsvc_client_handle_get_p(&contact);
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+ ret = ctsvc_client_db_search_records_for_snippet(contact, view_uri, keyword,
+ offset, limit, start_match, end_match, token_number, out_list);
+
+ return ret;
+}
+
+API int contacts_db_search_records_with_range_for_snippet(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret;
+ contacts_h contact = NULL;
+
+ ret = ctsvc_client_handle_get_p(&contact);
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+ ret = ctsvc_client_db_search_records_with_range_for_snippet(contact, view_uri,
+ keyword, offset, limit, range, start_match, end_match, token_number, out_list);
+
+ return ret;
+}
+
+API int contacts_db_search_records_with_query_for_snippet(contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret;
+ contacts_h contact = NULL;
+
+ ret = ctsvc_client_handle_get_p(&contact);
+ RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+ ret = ctsvc_client_db_search_records_with_query_for_snippet(contact, query, keyword,
+ offset, limit, start_match, end_match, token_number, out_list);
+
+ return ret;
+}
+
API int contacts_db_get_last_change_version(int *last_version)
{
int ret;
#include "ctsvc_handle.h"
#include "ctsvc_client_db_helper.h"
+#define CTSVC_DEFAULT_START_MATCH "["
+#define CTSVC_DEFAULT_END_MATCH "]"
+
int ctsvc_client_db_insert_record(contacts_h contact, contacts_record_h record, int *id)
{
int ret = CONTACTS_ERROR_NONE;
return ret;
}
+int ctsvc_client_db_search_records_for_snippet(contacts_h contact,
+ const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+
+ /* make indata */
+ indata = pims_ipc_data_create(0);
+ if (indata == NULL) {
+ ERR("pims_ipc_data_create() Fail");
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
+ }
+
+ ret = ctsvc_ipc_marshal_handle(contact, indata);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(view_uri, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(keyword, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(offset, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(limit, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(start_match ? start_match : CTSVC_DEFAULT_START_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(end_match ? end_match : CTSVC_DEFAULT_END_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(token_number, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
+ /* ipc call */
+ if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_FOR_SNIPPET,
+ indata, &outdata) != 0) {
+ ERR("ctsvc_ipc_call() Fail");
+ pims_ipc_data_destroy(indata);
+ return CONTACTS_ERROR_IPC;
+ }
+
+ pims_ipc_data_destroy(indata);
+
+ if (outdata) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+ ERR("ctsvc_ipc_unmarshal_list() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+ }
+
+ pims_ipc_data_destroy(outdata);
+ }
+
+ return ret;
+}
+
+int ctsvc_client_db_search_records_with_range_for_snippet(contacts_h contact,
+ const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(0 == range, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+
+ indata = pims_ipc_data_create(0);
+ if (indata == NULL) {
+ ERR("pims_ipc_data_create() Fail");
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
+ }
+ ret = ctsvc_ipc_marshal_handle(contact, indata);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
+ ret = ctsvc_ipc_marshal_string(view_uri, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(keyword, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(offset, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(limit, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(range, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(start_match ? start_match : CTSVC_DEFAULT_START_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(end_match ? end_match : CTSVC_DEFAULT_END_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(token_number, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
+ if (0 != ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE_FOR_SNIPPET,
+ indata, &outdata)) {
+ ERR("ctsvc_ipc_call() Fail");
+ pims_ipc_data_destroy(indata);
+ return CONTACTS_ERROR_IPC;
+ }
+
+ pims_ipc_data_destroy(indata);
+
+ if (outdata) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+ if (CONTACTS_ERROR_NONE == ret) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+ ERR("ctsvc_ipc_unmarshal_list() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+ }
+ pims_ipc_data_destroy(outdata);
+ }
+
+ return ret;
+}
+
+int ctsvc_client_db_search_records_with_query_for_snippet(contacts_h contact,
+ contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ pims_ipc_data_h indata = NULL;
+ pims_ipc_data_h outdata = NULL;
+
+ RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+
+ /* make indata */
+ indata = pims_ipc_data_create(0);
+ if (indata == NULL) {
+ ERR("pims_ipc_data_create() Fail");
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
+ }
+
+ ret = ctsvc_ipc_marshal_handle(contact, indata);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_query(query, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_query() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(keyword, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(offset, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(limit, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(start_match ? start_match : CTSVC_DEFAULT_START_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_string(end_match ? end_match : CTSVC_DEFAULT_END_MATCH, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_string() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+ ret = ctsvc_ipc_marshal_int(token_number, indata);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+ pims_ipc_data_destroy(indata);
+ return ret;
+ }
+
+ /* ipc call */
+ if (ctsvc_ipc_call(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY_FOR_SNIPPET,
+ indata, &outdata) != 0) {
+ ERR("ctsvc_ipc_call() Fail");
+ pims_ipc_data_destroy(indata);
+ return CONTACTS_ERROR_IPC;
+ }
+
+ pims_ipc_data_destroy(indata);
+
+ if (outdata) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+
+ if (CONTACTS_ERROR_NONE == ret) {
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_list(outdata, out_list)) {
+ ERR("ctsvc_ipc_unmarshal_list() Fail");
+ pims_ipc_data_destroy(outdata);
+ return CONTACTS_ERROR_IPC;
+ }
+ }
+
+ pims_ipc_data_destroy(outdata);
+ }
+
+ return ret;
+}
+
int ctsvc_client_db_search_records(contacts_h contact, const char *view_uri, const char *keyword,
int offset, int limit, contacts_list_h *out_list)
{
int ctsvc_client_db_search_records(contacts_h contact, const char *view_uri, const char *keyword, int offset, int limit, contacts_list_h *out_list);
int ctsvc_client_db_search_records_with_range(contacts_h contact, const char *view_uri, const char *keyword, int offset, int limit, int range, contacts_list_h *out_list);
int ctsvc_client_db_search_records_with_query(contacts_h contact, contacts_query_h query, const char *keyword, int offset, int limit, contacts_list_h *out_list);
+int ctsvc_client_db_search_records_for_snippet(contacts_h contact,
+ const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
+int ctsvc_client_db_search_records_with_range_for_snippet(contacts_h contact,
+ const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
+int ctsvc_client_db_search_records_with_query_for_snippet(contacts_h contact,
+ contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
int ctsvc_client_db_get_last_change_version(contacts_h contact, int *last_version);
int ctsvc_client_db_get_status(contacts_h contact, contacts_db_status_e *status);
int ctsvc_client_db_add_status_changed_cb(contacts_h contact, contacts_db_status_changed_cb cb, void *user_data);
int ctsvc_client_phone_log_reset_statistics_by_sim(contacts_h contact, int sim_slot_no);
int ctsvc_client_phone_log_delete(contacts_h contact, contacts_phone_log_delete_e op, va_list args);
-
#endif /* __CTSVC_CLIENT_PHONELOG_HELPER_H__ */
+
property_info_s *p = (property_info_s*)&(properties[i]);
if (property_id == p->property_id) {
if (property_type == QUERY_PROJECTION) {
- if (p->property_type == CTSVC_SEARCH_PROPERTY_ALL || p->property_type == CTSVC_SEARCH_PROPERTY_PROJECTION)
+ if (p->property_type == CTSVC_SEARCH_PROPERTY_ALL ||
+ p->property_type == CTSVC_SEARCH_PROPERTY_PROJECTION)
return true;
else
return false;
query_s = (ctsvc_query_s*)query;
for (i = 0; i < count; i++) {
- find = __ctsvc_query_property_check(query_s->properties, query_s->property_count, QUERY_PROJECTION, property_ids[i]);
+ find = __ctsvc_query_property_check(query_s->properties, query_s->property_count,
+ QUERY_PROJECTION, property_ids[i]);
RETVM_IF(false == find, CONTACTS_ERROR_INVALID_PARAMETER,
"property_id(%d) is not supported on view_uri(%s)", property_ids[i], query_s->view_uri);
}
free(person->image_thumbnail_path);
free(person->status);
free(person->addressbook_ids);
+ free(person->snippet_string);
free(person);
return CONTACTS_ERROR_NONE;
out_data->vibration = SAFE_STRDUP(src_data->vibration);
out_data->message_alert = SAFE_STRDUP(src_data->message_alert);
out_data->status = SAFE_STRDUP(src_data->status);
+ out_data->snippet_type = src_data->snippet_type;
+ out_data->snippet_string = SAFE_STRDUP(src_data->snippet_string);
int ret = ctsvc_record_copy_base(&(out_data->base), &(src_data->base));
if (CONTACTS_ERROR_NONE != ret) {
case CTSVC_PROPERTY_PERSON_LINK_COUNT:
*out = person->link_count;
break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_TYPE:
+ *out = person->snippet_type;
+ break;
default:
ERR("This field(%d) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
case CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS:
*out_str = GET_STR(copy, person->addressbook_ids);
break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_STRING:
+ *out_str = GET_STR(copy, person->snippet_string);
+ break;
default:
ERR("This field(%d) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
CHECK_DIRTY_VAL(person->link_count, value, is_dirty);
person->link_count = value;
break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_TYPE:
+ CHECK_DIRTY_VAL(person->snippet_type, value, is_dirty);
+ person->snippet_type = value;
+ break;
default:
ERR("This field(0x%0x) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
CHECK_DIRTY_STR(person->message_alert, str, is_dirty);
FREEandSTRDUP(person->message_alert, str);
break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_STRING:
+ CHECK_DIRTY_STR(person->snippet_string, str, is_dirty);
+ FREEandSTRDUP(person->snippet_string, str);
+ break;
default:
ERR("This field(%d) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
} while (0)
enum {
- CTSVC_DATA_NAME = 1,
- CTSVC_DATA_POSTAL = 2,
- CTSVC_DATA_MESSENGER = 3,
- CTSVC_DATA_URL = 4,
- CTSVC_DATA_EVENT = 5,
- CTSVC_DATA_COMPANY = 6,
- CTSVC_DATA_NICKNAME = 7,
- CTSVC_DATA_NUMBER = 8,
- CTSVC_DATA_EMAIL = 9,
- CTSVC_DATA_PROFILE = 10,
- CTSVC_DATA_RELATIONSHIP = 11,
- CTSVC_DATA_NOTE = 12,
- CTSVC_DATA_IMAGE = 13,
- CTSVC_DATA_SIP = 14,
- CTSVC_DATA_EXTENSION = 100
-};
-
-enum {
CTSVC_PERMISSION_CONTACT_NONE = 0x0,
CTSVC_PERMISSION_CONTACT_READ = 0x1,
CTSVC_PERMISSION_CONTACT_WRITE = 0x2,
char *status;
int link_count;
char *addressbook_ids;
+ int snippet_type;
+ char *snippet_string;
} ctsvc_person_s;
typedef struct {
.addressbook_ids = CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,
.has_phonenumber = CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER,
.has_email = CTSVC_PROPERTY_PERSON_HAS_EMAIL,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_contact_property_ids _contacts_contact = {
.image = CTSVC_PROPERTY_CONTACT_IMAGE,
.group_relation = CTSVC_PROPERTY_CONTACT_GROUP_RELATION,
.extension = CTSVC_PROPERTY_CONTACT_EXTENSION,
- .sip = CTSVC_PROPERTY_CONTACT_SIP,
+ .sip = CTSVC_PROPERTY_CONTACT_SIP
};
API const _contacts_my_profile_property_ids _contacts_my_profile = {
.relationship = CTSVC_PROPERTY_MY_PROFILE_RELATIONSHIP,
.image = CTSVC_PROPERTY_MY_PROFILE_IMAGE,
.extension = CTSVC_PROPERTY_MY_PROFILE_EXTENSION,
- .sip = CTSVC_PROPERTY_MY_PROFILE_SIP,
+ .sip = CTSVC_PROPERTY_MY_PROFILE_SIP
};
API const _contacts_simple_contact_property_ids _contacts_simple_contact = {
.has_email = CTSVC_PROPERTY_CONTACT_HAS_EMAIL,
.uid = CTSVC_PROPERTY_CONTACT_UID,
.vibration = CTSVC_PROPERTY_CONTACT_VIBRATION,
- .message_alert = CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT,
- .changed_time = CTSVC_PROPERTY_CONTACT_CHANGED_TIME,
+ .message_alert = CTSVC_PROPERTY_CONTACT_MESSAGE_ALERT,
+ .changed_time = CTSVC_PROPERTY_CONTACT_CHANGED_TIME
};
API const _contacts_name_property_ids _contacts_name = {
.contact_id = CTSVC_PROPERTY_CONTACT_ID,
.address_book_id = CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,
.address_book_name = CTSVC_PROPERTY_ADDRESSBOOK_NAME,
- .address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE
+ .address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_person_number_property_ids _contacts_person_number = {
.number = CTSVC_PROPERTY_NUMBER_NUMBER,
.number_filter = CTSVC_PROPERTY_NUMBER_NUMBER_FILTER,
.normalized_number = CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER,
- .cleaned_number = CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER
+ .cleaned_number = CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_person_email_property_ids _contacts_person_email = {
.type = CTSVC_PROPERTY_EMAIL_TYPE,
.label = CTSVC_PROPERTY_EMAIL_LABEL,
.is_primary_default = CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT,
- .email = CTSVC_PROPERTY_EMAIL_EMAIL
+ .email = CTSVC_PROPERTY_EMAIL_EMAIL,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_person_usage_property_ids _contacts_person_usage = {
.group_id = CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,
.address_book_name = CTSVC_PROPERTY_ADDRESSBOOK_NAME,
.address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE,
- .contact_id = CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID
+ .contact_id = CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_person_group_not_assigned_property_ids _contacts_person_group_not_assigned = {
.linked_address_book_ids = CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS,
.contact_id = CTSVC_PROPERTY_CONTACT_ID,
.address_book_id = CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,
- .address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE
+ .address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
API const _contacts_person_group_assigned_property_ids _contacts_person_group_assigned = {
.address_book_id = CTSVC_PROPERTY_CONTACT_ADDRESSBOOK_ID,
.group_id = CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID,
.address_book_mode = CTSVC_PROPERTY_ADDRESSBOOK_MODE,
- .contact_id = CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID
+ .contact_id = CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID,
+ .snippet_type = CTSVC_PROPERTY_PERSON_SNIPPET_TYPE,
+ .snippet_string = CTSVC_PROPERTY_PERSON_SNIPPET_STRING
};
#ifdef ENABLE_LOG_FEATURE
{CTSVC_PROPERTY_PERSON_ADDRESSBOOK_IDS, CTSVC_SEARCH_PROPERTY_PROJECTION, "addressbook_ids"},
{CTSVC_PROPERTY_PERSON_HAS_PHONENUMBER, CTSVC_SEARCH_PROPERTY_ALL, "has_phonenumber"},
{CTSVC_PROPERTY_PERSON_HAS_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "has_email"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_simple_contact[] = {
/* addressbook */
{CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
{CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_person_number[] = { /* _contacts_person_number */
{CTSVC_PROPERTY_NUMBER_NUMBER_FILTER, CTSVC_SEARCH_PROPERTY_FILTER, "minmatch"},
{CTSVC_PROPERTY_NUMBER_NORMALIZED_NUMBER, CTSVC_SEARCH_PROPERTY_FILTER, "normalized_number"},
{CTSVC_PROPERTY_NUMBER_CLEANED_NUMBER, CTSVC_SEARCH_PROPERTY_FILTER, "cleaned_number"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_person_email[] = { /* _contacts_person_email */
{CTSVC_PROPERTY_EMAIL_LABEL, CTSVC_SEARCH_PROPERTY_PROJECTION, "label"},
{CTSVC_PROPERTY_DATA_IS_PRIMARY_DEFAULT, CTSVC_SEARCH_PROPERTY_ALL, "is_primary_default"},
{CTSVC_PROPERTY_EMAIL_EMAIL, CTSVC_SEARCH_PROPERTY_ALL, "email"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_person_grouprel[] = { /* _contacts_person_grouprel */
/* addressbook */
{CTSVC_PROPERTY_ADDRESSBOOK_NAME, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_name"},
{CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_person_group_assigned[] = { /* _contacts_person_group_assigned */
{CTSVC_PROPERTY_GROUP_RELATION_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "contact_id"},
/* addressbook */
{CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_person_group_not_assigned[] = { /* _contacts_person_group_not_assigned */
{CTSVC_PROPERTY_CONTACT_ID, CTSVC_SEARCH_PROPERTY_PROJECTION, "contact_id"},
/* addressbook */
{CTSVC_PROPERTY_ADDRESSBOOK_MODE, CTSVC_SEARCH_PROPERTY_ALL, "addressbook_mode"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
#ifdef ENABLE_LOG_FEATURE
/* group relation */
{CTSVC_PROPERTY_GROUP_RELATION_GROUP_ID, CTSVC_SEARCH_PROPERTY_ALL, "group_id"},
{CTSVC_PROPERTY_GROUP_RELATION_GROUP_NAME, CTSVC_SEARCH_PROPERTY_PROJECTION, "group_name"},
+ {CTSVC_PROPERTY_PERSON_SNIPPET_TYPE, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data type */
+ {CTSVC_PROPERTY_PERSON_SNIPPET_STRING, CTSVC_SEARCH_PROPERTY_ALL, NULL}, /* data string */
};
const property_info_s __property_contact_activity[] = { /* _contacts_contact_activity */
CTSVC_PROPERTY_PERSON_DISPLAY_NAME_INDEX = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +12,
CTSVC_PROPERTY_PERSON_STATUS = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +13,
CTSVC_PROPERTY_PERSON_MESSAGE_ALERT = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR) +14,
+ CTSVC_PROPERTY_PERSON_SNIPPET_TYPE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +15,
+ CTSVC_PROPERTY_PERSON_SNIPPET_STRING = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_STR | CTSVC_READ_ONLY_PROPERTY) +16,
/* person-stat */
CTSVC_PROPERTY_PERSON_USAGE_TYPE = (CTSVC_PROPERTY_PERSON | CTSVC_VIEW_DATA_TYPE_INT) +100,
#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS "search_records"
#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE "search_records_with_range"
#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY "search_records_with_query"
+#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_FOR_SNIPPET "search_records_for_snippet"
+#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE_FOR_SNIPPET "search_records_with_range_for_snippet"
+#define CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY_FOR_SNIPPET "search_records_with_query_for_snippet"
#define CTSVC_IPC_SERVER_DB_GET_STATUS "get_db_status"
#define CTSVC_IPC_SERVER_DB_STATUS_CHANGED "db_status_changed"
length = *(int*)tmp;
if (length == -1) {
- DBG("string is null");
ret = CONTACTS_ERROR_NONE;
*ppbufchar = NULL;
return ret;
break;
if (ctsvc_ipc_unmarshal_string(ipc_data, &person_p->addressbook_ids) != CONTACTS_ERROR_NONE)
break;
+ if (ctsvc_ipc_unmarshal_int(ipc_data, &person_p->snippet_type) != CONTACTS_ERROR_NONE)
+ break;
+ if (ctsvc_ipc_unmarshal_string(ipc_data, &person_p->snippet_string) != CONTACTS_ERROR_NONE)
+ break;
return CONTACTS_ERROR_NONE;
} while (0);
break;
if (ctsvc_ipc_marshal_string((person_p->addressbook_ids), ipc_data) != CONTACTS_ERROR_NONE)
break;
+ if (ctsvc_ipc_marshal_int((person_p->snippet_type), ipc_data) != CONTACTS_ERROR_NONE)
+ break;
+ if (ctsvc_ipc_marshal_string((person_p->snippet_string), ipc_data) != CONTACTS_ERROR_NONE)
+ break;
return CONTACTS_ERROR_NONE;
} while (0);
int contacts_db_search_records_with_range(const char *view_uri, const char *keyword, int offset, int limit, int range, contacts_list_h *record_list);
/**
+ * @brief Finds records based on a given keyword for snippet.
+ *
+ * @since_tizen 3.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/contact.read
+ *
+ * @remarks You must release @a record_list using contacts_list_destroy(). \n
+ * This API works only for @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_contact, \n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_grouprel, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_assigned \n
+ * and @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_not_assigned
+ *
+ * @param[in] view_uri The view URI to get records
+ * @param[in] keyword The keyword
+ * @param[in] offset The index from which to get results
+ * @param[in] limit The number to limit results(value 0 used for get all records)
+ * @param[in] start_match The text which is inserted into the fragment before the keyword(If NULL, default is "[")
+ * @param[in] end_match The text which is inserted into the fragment after the keyword(If NULL, default is "]")
+ * @param[in] token_number The one side extra number of tokens near keyword(If negative value, full sentence is printed. e.g. if token number is 3 with 'abc' keyword, "my name is [abc]de and my home")
+ * @param[out] record_list The record list
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #CONTACTS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CONTACTS_ERROR_PERMISSION_DENIED Permission denied. This application does not have the privilege to call this method.
+ * @retval #CONTACTS_ERROR_NOT_SUPPORTED Not supported
+ * @retval #CONTACTS_ERROR_DB Database operation failure
+ * @retval #CONTACTS_ERROR_IPC IPC error
+ *
+ * @pre contacts_connect() should be called to open a connection to the contacts service.
+ *
+ * @see contacts_connect()
+ * @see contacts_list_destroy()
+ */
+int contacts_db_search_records_for_snippet(const char *view_uri, const char *keyword, int offset, int limit, const char *start_match, const char *end_match, int token_number, contacts_list_h *record_list);
+
+/**
+ * @brief Finds records based on given query and keyword for snippet.
+ *
+ * @since_tizen 3.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/contact.read
+ *
+ * @remarks You must release @a record_list using contacts_list_destroy(). \n
+ * This API works only for @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_contact, \n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_grouprel, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_assigned \n
+ * and @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_not_assigned
+ *
+ * @param[in] query The query handle to filter
+ * @param[in] keyword The keyword
+ * @param[in] offset The index from which to get results
+ * @param[in] limit The number to limit results(value 0 used for get all records)
+ * @param[in] start_match The text which is inserted into the fragment before the keyword(If NULL, default is "[")
+ * @param[in] end_match The text which is inserted into the fragment after the keyword(If NULL, default is "]")
+ * @param[in] token_number The one side extra number of tokens near keyword(If negative value, full sentence is printed. e.g. if token number is 3 with 'abc' keyword, "my name is [abc]de and my home")
+ * @param[out] record_list The record list
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #CONTACTS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CONTACTS_ERROR_FILE_NO_SPACE FS Full
+ * @retval #CONTACTS_ERROR_PERMISSION_DENIED Permission denied. This application does not have the privilege to call this method.
+ * @retval #CONTACTS_ERROR_NOT_SUPPORTED Not supported
+ * @retval #CONTACTS_ERROR_DB Database operation failure
+ * @retval #CONTACTS_ERROR_IPC IPC error
+ *
+ * @pre contacts_connect() should be called to open a connection to the contacts service.
+ *
+ * @see contacts_connect()
+ * @see contacts_list_destroy()
+ */
+
+int contacts_db_search_records_with_query_for_snippet(contacts_query_h query, const char *keyword, int offset, int limit, const char *start_match, const char *end_match, int token_number, contacts_list_h *record_list);
+
+/**
+ * @brief Finds records based on a keyword and range for snippet.
+ *
+ * @since_tizen 3.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/contact.read
+ *
+ * @remarks You must release @a record_list using contacts_list_destroy(). \n
+ * This API works only for @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_contact, \n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_grouprel, @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_assigned, \n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_group_not_assigned. These views can search records with range @ref CONTACTS_SEARCH_RANGE_NAME, @ref CONTACTS_SEARCH_RANGE_NUMBER, @ref CONTACTS_SEARCH_RANGE_DATA. \n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_number can search records with @ref CONTACTS_SEARCH_RANGE_NAME and @ref CONTACTS_SEARCH_RANGE_NUMBER.\n
+ * @ref CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_person_email can search records with @ref CONTACTS_SEARCH_RANGE_NAME and @ref CONTACTS_SEARCH_RANGE_EMAIL. \n
+ *
+ * @param[in] view_uri The view URI
+ * @param[in] keyword The keyword
+ * @param[in] offset The index from which to get results
+ * @param[in] limit The number to limit results(value 0 is used for get all records)
+ * @param[in] range The search range
+ * @param[in] start_match The text which is inserted into the fragment before the keyword(If NULL, default is "[")
+ * @param[in] end_match The text which is inserted into the fragment after the keyword(If NULL, default is "]")
+ * @param[in] token_number The one side extra number of tokens near keyword(If negative value, full sentence is printed. e.g. if token number is 3 with 'abc' keyword, "my name is [abc]de and my home")
+ * @param[out] record_list The record list
+ *
+ * @return @c 0 on success,
+ * otherwise a negative error value
+ *
+ * @retval #CONTACTS_ERROR_NONE Successful
+ * @retval #CONTACTS_ERROR_OUT_OF_MEMORY Out of memory
+ * @retval #CONTACTS_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CONTACTS_ERROR_PERMISSION_DENIED Permission denied. This application does not have the privilege to call this method.
+ * @retval #CONTACTS_ERROR_NOT_SUPPORTED Not supported
+ * @retval #CONTACTS_ERROR_DB Database operation failure
+ * @retval #CONTACTS_ERROR_IPC IPC error
+ *
+ * @pre contacts_connect() should be called to open a connection to the contacts service.
+ *
+ * @see contacts_connect()
+ * @see contacts_list_destroy()
+ */
+int contacts_db_search_records_with_range_for_snippet(const char *view_uri, const char *keyword, int offset, int limit, int range, const char *start_match, const char *end_match, int token_number, contacts_list_h *record_list);
+
+/**
* @brief Gets the number of records in a specific view.
*
* @since_tizen @if MOBILE 2.3 @elseif WEARABLE 3.0 @endif
*/
/**
+ * @brief Enumeration for contacts data type.
+ *
+ * @since_tizen 3.0
+ *
+ */
+typedef enum {
+ CONTACTS_DATA_TYPE_NAME = 1,
+ CONTACTS_DATA_TYPE_POSTAL = 2,
+ CONTACTS_DATA_TYPE_MESSENGER = 3,
+ CONTACTS_DATA_TYPE_URL = 4,
+ CONTACTS_DATA_TYPE_EVENT = 5,
+ CONTACTS_DATA_TYPE_COMPANY = 6,
+ CONTACTS_DATA_TYPE_NICKNAME = 7,
+ CONTACTS_DATA_TYPE_NUMBER = 8,
+ CONTACTS_DATA_TYPE_EMAIL = 9,
+ CONTACTS_DATA_TYPE_PROFILE = 10,
+ CONTACTS_DATA_TYPE_RELATIONSHIP = 11,
+ CONTACTS_DATA_TYPE_NOTE = 12,
+ CONTACTS_DATA_TYPE_IMAGE = 13,
+ CONTACTS_DATA_TYPE_SIP = 14,
+ CONTACTS_DATA_TYPE_EXTENSION = 100
+} contacts_data_type_e;
+
+/**
* @brief Enumeration for contacts number type.
*
* @details The number can be made with a set of values by specifying one or more values.
* <tr><td>string</td><td> addressbook_ids </td><td>read only</td><td> Addressbook IDs that the person belongs to (projection) </td></tr>
* <tr><td>boolean</td><td> has_phonenumber </td><td>read only</td><td> The person has phone number or not </td></tr>
* <tr><td>boolean</td><td> has_email </td><td>read only</td><td> The person has email or not </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_VIEW()
_CONTACTS_PROPERTY_BOOL(has_phonenumber) /* read only */
_CONTACTS_PROPERTY_BOOL(has_email) /* read only */
_CONTACTS_PROPERTY_STR(message_alert) /* read, write */
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_VIEW(_contacts_person)
/**
* <tr><td>integer</td><td> group_id </td><td>read, write once</td><td> DB record ID of the group </td></tr>
* <tr><td>integer</td><td> contact_id </td><td>read, write once</td><td> DB record ID of the contact </td></tr>
* <tr><td>string</td><td> name </td><td>read only</td><td> Group name </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_VIEW()
_CONTACTS_PROPERTY_INT(group_id) /* read, write once */
_CONTACTS_PROPERTY_INT(contact_id) /* read, write once */
_CONTACTS_PROPERTY_STR(name) /* read only */
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_VIEW(_contacts_group_relation)
/**
* <tr><td>integer</td><td> address_book_id </td><td> Addressbook ID that the person belongs to </td></tr>
* <tr><td>integer</td><td> address_book_mode </td><td> Addressbook mode, refer to the @ref contacts_address_book_mode_e </td></tr>
* <tr><td>string</td><td> address_book_name </td><td> Addressbook name that the person belongs to </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_STR(address_book_name)
_CONTACTS_PROPERTY_INT(address_book_mode)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_contact)
/**
* <tr><td>string</td><td> number_filter </td><td> If you add filter with this property, the string will be normalized as minmatch length internally and the match rule will be applied CONTACTS_MATCH_EXACTLY </td></tr>
* <tr><td>string</td><td> normalized_number </td><td> You can only use this property for search filter</td></tr>
* <tr><td>string</td><td> cleaned_number </td><td>You can only use this property for search filter </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_PROPERTY_FILTER_STR(normalized_number)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
_CONTACTS_PROPERTY_FILTER_STR(cleaned_number)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_number)
/**
* <tr><td>string</td><td> label </td><td> Custom mail type label, when the email type is #CONTACTS_EMAIL_TYPE_CUSTOM (projection) </td></tr>
* <tr><td>boolean</td><td> is_primary_default </td><td> The email is default email or not </td></tr>
* <tr><td>string</td><td> email </td><td> Email address</td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_BOOL(is_primary_default)
_CONTACTS_PROPERTY_STR(email)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_email)
/**
* <tr><td>string</td><td> address_book_name </td><td> Addressbook name that the person belongs to </td></tr>
* <tr><td>integer</td><td> group_id </td><td> Group ID that the person belongs to </td></tr>
* <tr><td>integer</td><td> contact_id </td><td> Contact ID that the person belongs to (projection) </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_INT(address_book_mode)
_CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_grouprel)
/**
* <tr><td>integer</td><td> address_book_id </td><td> Addressbook ID that the person belongs to </td></tr>
* <tr><td>integer</td><td> address_book_mode </td><td> Addressbook mode, refer to the @ref contacts_address_book_mode_e </td></tr>
* <tr><td>integer</td><td> group_id </td><td> Group ID that the person belongs to </td></tr>
- * <tr><td>integer</td><td> contact_id </td><td> Contact ID that the person belongs to (projection) </td></tr>
+ * <tr><td>integer<dtd><td> contact_id </td><td> Contact ID that the person belongs to (projection) </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_INT(address_book_mode)
_CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_group_assigned)
/**
* <tr><td>integer</td><td> address_book_id </td><td> Addressbook ID that the person belongs to </td></tr>
* <tr><td>integer</td><td> address_book_mode </td><td> Addressbook mode, refer to the @ref contacts_address_book_mode_e </td></tr>
* <tr><td>integer</td><td> contact_id </td><td> Contact ID that the person belongs to (projection) </td></tr>
+ * <tr><td>integer</td><td> snippet_type </td><td>read only</td><td> kerword matched data type, refer to they @ref contacts_data_type_e (Since 3.0) </td></tr>
+ * <tr><td>string</td><td> snippet_string </td><td>read only</td><td> keyword matched data string (Since 3.0) </td></tr>
* </table>
*/
_CONTACTS_BEGIN_READ_ONLY_VIEW()
_CONTACTS_PROPERTY_INT(address_book_mode)
_CONTACTS_PROPERTY_PROJECTION_INT(contact_id)
_CONTACTS_PROPERTY_PROJECTION_STR(message_alert)
+ _CONTACTS_PROPERTY_INT(snippet_type) /* read only (Since 3.0) */
+ _CONTACTS_PROPERTY_STR(snippet_string) /* read only (Since 3.0) */
_CONTACTS_END_READ_ONLY_VIEW(_contacts_person_group_not_assigned)
/**
Name: contacts-service
Summary: Contacts Service
-Version: 0.13.50
+Version: 0.13.51
Release: 0
Group: Social & Content/Service
License: Apache-2.0
ctsvc_server_bg.c
ctsvc_server.c
ctsvc_server_sim.c
+ ctsvc_utils_string.c
)
IF(ENABLE_LOG_FEATURE)
return;
}
+void ctsvc_ipc_server_db_search_records_for_snippet(pims_ipc_h ipc,
+ pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ char *view_uri = NULL;
+ char *keyword = NULL;
+ int offset = 0;
+ int limit = 0;
+ contacts_list_h list = NULL;
+ contacts_h contact = NULL;
+ char *start_match = NULL;
+ char *end_match = NULL;
+ int token_number = 0;
+
+ if (indata) {
+ ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &view_uri);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &keyword);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &offset);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &limit);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &start_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &end_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &token_number);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ } else {
+ ERR("ctsvc_ipc_server_db_insert_record() Fail");
+ goto ERROR_RETURN;
+ }
+
+ if (!ctsvc_have_permission(ipc, ctsvc_required_read_permission(view_uri))) {
+ ret = CONTACTS_ERROR_PERMISSION_DENIED;
+ goto ERROR_RETURN;
+ }
+
+ ret = ctsvc_db_search_records_for_snippet(view_uri, keyword, offset, limit,
+ start_match, end_match, token_number, &list);
+
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+
+ if (CONTACTS_ERROR_NO_DATA == ret) {
+ DBG("no data");
+ } else if (CONTACTS_ERROR_NONE == ret) {
+ ret = ctsvc_ipc_marshal_list(list, *outdata);
+
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto DATA_FREE;
+ }
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+ goto DATA_FREE;
+
+ERROR_RETURN:
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+DATA_FREE:
+ ctsvc_handle_destroy(contact);
+ contacts_list_destroy(list, true);
+ free(view_uri);
+ free(keyword);
+ ctsvc_server_start_timeout();
+ return;
+}
+
+void ctsvc_ipc_server_db_search_records_with_range_for_snippet(pims_ipc_h ipc,
+ pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ char *view_uri = NULL;
+ char *keyword = NULL;
+ int offset = 0;
+ int limit = 0;
+ int range = 0;
+ contacts_list_h list = NULL;
+ contacts_h contact = NULL;
+ char *start_match = NULL;
+ char *end_match = NULL;
+ int token_number = 0;
+
+ if (indata) {
+ ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &view_uri);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &keyword);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &offset);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &limit);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &range);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &start_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &end_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &token_number);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ } else {
+ ERR("ctsvc_ipc_server_db_insert_record() Fail");
+ goto ERROR_RETURN;
+ }
+
+ if (!ctsvc_have_permission(ipc, ctsvc_required_read_permission(view_uri))) {
+ ret = CONTACTS_ERROR_PERMISSION_DENIED;
+ goto ERROR_RETURN;
+ }
+
+ ret = ctsvc_db_search_records_with_range_for_snippet(view_uri, keyword, offset,
+ limit, range, start_match, end_match, token_number, &list);
+
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+
+ if (CONTACTS_ERROR_NO_DATA == ret) {
+ DBG("no data");
+ } else if (CONTACTS_ERROR_NONE == ret) {
+ ret = ctsvc_ipc_marshal_list(list, *outdata);
+
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto DATA_FREE;
+ }
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+ goto DATA_FREE;
+
+ERROR_RETURN:
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+
+DATA_FREE:
+ ctsvc_handle_destroy(contact);
+ contacts_list_destroy(list, true);
+ free(view_uri);
+ free(keyword);
+ ctsvc_server_start_timeout();
+ return;
+}
+
+void ctsvc_ipc_server_db_search_records_with_query_for_snippet(pims_ipc_h ipc,
+ pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+ int ret = CONTACTS_ERROR_NONE;
+ contacts_query_h query = NULL;
+ char *keyword = NULL;
+ int offset = 0;
+ int limit = 0;
+ contacts_list_h list = NULL;
+ contacts_h contact = NULL;
+ char *start_match = NULL;
+ char *end_match = NULL;
+ int token_number = 0;
+
+ if (indata) {
+ ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("ctsvc_ipc_unmarshal_handle() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_query(indata, &query);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &keyword);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &offset);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &limit);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &start_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_string(indata, &end_match);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_record() Fail");
+ goto ERROR_RETURN;
+ }
+ ret = ctsvc_ipc_unmarshal_int(indata, &token_number);
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+ goto ERROR_RETURN;
+ }
+ } else {
+ ERR("ctsvc_ipc_server_db_insert_record() Fail");
+ goto ERROR_RETURN;
+ }
+
+ if (!ctsvc_have_permission(ipc, ctsvc_required_read_permission(((ctsvc_query_s*)query)->view_uri))) {
+ ret = CONTACTS_ERROR_PERMISSION_DENIED;
+ goto ERROR_RETURN;
+ }
+
+ ret = ctsvc_db_search_records_with_query_for_snippet(query, keyword, offset, limit,
+ start_match, end_match, token_number, &list);
+
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+
+ if (CONTACTS_ERROR_NO_DATA == ret) {
+ DBG("no data");
+ } else if (CONTACTS_ERROR_NONE == ret) {
+ ret = ctsvc_ipc_marshal_list(list, *outdata);
+
+ if (ret != CONTACTS_ERROR_NONE) {
+ ERR("ctsvc_ipc_marshal_list Fail");
+ goto DATA_FREE;
+ }
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+ goto DATA_FREE;
+
+ERROR_RETURN:
+ if (outdata) {
+ *outdata = pims_ipc_data_create(0);
+ if (NULL == *outdata) {
+ ERR("pims_ipc_data_create() Fail");
+ goto DATA_FREE;
+ }
+ if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+ pims_ipc_data_destroy(*outdata);
+ *outdata = NULL;
+ ERR("ctsvc_ipc_marshal_int() Fail");
+ goto DATA_FREE;
+ }
+ } else {
+ ERR("outdata is NULL");
+ }
+DATA_FREE:
+ ctsvc_handle_destroy(contact);
+ contacts_list_destroy(list, true);
+ contacts_query_destroy(query);
+ free(keyword);
+ ctsvc_server_start_timeout();
+ return;
+}
+
void ctsvc_ipc_server_db_search_records(pims_ipc_h ipc, pims_ipc_data_h indata,
pims_ipc_data_h *outdata, void *userdata)
{
void ctsvc_ipc_server_db_search_records(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_server_db_search_records_with_range(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_server_db_search_records_with_query(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+void ctsvc_ipc_server_db_search_records_for_snippet(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+void ctsvc_ipc_server_db_search_records_with_range_for_snippet(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+void ctsvc_ipc_server_db_search_records_with_query_for_snippet(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
void ctsvc_ipc_server_db_get_status(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
datatype = sqlite3_value_int(argv[1]);
switch (datatype) {
- case CTSVC_DATA_NAME:
+ case CONTACTS_DATA_TYPE_NAME:
ctsvc_set_name_noti();
break;
- case CTSVC_DATA_POSTAL:
+ case CONTACTS_DATA_TYPE_POSTAL:
ctsvc_set_address_noti();
break;
- case CTSVC_DATA_MESSENGER:
+ case CONTACTS_DATA_TYPE_MESSENGER:
ctsvc_set_messenger_noti();
break;
- case CTSVC_DATA_URL:
+ case CONTACTS_DATA_TYPE_URL:
ctsvc_set_url_noti();
break;
- case CTSVC_DATA_EVENT:
+ case CONTACTS_DATA_TYPE_EVENT:
ctsvc_set_event_noti();
break;
- case CTSVC_DATA_COMPANY:
+ case CONTACTS_DATA_TYPE_COMPANY:
ctsvc_set_company_noti();
break;
- case CTSVC_DATA_NICKNAME:
+ case CONTACTS_DATA_TYPE_NICKNAME:
ctsvc_set_nickname_noti();
break;
- case CTSVC_DATA_NUMBER:
+ case CONTACTS_DATA_TYPE_NUMBER:
ctsvc_set_number_noti();
break;
- case CTSVC_DATA_EMAIL:
+ case CONTACTS_DATA_TYPE_EMAIL:
ctsvc_set_email_noti();
break;
- case CTSVC_DATA_PROFILE:
+ case CONTACTS_DATA_TYPE_PROFILE:
ctsvc_set_profile_noti();
break;
- case CTSVC_DATA_RELATIONSHIP:
+ case CONTACTS_DATA_TYPE_RELATIONSHIP:
ctsvc_set_relationship_noti();
break;
- case CTSVC_DATA_NOTE:
+ case CONTACTS_DATA_TYPE_NOTE:
ctsvc_set_note_noti();
break;
- case CTSVC_DATA_IMAGE:
+ case CONTACTS_DATA_TYPE_IMAGE:
ctsvc_set_image_noti();
break;
- case CTSVC_DATA_EXTENSION:
+ case CONTACTS_DATA_TYPE_EXTENSION:
ctsvc_set_data_noti();
break;
- case CTSVC_DATA_SIP:
+ case CONTACTS_DATA_TYPE_SIP:
ctsvc_set_sip_noti();
break;
default:
* These functions will be called when requesting from client module depends on module name and function name (pims_ipc_call, ctsvc_ipc_call)
* pims_ipc_svc_register(MODULE_NAME, FUNCTION_NAME ...);
*/
- if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CONNECT, ctsvc_ipc_server_connect, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_DISCONNECT, ctsvc_ipc_server_disconnect, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_MODULE, CTSVC_IPC_SERVER_CHECK_PERMISSION, ctsvc_ipc_server_check_permission, NULL) != 0) break;
-
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORD, ctsvc_ipc_server_db_insert_record, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORD, ctsvc_ipc_server_db_get_record, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORD, ctsvc_ipc_server_db_update_record, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORD, ctsvc_ipc_server_db_delete_record, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORD, ctsvc_ipc_server_db_replace_record, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_ALL_RECORDS, ctsvc_ipc_server_db_get_all_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY, ctsvc_ipc_server_db_get_records_with_query, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT, ctsvc_ipc_server_db_get_count, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_COUNT_WITH_QUERY, ctsvc_ipc_server_db_get_count_with_query, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_INSERT_RECORDS, ctsvc_ipc_server_db_insert_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_UPDATE_RECORDS, ctsvc_ipc_server_db_update_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_DELETE_RECORDS, ctsvc_ipc_server_db_delete_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_REPLACE_RECORDS, ctsvc_ipc_server_db_replace_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_CHANGES_BY_VERSION, ctsvc_ipc_server_db_get_changes_by_version, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_CURRENT_VERSION, ctsvc_ipc_server_db_get_current_version, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS, ctsvc_ipc_server_db_search_records, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE, ctsvc_ipc_server_db_search_records_with_range, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY, ctsvc_ipc_server_db_search_records_with_query, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE, CTSVC_IPC_SERVER_DB_GET_STATUS, ctsvc_ipc_server_db_get_status, NULL) != 0) break;
-
- if (pims_ipc_svc_register(CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_CONTACT_ID, ctsvc_ipc_activity_delete_by_contact_id, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_ACTIVITY_MODULE, CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_ACCOUNT_ID, ctsvc_ipc_activity_delete_by_account_id, NULL) != 0) break;
-
- if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_ADD_CONTACT, ctsvc_ipc_group_add_contact, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT, ctsvc_ipc_group_remove_contact, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE, CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER, ctsvc_ipc_group_set_group_order, NULL) != 0) break;
-
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_LINK_PERSON, ctsvc_ipc_person_link_person, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT, ctsvc_ipc_person_unlink_contact, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_RESET_USAGE, ctsvc_ipc_person_reset_usage, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_FAVORITE_ORDER, ctsvc_ipc_person_set_favorite_order, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_SET_DEFAULT_PROPERTY, ctsvc_ipc_person_set_default_property, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_GET_DEFAULT_PROPERTY, ctsvc_ipc_person_get_default_property, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE, CTSVC_IPC_SERVER_PERSON_GET_AGGREGATION_SUGGESTIONS, ctsvc_ipc_person_get_aggregation_suggestions, NULL) != 0) break;
-
+ if (pims_ipc_svc_register(CTSVC_IPC_MODULE,
+ CTSVC_IPC_SERVER_CONNECT,
+ ctsvc_ipc_server_connect, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_MODULE,
+ CTSVC_IPC_SERVER_DISCONNECT,
+ ctsvc_ipc_server_disconnect, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_MODULE,
+ CTSVC_IPC_SERVER_CHECK_PERMISSION,
+ ctsvc_ipc_server_check_permission, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_INSERT_RECORD,
+ ctsvc_ipc_server_db_insert_record, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_RECORD,
+ ctsvc_ipc_server_db_get_record, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_UPDATE_RECORD,
+ ctsvc_ipc_server_db_update_record, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_DELETE_RECORD,
+ ctsvc_ipc_server_db_delete_record, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_REPLACE_RECORD,
+ ctsvc_ipc_server_db_replace_record, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_ALL_RECORDS,
+ ctsvc_ipc_server_db_get_all_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_RECORDS_WITH_QUERY,
+ ctsvc_ipc_server_db_get_records_with_query, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_COUNT,
+ ctsvc_ipc_server_db_get_count, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_COUNT_WITH_QUERY,
+ ctsvc_ipc_server_db_get_count_with_query, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_INSERT_RECORDS,
+ ctsvc_ipc_server_db_insert_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_UPDATE_RECORDS,
+ ctsvc_ipc_server_db_update_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_DELETE_RECORDS,
+ ctsvc_ipc_server_db_delete_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_REPLACE_RECORDS,
+ ctsvc_ipc_server_db_replace_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_CHANGES_BY_VERSION,
+ ctsvc_ipc_server_db_get_changes_by_version, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_CURRENT_VERSION,
+ ctsvc_ipc_server_db_get_current_version, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS,
+ ctsvc_ipc_server_db_search_records, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE,
+ ctsvc_ipc_server_db_search_records_with_range, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY,
+ ctsvc_ipc_server_db_search_records_with_query, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_FOR_SNIPPET,
+ ctsvc_ipc_server_db_search_records_for_snippet, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_RANGE_FOR_SNIPPET,
+ ctsvc_ipc_server_db_search_records_with_range_for_snippet, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_SEARCH_RECORDS_WITH_QUERY_FOR_SNIPPET,
+ ctsvc_ipc_server_db_search_records_with_query_for_snippet, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_DB_MODULE,
+ CTSVC_IPC_SERVER_DB_GET_STATUS,
+ ctsvc_ipc_server_db_get_status, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_ACTIVITY_MODULE,
+ CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_CONTACT_ID,
+ ctsvc_ipc_activity_delete_by_contact_id, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_ACTIVITY_MODULE,
+ CTSVC_IPC_SERVER_ACTIVITY_DELETE_BY_ACCOUNT_ID,
+ ctsvc_ipc_activity_delete_by_account_id, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE,
+ CTSVC_IPC_SERVER_GROUP_ADD_CONTACT,
+ ctsvc_ipc_group_add_contact, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE,
+ CTSVC_IPC_SERVER_GROUP_REMOVE_CONTACT,
+ ctsvc_ipc_group_remove_contact, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_GROUP_MODULE,
+ CTSVC_IPC_SERVER_GROUP_SET_GROUP_ORDER,
+ ctsvc_ipc_group_set_group_order, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_LINK_PERSON,
+ ctsvc_ipc_person_link_person, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_UNLINK_CONTACT,
+ ctsvc_ipc_person_unlink_contact, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_RESET_USAGE,
+ ctsvc_ipc_person_reset_usage, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_SET_FAVORITE_ORDER,
+ ctsvc_ipc_person_set_favorite_order, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_SET_DEFAULT_PROPERTY,
+ ctsvc_ipc_person_set_default_property, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_GET_DEFAULT_PROPERTY,
+ ctsvc_ipc_person_get_default_property, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PERSON_MODULE,
+ CTSVC_IPC_SERVER_PERSON_GET_AGGREGATION_SUGGESTIONS,
+ ctsvc_ipc_person_get_aggregation_suggestions, NULL) != 0)
+ break;
#ifdef ENABLE_LOG_FEATURE
- if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, ctsvc_ipc_phone_log_reset_statistics, NULL) != 0) break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE,
+ CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS,
+ ctsvc_ipc_phone_log_reset_statistics, NULL) != 0)
+ break;
if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS_BY_SIM, ctsvc_ipc_phone_log_reset_statistics_by_sim, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_DELETE, ctsvc_ipc_phone_log_delete, NULL) != 0) break;
-#endif /* ENABLE_LOG_FEATURE */
- if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_GET_NAME_DISPLAY_ORDER, ctsvc_ipc_setting_get_name_display_order, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_SET_NAME_DISPLAY_ORDER, ctsvc_ipc_setting_set_name_display_order, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_GET_NAME_SORTING_ORDER, ctsvc_ipc_setting_get_name_sorting_order, NULL) != 0) break;
- if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE, CTSVC_IPC_SERVER_SETTING_SET_NAME_SORTING_ORDER, ctsvc_ipc_setting_set_name_sorting_order, NULL) != 0) break;
+ if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE,
+ CTSVC_IPC_SERVER_PHONELOG_DELETE,
+ ctsvc_ipc_phone_log_delete, NULL) != 0)
+ break;
+#endif /* ENABLE_LOG_FEATURE */
+ if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE,
+ CTSVC_IPC_SERVER_SETTING_GET_NAME_DISPLAY_ORDER,
+ ctsvc_ipc_setting_get_name_display_order, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE,
+ CTSVC_IPC_SERVER_SETTING_SET_NAME_DISPLAY_ORDER,
+ ctsvc_ipc_setting_set_name_display_order, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE,
+ CTSVC_IPC_SERVER_SETTING_GET_NAME_SORTING_ORDER,
+ ctsvc_ipc_setting_get_name_sorting_order, NULL) != 0)
+ break;
+ if (pims_ipc_svc_register(CTSVC_IPC_SETTING_MODULE,
+ CTSVC_IPC_SERVER_SETTING_SET_NAME_SORTING_ORDER,
+ ctsvc_ipc_setting_set_name_sorting_order, NULL) != 0)
+ break;
snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/.%s_for_subscribe",
getuid(), CTSVC_IPC_SERVICE);
"FROM %s, %s ON data.is_primary_default=1 AND data.datatype=%d "
"AND data.contact_id = contacts.contact_id AND contacts.deleted = 0 "
"WHERE contacts.person_id = %d",
- CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CTSVC_DATA_NUMBER, id);
+ CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CONTACTS_DATA_TYPE_NUMBER, id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM %s, %s ON data.is_primary_default=1 AND data.datatype=%d "
"AND data.contact_id = contacts.contact_id AND contacts.deleted = 0 "
"WHERE contacts.person_id = %d",
- CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CTSVC_DATA_EMAIL, id);
+ CTS_TABLE_CONTACTS, CTS_TABLE_DATA, CONTACTS_DATA_TYPE_EMAIL, id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"ON data.is_primary_default=1 AND data.datatype=%d AND data.is_my_profile = 0 "
"AND data.contact_id = contacts.contact_id AND contacts.deleted = 0 "
"WHERE contacts.person_id = %d",
- CTSVC_DATA_IMAGE, id);
+ CONTACTS_DATA_TYPE_IMAGE, id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA" D, "CTS_TABLE_CONTACTS" C "
"ON D.contact_id = C.contact_id AND C.deleted = 0 "
"WHERE D.datatype=%d AND D.is_my_profile = 0 AND C.person_id=%d AND D.id=%d",
- CTSVC_DATA_IMAGE, person_id, id);
+ CONTACTS_DATA_TYPE_IMAGE, person_id, id);
ret = ctsvc_query_prepare(query, &stmt);
if (NULL == stmt) {
ERR("ctsvc_query_prepare Fail(%d)", ret);
"UPDATE "CTS_TABLE_DATA" SET is_primary_default=0 WHERE datatype=%d AND is_my_profile = 0 "
"AND contact_id IN (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
"WHERE person_id=%d AND deleted = 0) ",
- CTSVC_DATA_IMAGE, person_id);
+ CONTACTS_DATA_TYPE_IMAGE, person_id);
ret = ctsvc_query_exec(query);
if (ret < CONTACTS_ERROR_NONE) {
ERR("ctsvc_query_exec() Fail(%d)", ret);
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_DATA" SET is_default=0 WHERE datatype=%d AND is_my_profile = 0 "
"AND contact_id = (SELECT contact_id FROM "CTS_TABLE_DATA" WHERE id=%d) ",
- CTSVC_DATA_IMAGE, id);
+ CONTACTS_DATA_TYPE_IMAGE, id);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
return ret;
}
- if (datatype == CTSVC_DATA_NUMBER)
+ if (datatype == CONTACTS_DATA_TYPE_NUMBER)
source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_NUMBER;
- else if (datatype == CTSVC_DATA_EMAIL)
+ else if (datatype == CONTACTS_DATA_TYPE_EMAIL)
source_type = CONTACTS_DISPLAY_NAME_SOURCE_TYPE_EMAIL;
if (CONTACTS_DISPLAY_NAME_SOURCE_TYPE_INVALID != source_type)
"SELECT D.id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
"WHERE C.person_id=%d AND C.contact_id=D.contact_id AND C.deleted = 0 "
"AND D.datatype=%d AND D.is_primary_default = 1 AND D.data3='%s'",
- person->person_id, CTSVC_DATA_IMAGE, temp);
+ person->person_id, CONTACTS_DATA_TYPE_IMAGE, temp);
ret = ctsvc_query_get_first_int_result(query, &id);
if (ret == CONTACTS_ERROR_NONE)
image_thumbnail_path = SAFE_STRDUP(temp);
ctsvc_person_aggregate(base_person_id);
if (default_number_id)
- __ctsvc_put_person_default_data(base_person_id, default_number_id, CTSVC_DATA_NUMBER);
+ __ctsvc_put_person_default_data(base_person_id, default_number_id, CONTACTS_DATA_TYPE_NUMBER);
if (default_email_id)
- __ctsvc_put_person_default_data(base_person_id, default_email_id, CTSVC_DATA_EMAIL);
+ __ctsvc_put_person_default_data(base_person_id, default_email_id, CONTACTS_DATA_TYPE_EMAIL);
if (default_image_id)
__ctsvc_put_person_default_image(base_person_id, default_image_id);
snprintf(query, sizeof(query),
"SELECT id, is_default FROM %s "
"WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
- CTS_TABLE_DATA, contact_id, CTSVC_DATA_NUMBER);
+ CTS_TABLE_DATA, contact_id, CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_prepare(query, &stmt_number);
if (NULL == stmt_number) {
if (1 == ctsvc_stmt_step(stmt_number)) {
int default_number_id = ctsvc_stmt_get_int(stmt_number, 0);
- __ctsvc_put_person_default_data(person_id, default_number_id, CTSVC_DATA_NUMBER);
+ __ctsvc_put_person_default_data(person_id, default_number_id, CONTACTS_DATA_TYPE_NUMBER);
ctsvc_stmt_finalize(stmt_number);
break;
}
snprintf(query, sizeof(query),
"SELECT id, is_default FROM %s "
"WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
- CTS_TABLE_DATA, contact_id, CTSVC_DATA_EMAIL);
+ CTS_TABLE_DATA, contact_id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_prepare(query, &stmt_email);
if (NULL == stmt_email) {
if (1 == ctsvc_stmt_step(stmt_email)) {
int default_email_id = ctsvc_stmt_get_int(stmt_email, 0);
- __ctsvc_put_person_default_data(person_id, default_email_id, CTSVC_DATA_EMAIL);
+ __ctsvc_put_person_default_data(person_id, default_email_id, CONTACTS_DATA_TYPE_EMAIL);
ctsvc_stmt_finalize(stmt_email);
break;
}
snprintf(query, sizeof(query),
"SELECT id, is_default FROM %s "
"WHERE contact_id = %d AND datatype = %d AND is_default = 1 AND is_my_profile = 0",
- CTS_TABLE_DATA, contact_id, CTSVC_DATA_IMAGE);
+ CTS_TABLE_DATA, contact_id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_prepare(query, &stmt_image);
if (NULL == stmt_image) {
ret = __ctsvc_put_person_default_name(person_id, id); /* contact id */
break;
case CONTACTS_PERSON_PROPERTY_NUMBER:
- ret = __ctsvc_put_person_default_data(person_id, id, CTSVC_DATA_NUMBER); /* number id */
+ ret = __ctsvc_put_person_default_data(person_id, id, CONTACTS_DATA_TYPE_NUMBER); /* number id */
break;
case CONTACTS_PERSON_PROPERTY_EMAIL:
- ret = __ctsvc_put_person_default_data(person_id, id, CTSVC_DATA_EMAIL); /* email id */
+ ret = __ctsvc_put_person_default_data(person_id, id, CONTACTS_DATA_TYPE_EMAIL); /* email id */
break;
case CONTACTS_PERSON_PROPERTY_IMAGE:
ret = __ctsvc_put_person_default_image(person_id, id); /* image id */
"SELECT id FROM "CTS_TABLE_DATA" WHERE is_primary_default = 1 AND datatype = %d AND is_my_profile = 0 AND "
"contact_id in (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
"WHERE person_id = %d AND deleted = 0)",
- CTSVC_DATA_NUMBER, person_id);
+ CONTACTS_DATA_TYPE_NUMBER, person_id);
break;
case CONTACTS_PERSON_PROPERTY_EMAIL:
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE is_primary_default = 1 AND datatype = %d AND is_my_profile = 0 AND "
"contact_id in (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
"WHERE person_id = %d AND deleted = 0)",
- CTSVC_DATA_EMAIL, person_id);
+ CONTACTS_DATA_TYPE_EMAIL, person_id);
break;
case CONTACTS_PERSON_PROPERTY_IMAGE:
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE is_primary_default = 1 AND datatype = %d AND is_my_profile = 0 AND "
"contact_id in (SELECT contact_id FROM "CTS_TABLE_CONTACTS" "
"WHERE person_id = %d AND deleted = 0)",
- CTSVC_DATA_IMAGE, person_id);
+ CONTACTS_DATA_TYPE_IMAGE, person_id);
break;
default:
ret = CONTACTS_ERROR_INVALID_PARAMETER;
"ON C.contact_id=D.contact_id AND D.datatype=%d AND C.deleted = 0 "
"AND C.person_id <> %d AND D.is_my_profile = 0 "
"WHERE D.data4 = '",
- CTSVC_DATA_NUMBER, person_id);
+ CONTACTS_DATA_TYPE_NUMBER, person_id);
for (cursor = nums; cursor; cursor = cursor->next) {
char *minmatch = cursor->data;
"ON C.contact_id=D.contact_id AND D.datatype=%d AND C.deleted = 0 "
"AND C.person_id <> %d AND D.is_my_profile = 0 "
"WHERE D.data3 LIKE '",
- CTSVC_DATA_EMAIL, person_id);
+ CONTACTS_DATA_TYPE_EMAIL, person_id);
for (cursor = emails; cursor; cursor = cursor->next) {
char *local_part = cursor->data;
"ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
"AND datatype = %d AND is_my_profile = 0 AND deleted = 0 "
"WHERE data4 = ? AND _NUMBER_COMPARE_(data5, ?, NULL, NULL)",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
bind_text = g_slist_append(bind_text, strdup(minmatch));
bind_text = g_slist_append(bind_text, strdup(normal_num));
}
do {
datatype = ctsvc_stmt_get_int(stmt, 0);
switch (datatype) {
- case CTSVC_DATA_NAME:
+ case CONTACTS_DATA_TYPE_NAME:
ctsvc_get_data_info_name(stmt, (contacts_list_h)contact->name);
break;
- case CTSVC_DATA_NICKNAME:
+ case CONTACTS_DATA_TYPE_NICKNAME:
ctsvc_get_data_info_nickname(stmt, (contacts_list_h)contact->nicknames);
break;
- case CTSVC_DATA_NUMBER:
+ case CONTACTS_DATA_TYPE_NUMBER:
ctsvc_get_data_info_number(stmt, (contacts_list_h)contact->numbers);
break;
- case CTSVC_DATA_EMAIL:
+ case CONTACTS_DATA_TYPE_EMAIL:
ctsvc_get_data_info_email(stmt, (contacts_list_h)contact->emails);
break;
- case CTSVC_DATA_COMPANY:
+ case CONTACTS_DATA_TYPE_COMPANY:
ctsvc_get_data_info_company(stmt, (contacts_list_h)contact->company);
break;
default:
"ON "CTS_TABLE_CONTACTS".contact_id = "CTS_TABLE_DATA".contact_id "
"AND datatype = %d AND is_my_profile = 0 AND deleted = 0 "
"WHERE data4 = ? AND _NUMBER_COMPARE_(data5, ?, NULL, NULL)",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
bind_text = g_slist_append(bind_text, strdup(minmatch));
bind_text = g_slist_append(bind_text, strdup(normal_num));
/* update number of data table */
snprintf(query, sizeof(query),
"SELECT id, data3 FROM "CTS_TABLE_DATA" "
- "WHERE datatype = %d", CTSVC_DATA_NUMBER);
+ "WHERE datatype = %d", CONTACTS_DATA_TYPE_NUMBER);
ret = sqlite3_prepare_v2(__db, query, strlen(query), &stmt, NULL);
if (SQLITE_OK != ret) {
ERR("sqlite3_prepare_v2() Fail(%s)", sqlite3_errmsg(__db));
--- /dev/null
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define _GNU_SOURCE
+#include <string.h>
+#include <ctype.h>
+#include <unicode/ulocdata.h>
+#include <unicode/ustring.h>
+#include <unicode/unorm.h>
+#include <unicode/ucol.h>
+#include <unicode/uset.h>
+
+#include "contacts.h"
+#include "ctsvc_internal.h"
+#include "ctsvc_struct.h"
+#include "ctsvc_record.h"
+#include "ctsvc_view.h"
+#include "ctsvc_normalize.h"
+#include "ctsvc_localize.h"
+#include "ctsvc_localize_utils.h"
+#include "ctsvc_localize_ch.h"
+#include "ctsvc_localize_jp.h"
+
+#define CTSVC_COMBINING_DIACRITICAL_MARKS_START 0x0300
+#define CTSVC_COMBINING_DIACRITICAL_MARKS_END 0x036f
+#define CTSVC_SNIPPET_DEFAULT_START_MATCH "["
+#define CTSVC_SNIPPET_DEFAULT_END_MATCH "]"
+
+static inline bool __ctsvc_is_choseong(const char *src)
+{
+ unsigned short tmp;
+
+ tmp = (src[1] << 8) | src[2];
+ if (((char)0xE1 == src[0] && CTSVC_COMPARE_BETWEEN(0x8480, tmp, 0x859F)) /* korean -Hangul Jamo*/
+ || ((char)0xEA == src[0] && CTSVC_COMPARE_BETWEEN(0xA5A0, tmp, 0xA5BC))) /* korean -Hangul Jamo extended A*/
+ {
+ return true;
+ }
+ return false;
+}
+
+static inline bool __ctsvc_is_diacritical(const char *src)
+{
+ unsigned short tmp;
+
+ if (!src || !*src || !*(src+1))
+ return false;
+
+ tmp = (src[0] << 8) | src[1];
+ if (CTSVC_COMPARE_BETWEEN(0xCC80, tmp, 0xCCBF)
+ || CTSVC_COMPARE_BETWEEN(0xCD80, tmp, 0xCDAF))
+ {
+ return true;
+ }
+ return false;
+}
+
+static inline bool __ctsvc_compare_utf8(const char *str1, const char *str2, int str2_len)
+{
+ int k;
+ for (k=0; k<str2_len;k++)
+ if (!str1[k] || !str2[k] || str1[k] != str2[k])
+ return false;
+ return true;
+}
+
+static int __ctsvc_copy_and_remove_special_char(const char *src, char *dest, int dest_size)
+{
+ int s_pos=0, d_pos=0, char_type, src_size;
+
+ if (NULL == src) {
+ ERR("The parameter(src) is NULL");
+ dest[d_pos] = '\0';
+ return 0;
+ }
+ src_size = strlen(src);
+
+ while (src[s_pos] != 0) {
+ char_type = ctsvc_check_utf8(src[s_pos]);
+
+ if (0 < char_type && char_type < dest_size - d_pos && char_type <= src_size - s_pos) {
+ memcpy(dest+d_pos, src+s_pos, char_type);
+ d_pos += char_type;
+ s_pos += char_type;
+ }
+ else {
+ ERR("The parameter(src:%s) has invalid character set", src);
+ dest[d_pos] = '\0';
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+ }
+
+ dest[d_pos] = '\0';
+ return d_pos;
+}
+
+#define array_sizeof(a) (sizeof(a) / sizeof(a[0]))
+
+static int __ctsvc_normalize_str_to_unicode(const char *src, int src_size, UChar *dest, int dest_size)
+{
+ int ret;
+ int32_t size = dest_size;
+ UErrorCode status = 0;
+ UChar tmp_result[dest_size];
+
+ u_strFromUTF8(tmp_result, dest_size, &size, src, src_size, &status);
+
+ if (U_FAILURE(status)) {
+ ERR("u_strFromUTF8() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
+ }
+
+ u_strToUpper(tmp_result, dest_size, tmp_result, -1, NULL, &status);
+ if (U_FAILURE(status)) {
+ ERR("u_strToUpper() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
+ }
+
+ size = unorm_normalize(tmp_result, -1, UNORM_NFD, 0,
+ (UChar *)dest, dest_size, &status);
+ if (U_FAILURE(status)) {
+ ERR("unorm_normalize() Failed(%s)", u_errorName(status));
+ return CONTACTS_ERROR_SYSTEM;
+ }
+
+ ret = ctsvc_check_language(dest);
+ ctsvc_extra_normalize(dest, size);
+
+ dest[size] = 0x00;
+
+ return ret;
+}
+
+#define SMALL_BUFFER_SIZE 10
+
+static bool __ctsvc_compare_pinyin_letter(const char *haystack, int haystack_lang, const char *needle, int needle_lang, int *h_len, int *n_len)
+{
+ pinyin_name_s *pinyinname = NULL;
+ int size, ret = false;
+ int len, i, j, k;
+ char temp_needle[strlen(needle) + 1];
+ char temp[SMALL_BUFFER_SIZE];
+ bool match = false, initial_match = false;
+
+ if (haystack_lang != CTSVC_LANG_CHINESE || needle_lang != CTSVC_LANG_ENGLISH)
+ return false;
+
+ for(i=0, k=0; i < sizeof(temp_needle); i++)
+ {
+ if (isupper(needle[i]))
+ temp_needle[i] = tolower(needle[i]);
+ else
+ temp_needle[i] = needle[i];
+ }
+
+ for(i=0, j=0; i < strlen(haystack) && j < strlen(temp_needle) ; i+=len)
+ {
+ len = ctsvc_check_utf8(haystack[i]);
+ if (len < 0)
+ return false;
+ memcpy(temp, haystack + i, len );
+ temp[len] = '\0';
+
+ ret = ctsvc_convert_chinese_to_pinyin(temp, &pinyinname, &size);
+ if (ret != CONTACTS_ERROR_NONE) {
+ return false;
+ }
+
+ for(k=0; k<size; k++) {
+ if (!initial_match &&
+ strlen(pinyinname[k].pinyin_name) <= strlen(temp_needle + j) &&
+ strncmp(pinyinname[k].pinyin_name, temp_needle + j, strlen(pinyinname[k].pinyin_name)) == 0) {
+ match = true;
+ j+=strlen(pinyinname[k].pinyin_name);
+ break;
+
+ }
+ else if (!initial_match &&
+ strlen(pinyinname[k].pinyin_name) > strlen(temp_needle + j) &&
+ strncmp(pinyinname[k].pinyin_name, temp_needle + j, strlen(temp_needle + j)) == 0) {
+ match = true;
+ j+=strlen(temp_needle + j);
+ break;
+
+ }
+ else if (pinyinname[k].pinyin_initial[0] == temp_needle[j]) {
+ initial_match = true;
+ match = true;
+ j++;
+ break;
+ }
+ else
+ match = false;
+ }
+ ctsvc_pinyin_free(pinyinname, size);
+
+ if (match==false) {
+ break;
+ }
+
+ }
+
+ if (match) {
+ *h_len = i;
+ *n_len = j;
+ }
+
+ return match;
+}
+
+static bool __ctsvc_compare_unicode_letter(const UChar* haystack, int haystack_lang, const UChar *needle, int needle_lang)
+{
+ int i, j;
+ bool ret = false;
+
+ switch (haystack_lang)
+ {
+ case CTSVC_LANG_NUMBER:
+ case CTSVC_LANG_OTHERS:
+ {
+ if (haystack_lang == needle_lang)
+ {
+ for(i=0, j=0; i<u_strlen(haystack) && j<u_strlen(needle);) {
+ if(haystack[i] == needle[j])
+ ret = true;
+ else {
+ ret = false;
+ break;
+ }
+ i++;
+ j++;
+ }
+ }
+ return ret;
+ }
+ case CTSVC_LANG_ENGLISH:
+ {
+ switch(needle_lang)
+ {
+ case CTSVC_LANG_ENGLISH:
+ for(i=0, j=0; i<u_strlen(haystack) && j<u_strlen(needle);) {
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_COMBINING_DIACRITICAL_MARKS_START,
+ haystack[i], CTSVC_COMBINING_DIACRITICAL_MARKS_END)) {
+ i++;
+ continue;
+ }
+ if (CTSVC_COMPARE_BETWEEN(CTSVC_COMBINING_DIACRITICAL_MARKS_START,
+ needle[j], CTSVC_COMBINING_DIACRITICAL_MARKS_END)) {
+ j++;
+ continue;
+ }
+
+ if(haystack[i] == needle[j])
+ ret = true;
+ else {
+ ret = false;
+ break;
+ }
+
+ i++;
+ j++;
+ }
+ return ret;
+ default:
+ return false;
+ }
+ }
+ break;
+ case CTSVC_LANG_KOREAN:
+ {
+ if(needle_lang != CTSVC_LANG_KOREAN)
+ break;
+
+ if (u_strlen(needle) == 1
+ && CTSVC_COMPARE_BETWEEN(0x3130, needle[0], 0x314e)
+ && haystack[0] == needle[0]) {
+ return true;
+ }
+
+ for(i=0, j=0; i<u_strlen(haystack) && j<u_strlen(needle);) {
+ if(haystack[i] == needle[j])
+ ret = true;
+ else {
+ ret = false;
+ break;
+ }
+ i++;
+ j++;
+ }
+ return ret;
+ }
+ break;
+ case CTSVC_LANG_JAPANESE:
+ {
+ if(needle_lang != CTSVC_LANG_JAPANESE)
+ break;
+
+ if (haystack[0] == needle[0])
+ ret = true;
+ else {
+ UChar temp_haystack[2] = {0x00,};
+ UChar temp_needle[2] = {0x00,};
+ UChar hiragana_haystack[2] = {0x00,};
+ UChar hiragana_needle[2] = {0x00,};
+ temp_haystack[0] = haystack[0];
+ temp_needle[0] = needle[0];
+
+ ctsvc_convert_japanese_to_hiragana_unicode(temp_haystack, hiragana_haystack, 2 );
+
+ ctsvc_convert_japanese_to_hiragana_unicode(temp_needle, hiragana_needle, 2);
+
+ if (hiragana_haystack[0] == hiragana_needle[0])
+ ret = true;
+ }
+ return ret;
+ }
+ case CTSVC_LANG_CHINESE:
+ {
+ if(needle_lang == haystack_lang
+ && haystack[0] == needle[0])
+ ret = true;
+ }
+ return ret;
+ }
+
+ return false;
+}
+
+int ctsvc_utils_string_strstr(const char *haystack, const char *needle, int *len)
+{
+ int h_len = 0, h_len_temp, n_len, i, j;
+ UChar haystack_letter[SMALL_BUFFER_SIZE];
+ UChar needle_letter[SMALL_BUFFER_SIZE];
+ UChar first_needle_letter[SMALL_BUFFER_SIZE];
+ int haystack_letter_lang;
+ int needle_letter_lang;
+ int first_needle_letter_lang;
+
+ bool matching=false;
+ int match_len = 0;
+ int match_start = -1;
+
+ RETVM_IF(NULL == haystack, -1, "The parameter(haystack) is NULL");
+ RETVM_IF(NULL == needle, -1, "The parameter(needle) is NULL");
+ SECURE_SLOGD("haystack = %s, needle = %s", haystack, needle);
+
+ char temp_haystack[strlen(haystack) + 1];
+ char temp_needle[strlen(needle) + 1];
+
+ *len = 0;
+
+ __ctsvc_copy_and_remove_special_char(haystack, temp_haystack, strlen(haystack) + 1);
+ __ctsvc_copy_and_remove_special_char(needle, temp_needle, strlen(needle) + 1);
+
+ n_len = ctsvc_check_utf8(temp_needle[0]);
+
+ first_needle_letter_lang = __ctsvc_normalize_str_to_unicode(temp_needle, n_len, first_needle_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(first_needle_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", first_needle_letter_lang);
+
+ for (i=0, j=0;i<strlen(temp_haystack) && j<strlen(temp_needle);i+=h_len) {
+ h_len_temp = ctsvc_check_utf8(temp_haystack[i]);
+
+ haystack_letter_lang = __ctsvc_normalize_str_to_unicode(temp_haystack + i, h_len_temp, haystack_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(haystack_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", haystack_letter_lang);
+
+ if (matching == false) {
+ if (__ctsvc_compare_unicode_letter(haystack_letter, haystack_letter_lang, first_needle_letter, first_needle_letter_lang)
+ || __ctsvc_compare_pinyin_letter(temp_haystack + i, haystack_letter_lang, temp_needle + j, first_needle_letter_lang, &h_len_temp, &n_len)) {
+ matching = true;
+ j+=n_len;
+ match_start = i;
+ match_len = h_len_temp;
+
+ if (temp_needle[j] == '\0') {
+ *len = match_len;
+ return match_start;
+ }
+ }
+ h_len = h_len_temp;
+ continue;
+ }
+ else {
+ n_len = ctsvc_check_utf8(temp_needle[j]);
+
+ needle_letter_lang = __ctsvc_normalize_str_to_unicode(temp_needle + j, n_len, needle_letter, SMALL_BUFFER_SIZE);
+ RETVM_IF(needle_letter_lang < CONTACTS_ERROR_NONE , -1, "The __ctsvc_normalize_str_to_unicode failed(%d)", needle_letter_lang);
+
+ if (__ctsvc_compare_unicode_letter(haystack_letter, haystack_letter_lang, needle_letter, needle_letter_lang )){
+ j+=n_len;
+ match_len += h_len_temp;
+
+ if (temp_needle[j] == '\0') {
+ *len = match_len;
+ return match_start;
+ }
+ h_len = h_len_temp;
+ continue;
+ }
+ else {
+ j = 0;
+ matching = false;
+ match_start = -1;
+ match_len = 0;
+ i-=h_len;
+ }
+ }
+
+ }
+
+ DBG("NOT match");
+ return -1;
+}
+
+static bool _get_modified_number(char *temp, char *keyword, int *out_len_keyword,
+ int *out_len_offset)
+{
+ RETV_IF(NULL == temp, false);
+ RETV_IF(NULL == keyword, false);
+ RETV_IF(NULL == out_len_keyword, false);
+ RETV_IF(NULL == out_len_offset, false);
+
+ char *start_needle = NULL;
+ char *cursor_number = temp;
+ char *cursor_keyword = keyword;
+ bool is_start = false;
+ int len_keyword = 0;
+
+ while (1) {
+ if ('\0' == *cursor_keyword)
+ break;
+ if ('\0' == *cursor_number) {
+ if (true == is_start) /* ended even if keyword is remained */
+ is_start = false;
+ break;
+ }
+ if (*cursor_number < '0' || '9' < *cursor_number) {
+ if (true == is_start)
+ len_keyword++;
+ cursor_number++;
+ continue;
+ }
+ if (*cursor_keyword < '0' || '9' < *cursor_keyword) {
+ cursor_keyword++;
+ continue;
+ }
+ if (*cursor_keyword != *cursor_number) {
+ if (true == is_start) {
+ is_start = false;
+ cursor_keyword = keyword;
+ len_keyword = 0;
+ } else {
+ cursor_number++;
+ }
+ continue;
+ }
+ if (false == is_start)
+ start_needle = cursor_number;
+ is_start = true;
+ len_keyword++;
+ cursor_number++;
+ cursor_keyword++;
+ }
+ if (false == is_start) { /* false to search */
+ return false;
+ }
+ *out_len_keyword = len_keyword;
+ *out_len_offset = strlen(temp) - strlen(start_needle);
+
+ return true;
+}
+
+static char *_strchr_with_nth(char *s, int c, int nth)
+{
+ char *cursor = s;
+ while (*cursor) {
+ if (*cursor == c)
+ nth--;
+
+ if (nth < 0)
+ break;
+
+ cursor++;
+ }
+ return cursor;
+}
+
+static char *_strrchr_with_nth(char *ori, char *s, int c, int nth)
+{
+ char *cursor = s;
+ while (*cursor) {
+ if (cursor <= ori) {
+ ERR("over");
+ return ori;
+ }
+
+ if (*cursor == c)
+ nth--;
+
+ if (nth < 0)
+ break;
+
+ cursor--;
+ }
+ return cursor + 1;
+}
+
+char *ctsvc_utils_get_modified_str(char *temp, bool is_snippet, const char *keyword,
+ const char *start_match, const char *end_match, int token_number)
+{
+ char *mod_temp = NULL;
+
+ RETV_IF(NULL == temp, NULL);
+ RETV_IF('\0' == *temp, NULL);
+ RETV_IF(false == is_snippet, NULL);
+ RETV_IF(NULL == keyword, NULL);
+ RETV_IF('\0' == *keyword, NULL);
+
+ bool is_modified = true;
+ int len_keyword = 0;
+ int len_offset = 0;
+ int len_full = 0;
+ int len_print = 0;
+ char *pos_start = NULL;
+
+ char *pos_at = strstr(temp, "@");
+ if (NULL == pos_at) {
+ ERR("Invalid value[%s]", temp);
+ return NULL;
+ }
+ DBG("[%s]", temp);
+ *pos_at = '\0';
+ char datatype_str[12] = {0};
+ snprintf(datatype_str, sizeof(datatype_str), "%s", temp);
+ temp = pos_at + 1;
+ DBG("[%s]", temp);
+ switch (atoi(datatype_str)) {
+ case CONTACTS_DATA_TYPE_NAME:
+ DBG("NAME");
+ len_offset = ctsvc_utils_string_strstr(temp, keyword, &len_keyword);
+ if (len_offset < 0) {
+ is_modified = false;
+ break;
+ }
+ break;
+
+ case CONTACTS_DATA_TYPE_NUMBER:
+ DBG("NUMBER");
+ is_modified = _get_modified_number(temp, (char *)keyword, &len_keyword, &len_offset);
+ break;
+
+ default:
+ DBG("DATA");
+ pos_start = strcasestr(temp, keyword);
+ if (NULL == pos_start)
+ break;
+
+ len_keyword = strlen(keyword);
+ len_offset = strlen(temp) - strlen(pos_start);;
+ break;
+ }
+
+ if (false == is_modified)
+ return NULL;
+
+ len_full = strlen(temp) + strlen(start_match) + strlen(end_match) + 1;
+
+ mod_temp = calloc(len_full, sizeof(char));
+ if (NULL == mod_temp) {
+ ERR("calloc() Fail");
+ return NULL;
+ }
+
+ char *keyword_start = NULL;
+ snprintf(mod_temp, len_offset + 1, "%s", temp);
+ len_print = len_offset;
+ len_print += snprintf(mod_temp + len_print, len_full - len_print,
+ "%s", start_match);
+ keyword_start = mod_temp + len_print;
+ snprintf(mod_temp + len_print, len_keyword + 1, "%s", temp + len_offset);
+ len_print += len_keyword;
+ len_print += snprintf(mod_temp + len_print, len_full - len_print,
+ "%s%s", end_match, temp + len_offset + len_keyword);
+
+ if (token_number < 1)
+ return mod_temp;
+
+ char *cursor = NULL;
+ cursor = _strchr_with_nth(keyword_start, ' ', token_number);
+ *cursor = '\0';
+ cursor = _strrchr_with_nth(mod_temp, keyword_start, ' ', token_number);
+ memcpy(mod_temp, cursor, len_full);
+
+ return mod_temp;
+}
+
+
--- /dev/null
+/*
+ * Contacts Service
+ *
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#ifndef __CTSVC_UTILS_STRING_H__
+#define __CTSVC_UTILS_STRING_H__
+
+#include "ctsvc_struct.h"
+#include "ctsvc_record.h"
+
+enum {
+ CTSVC_ENUM_URI_PERSON,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED,
+ CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED,
+};
+
+int ctsvc_utils_string_strstr(const char *haystack, const char *needle, int *len);
+char *ctsvc_utils_get_modified_str(char *temp, bool is_snippet, const char *keyword,
+ const char *start_match, const char *end_match, int token_number);
+
+#endif /* __CTSVC_UTILS_STRING_H__ */
+
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_NAME);
+ CONTACTS_DATA_TYPE_NAME);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_EMAIL);
+ CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_POSTAL);
+ CONTACTS_DATA_TYPE_POSTAL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_URL);
+ CONTACTS_DATA_TYPE_URL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_EVENT);
+ CONTACTS_DATA_TYPE_EVENT);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_RELATIONSHIP);
+ CONTACTS_DATA_TYPE_RELATIONSHIP);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_IMAGE);
+ CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_COMPANY);
+ CONTACTS_DATA_TYPE_COMPANY);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_NICKNAME);
+ CONTACTS_DATA_TYPE_NICKNAME);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_MESSENGER);
+ CONTACTS_DATA_TYPE_MESSENGER);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_NOTE);
+ CONTACTS_DATA_TYPE_NOTE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_PROFILE);
+ CONTACTS_DATA_TYPE_PROFILE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_EXTENSION);
+ CONTACTS_DATA_TYPE_EXTENSION);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"data6 cleaned_number "
"FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
"ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"data3 email "
"FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
"ON temp_data.contact_id = "CTSVC_DB_VIEW_PERSON_CONTACT".contact_id",
- CTSVC_DATA_EMAIL);
+ CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"data6 cleaned_number "
"FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
"ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"data3 email "
"FROM "CTS_TABLE_DATA" WHERE datatype = %d AND is_my_profile = 0) temp_data "
"ON temp_data.contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id",
- CTSVC_DATA_EMAIL);
+ CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile = 0 ",
- CTSVC_DATA_SIP);
+ CONTACTS_DATA_TYPE_SIP);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "DB error : ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype=%d AND id = %d ",
- CTSVC_DATA_POSTAL, id);
+ CONTACTS_DATA_TYPE_POSTAL, id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype=%d AND is_my_profile=0 ",
- CTSVC_DATA_POSTAL);
+ CONTACTS_DATA_TYPE_POSTAL);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 "
"WHERE id != %d AND contact_id = %d AND datatype = %d",
- address_id, contact_id, CTSVC_DATA_POSTAL);
+ address_id, contact_id, CONTACTS_DATA_TYPE_POSTAL);
ret = ctsvc_query_exec(query);
WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
return ret;
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3, "
"data4, data5, data6, data7, data8, data9) "
"VALUES(%d, %d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_POSTAL, address->is_default, address->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_POSTAL, address->is_default, address->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE datatype = %d AND id = %d",
- CTSVC_DATA_POSTAL, id);
+ CONTACTS_DATA_TYPE_POSTAL, id);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_COMPANY);
+ id, CONTACTS_DATA_TYPE_COMPANY);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype=%d AND is_my_profile=0 ",
- CTSVC_DATA_COMPANY);
+ CONTACTS_DATA_TYPE_COMPANY);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
"INSERT INTO "CTS_TABLE_DATA"(id, contact_id, is_my_profile, datatype, is_default, data1, data2, data3, data4, "
"data5, data6, data7, data8, data9, data10, data11, data12) "
"VALUES(%d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- company_id, contact_id, is_my_profile, CTSVC_DATA_COMPANY);
+ company_id, contact_id, is_my_profile, CONTACTS_DATA_TYPE_COMPANY);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_COMPANY);
+ id, CONTACTS_DATA_TYPE_COMPANY);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
do {
datatype = ctsvc_stmt_get_int(stmt, 0);
switch (datatype) {
- case CTSVC_DATA_NAME:
+ case CONTACTS_DATA_TYPE_NAME:
ctsvc_get_data_info_name(stmt, (contacts_list_h)contact->name);
break;
- case CTSVC_DATA_EVENT:
+ case CONTACTS_DATA_TYPE_EVENT:
ctsvc_get_data_info_event(stmt, (contacts_list_h)contact->events);
break;
- case CTSVC_DATA_MESSENGER:
+ case CONTACTS_DATA_TYPE_MESSENGER:
ctsvc_get_data_info_messenger(stmt, (contacts_list_h)contact->messengers);
break;
- case CTSVC_DATA_POSTAL:
+ case CONTACTS_DATA_TYPE_POSTAL:
ctsvc_get_data_info_address(stmt, (contacts_list_h)contact->postal_addrs);
break;
- case CTSVC_DATA_URL:
+ case CONTACTS_DATA_TYPE_URL:
ctsvc_get_data_info_url(stmt, (contacts_list_h)contact->urls);
break;
- case CTSVC_DATA_NICKNAME:
+ case CONTACTS_DATA_TYPE_NICKNAME:
ctsvc_get_data_info_nickname(stmt, (contacts_list_h)contact->nicknames);
break;
- case CTSVC_DATA_NUMBER:
+ case CONTACTS_DATA_TYPE_NUMBER:
ctsvc_get_data_info_number(stmt, (contacts_list_h)contact->numbers);
break;
- case CTSVC_DATA_EMAIL:
+ case CONTACTS_DATA_TYPE_EMAIL:
ctsvc_get_data_info_email(stmt, (contacts_list_h)contact->emails);
break;
- case CTSVC_DATA_PROFILE:
+ case CONTACTS_DATA_TYPE_PROFILE:
ctsvc_get_data_info_profile(stmt, (contacts_list_h)contact->profiles);
break;
- case CTSVC_DATA_RELATIONSHIP:
+ case CONTACTS_DATA_TYPE_RELATIONSHIP:
ctsvc_get_data_info_relationship(stmt, (contacts_list_h)contact->relationships);
break;
- case CTSVC_DATA_IMAGE:
+ case CONTACTS_DATA_TYPE_IMAGE:
ctsvc_get_data_info_image(stmt, (contacts_list_h)contact->images);
break;
- case CTSVC_DATA_COMPANY:
+ case CONTACTS_DATA_TYPE_COMPANY:
ctsvc_get_data_info_company(stmt, (contacts_list_h)contact->company);
break;
- case CTSVC_DATA_NOTE:
+ case CONTACTS_DATA_TYPE_NOTE:
ctsvc_get_data_info_note(stmt, (contacts_list_h)contact->note);
break;
- case CTSVC_DATA_EXTENSION:
+ case CONTACTS_DATA_TYPE_EXTENSION:
ctsvc_get_data_info_extension(stmt, (contacts_list_h)contact->extensions);
break;
- case CTSVC_DATA_SIP:
+ case CONTACTS_DATA_TYPE_SIP:
ctsvc_get_data_info_sip(stmt, (contacts_list_h)contact->sips);
break;
default:
"WHERE D.data4 = ?",
/* Below condition takes long time, so omit the condition */
/* AND _NUMBER_COMPARE_(D.data5, ?, NULL, NULL) */
- CTSVC_DATA_NUMBER, addressbook_id);
+ CONTACTS_DATA_TYPE_NUMBER, addressbook_id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare fail(%d)", ret);
"ON C.contact_id=D.contact_id AND D.datatype=%d AND C.deleted = 0 AND D.is_my_profile = 0 "
"AND C.addressbook_id <> %d "
"WHERE D.data3 = ?",
- CTSVC_DATA_EMAIL, addressbook_id);
+ CONTACTS_DATA_TYPE_EMAIL, addressbook_id);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare fail(%d)", ret);
snprintf(query, sizeof(query),
"SELECT id FROM "CTSVC_DB_VIEW_CONTACT" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
- person_id, CTSVC_DATA_EMAIL);
+ person_id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_get_first_int_result(query, &default_email_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
char query[CTS_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
- CTSVC_DATA_EMAIL, contact_id);
+ CONTACTS_DATA_TYPE_EMAIL, contact_id);
ret = ctsvc_query_get_first_int_result(query, &email_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
char query[CTS_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_primary_default=1",
- CTSVC_DATA_EMAIL, contact_id);
+ CONTACTS_DATA_TYPE_EMAIL, contact_id);
ret = ctsvc_query_get_first_int_result(query, &email_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
snprintf(query, sizeof(query),
"SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
- person_id, CTSVC_DATA_EMAIL);
+ person_id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_EMAIL);
+ id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
- CTSVC_DATA_EMAIL, contact_id);
+ CONTACTS_DATA_TYPE_EMAIL, contact_id);
ret = ctsvc_query_get_first_int_result(query, &email_id);
if (0 < ret)
has_email = true;
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_EMAIL);
+ CONTACTS_DATA_TYPE_EMAIL);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 "
"WHERE id != %d AND contact_id = %d AND datatype = %d",
- email_id, contact_id, CTSVC_DATA_EMAIL);
+ email_id, contact_id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_exec(query);
WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
return ret;
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_EMAIL, email->is_default, email->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_EMAIL, email->is_default, email->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_EMAIL);
+ id, CONTACTS_DATA_TYPE_EMAIL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_EVENT);
+ id, CONTACTS_DATA_TYPE_EVENT);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_EVENT);
+ CONTACTS_DATA_TYPE_EVENT);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3, data4, data5) "
"VALUES(%d, %d, %d, %d, ?, ?, ?, %d)",
- contact_id, is_my_profile, CTSVC_DATA_EVENT, event->type, event->is_leap_month);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_EVENT, event->type, event->is_leap_month);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_EVENT);
+ id, CONTACTS_DATA_TYPE_EVENT);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_EXTENSION);
+ id, CONTACTS_DATA_TYPE_EXTENSION);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_EXTENSION);
+ CONTACTS_DATA_TYPE_EXTENSION);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
"INSERT INTO "CTS_TABLE_DATA" (contact_id, is_my_profile, datatype, data1, data2, data3, data4, "
"data5, data6, data7, data8, data9, data10, data11, data12) "
"VALUES(%d, %d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_EXTENSION, extension->data1);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_EXTENSION, extension->data1);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_EXTENSION);
+ id, CONTACTS_DATA_TYPE_EXTENSION);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
char query[CTS_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
- CTSVC_DATA_IMAGE, contact_id);
+ CONTACTS_DATA_TYPE_IMAGE, contact_id);
ret = ctsvc_query_get_first_int_result(query, &image_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
- person_id, CTSVC_DATA_IMAGE);
+ person_id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_get_first_int_result(query, &default_image_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
snprintf(query, sizeof(query),
"SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
- person_id, CTSVC_DATA_IMAGE);
+ person_id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_IMAGE);
+ id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
if (is_default) {
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
- CTSVC_DATA_IMAGE, contact_id);
+ CONTACTS_DATA_TYPE_IMAGE, contact_id);
ret = ctsvc_query_get_first_int_result(query, &image_id);
if (image_id) {
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_IMAGE);
+ CONTACTS_DATA_TYPE_IMAGE);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_DATA" SET is_default=0, is_primary_default=0 WHERE id != %d AND contact_id = %d AND datatype=%d",
- image_id, contact_id, CTSVC_DATA_IMAGE);
+ image_id, contact_id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_exec(query);
WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
return ret;
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(id, contact_id, is_my_profile, datatype, is_default, is_primary_default, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, %d, %d, %d, ?, ?)",
- image_id, contact_id, is_my_profile, CTSVC_DATA_IMAGE, image->is_default, image->is_default, image->type);
+ image_id, contact_id, is_my_profile, CONTACTS_DATA_TYPE_IMAGE, image->is_default, image->is_default, image->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_IMAGE);
+ id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_MESSENGER);
+ id, CONTACTS_DATA_TYPE_MESSENGER);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_MESSENGER);
+ CONTACTS_DATA_TYPE_MESSENGER);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_MESSENGER, messenger->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_MESSENGER, messenger->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_MESSENGER);
+ id, CONTACTS_DATA_TYPE_MESSENGER);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
do {
datatype = ctsvc_stmt_get_int(stmt, 0);
switch (datatype) {
- case CTSVC_DATA_NAME:
+ case CONTACTS_DATA_TYPE_NAME:
ctsvc_get_data_info_name(stmt, (contacts_list_h)my_profile->name);
break;
- case CTSVC_DATA_EVENT:
+ case CONTACTS_DATA_TYPE_EVENT:
ctsvc_get_data_info_event(stmt, (contacts_list_h)my_profile->events);
break;
- case CTSVC_DATA_MESSENGER:
+ case CONTACTS_DATA_TYPE_MESSENGER:
ctsvc_get_data_info_messenger(stmt, (contacts_list_h)my_profile->messengers);
break;
- case CTSVC_DATA_POSTAL:
+ case CONTACTS_DATA_TYPE_POSTAL:
ctsvc_get_data_info_address(stmt, (contacts_list_h)my_profile->postal_addrs);
break;
- case CTSVC_DATA_URL:
+ case CONTACTS_DATA_TYPE_URL:
ctsvc_get_data_info_url(stmt, (contacts_list_h)my_profile->urls);
break;
- case CTSVC_DATA_NICKNAME:
+ case CONTACTS_DATA_TYPE_NICKNAME:
ctsvc_get_data_info_nickname(stmt, (contacts_list_h)my_profile->nicknames);
break;
- case CTSVC_DATA_NUMBER:
+ case CONTACTS_DATA_TYPE_NUMBER:
ctsvc_get_data_info_number(stmt, (contacts_list_h)my_profile->numbers);
break;
- case CTSVC_DATA_EMAIL:
+ case CONTACTS_DATA_TYPE_EMAIL:
ctsvc_get_data_info_email(stmt, (contacts_list_h)my_profile->emails);
break;
- case CTSVC_DATA_PROFILE:
+ case CONTACTS_DATA_TYPE_PROFILE:
ctsvc_get_data_info_profile(stmt, (contacts_list_h)my_profile->profiles);
break;
- case CTSVC_DATA_RELATIONSHIP:
+ case CONTACTS_DATA_TYPE_RELATIONSHIP:
ctsvc_get_data_info_relationship(stmt, (contacts_list_h)my_profile->relationships);
break;
- case CTSVC_DATA_IMAGE:
+ case CONTACTS_DATA_TYPE_IMAGE:
ctsvc_get_data_info_image(stmt, (contacts_list_h)my_profile->images);
break;
- case CTSVC_DATA_COMPANY:
+ case CONTACTS_DATA_TYPE_COMPANY:
ctsvc_get_data_info_company(stmt, (contacts_list_h)my_profile->company);
break;
- case CTSVC_DATA_NOTE:
+ case CONTACTS_DATA_TYPE_NOTE:
ctsvc_get_data_info_note(stmt, (contacts_list_h)my_profile->note);
break;
- case CTSVC_DATA_EXTENSION:
+ case CONTACTS_DATA_TYPE_EXTENSION:
ctsvc_get_data_info_extension(stmt, (contacts_list_h)my_profile->extensions);
break;
- case CTSVC_DATA_SIP:
+ case CONTACTS_DATA_TYPE_SIP:
ctsvc_get_data_info_sip(stmt, (contacts_list_h)my_profile->sips);
break;
default:
}
snprintf(query, sizeof(query),
- "SELECT id FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND datatype=%d", name->contact_id, CTSVC_DATA_NAME);
+ "SELECT id FROM "CTS_TABLE_DATA" WHERE contact_id = %d AND datatype=%d", name->contact_id, CONTACTS_DATA_TYPE_NAME);
ret = ctsvc_query_get_first_int_result(query, &name_id);
if (name_id) {
ERR("name_id (%d) is exist", name_id);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_NAME);
+ id, CONTACTS_DATA_TYPE_NAME);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_NAME);
+ CONTACTS_DATA_TYPE_NAME);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
"DELETE FROM "CTS_TABLE_DATA" "
"WHERE contact_id = %d AND datatype=%d "
"AND is_my_profile = %d",
- contact_id, CTSVC_DATA_NAME, is_my_profile);
+ contact_id, CONTACTS_DATA_TYPE_NAME, is_my_profile);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
ERR("ctsvc_query_exec() Faild(%d)", ret);
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3, "
"data4, data5, data6, data7, data8, data9, data10, data11, data12) "
"VALUES(%d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_NAME);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_NAME);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_NICKNAME);
+ id, CONTACTS_DATA_TYPE_NICKNAME);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_NICKNAME);
+ CONTACTS_DATA_TYPE_NICKNAME);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_NICKNAME, nickname->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_NICKNAME, nickname->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_NICKNAME);
+ id, CONTACTS_DATA_TYPE_NICKNAME);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_NOTE);
+ id, CONTACTS_DATA_TYPE_NOTE);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_NOTE);
+ CONTACTS_DATA_TYPE_NOTE);
if (0 != limit) {
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data3) "
- "VALUES(%d, %d, %d, ?)", contact_id, is_my_profile, CTSVC_DATA_NOTE);
+ "VALUES(%d, %d, %d, ?)", contact_id, is_my_profile, CONTACTS_DATA_TYPE_NOTE);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_NOTE);
+ id, CONTACTS_DATA_TYPE_NOTE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_default = 1",
- person_id, CTSVC_DATA_NUMBER);
+ person_id, CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_get_first_int_result(query, &default_number_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
char query[CTS_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_default=1",
- CTSVC_DATA_NUMBER, contact_id);
+ CONTACTS_DATA_TYPE_NUMBER, contact_id);
ret = ctsvc_query_get_first_int_result(query, &number_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
char query[CTS_SQL_MAX_LEN] = {0};
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype=%d AND contact_id=%d AND is_primary_default=%d",
- CTSVC_DATA_NUMBER, contact_id, 1);
+ CONTACTS_DATA_TYPE_NUMBER, contact_id, 1);
ret = ctsvc_query_get_first_int_result(query, &number_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
snprintf(query, sizeof(query),
"SELECT c.contact_id FROM "CTS_TABLE_CONTACTS" c, "CTS_TABLE_DATA" d "
"WHERE c.person_id = %d AND d.datatype = %d AND c.contact_id = d.contact_id AND d.is_primary_default = 1",
- person_id, CTSVC_DATA_NUMBER);
+ person_id, CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_get_first_int_result(query, &default_contact_id);
if (CONTACTS_ERROR_NONE != ret)
return 0;
snprintf(query, sizeof(query),
"SELECT id FROM "CTS_TABLE_DATA" WHERE datatype = %d AND contact_id = %d AND is_my_profile = 0 limit 1",
- CTSVC_DATA_NUMBER, contact_id);
+ CONTACTS_DATA_TYPE_NUMBER, contact_id);
ret = ctsvc_query_get_first_int_result(query, &number_id);
if (0 < ret)
has_phonenumber = true;
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_NUMBER);
+ CONTACTS_DATA_TYPE_NUMBER);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_DATA" SET is_default = 0, is_primary_default = 0 WHERE id != %d AND contact_id = %d AND datatype = %d",
- number_id, contact_id, CTSVC_DATA_NUMBER);
+ number_id, contact_id, CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_exec(query);
WARN_IF(CONTACTS_ERROR_NONE != ret, "ctsvc_query_exec() Fail(%d)", ret);
return ret;
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, is_default, data1, data2, data3, data4, data5, data6) "
"VALUES(%d, %d, %d, %d, %d, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_NUMBER, number->is_default, number->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_NUMBER, number->is_default, number->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
#endif /* ENABLE_LOG_FEATURE */
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_NUMBER);
+ id, CONTACTS_DATA_TYPE_NUMBER);
ret = ctsvc_query_exec(query);
if (CONTACTS_ERROR_NONE != ret) {
* limitations under the License.
*
*/
+
#include "contacts.h"
#include "ctsvc_internal.h"
#include "ctsvc_db_schema.h"
#include "ctsvc_record.h"
#include "ctsvc_notification.h"
#include "ctsvc_notify.h"
+#include "ctsvc_utils_string.h"
#ifdef _CONTACTS_IPC_SERVER
#include "ctsvc_server_change_subject.h"
#endif
-int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt, unsigned int *projection, int projection_count, contacts_record_h *record)
+int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt,
+ unsigned int *projection,
+ int projection_count,
+ bool is_snippet,
+ const char *keyword,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_record_h *record)
{
ctsvc_person_s *person;
char full_path[CTSVC_IMG_FULL_PATH_SIZE_MAX] = {0};
value++; /* fix warning */
}
break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_TYPE:
+ person->snippet_type = ctsvc_stmt_get_int(stmt, i);
+ break;
+ case CTSVC_PROPERTY_PERSON_SNIPPET_STRING:
+ temp = ctsvc_stmt_get_text(stmt, i);
+ free(person->snippet_string);
+ person->snippet_string = ctsvc_utils_get_modified_str(temp, is_snippet,
+ keyword, start_match, end_match, token_number);
+ if (NULL == person->snippet_string)
+ person->snippet_string = SAFE_STRDUP(temp);
+ break;
default:
ASSERT_NOT_REACHED("property_id(0x%0x) is not supported in value(person)", property_id);
return CONTACTS_ERROR_INVALID_PARAMETER;
projection[i] = s_query->properties[i].property_id;
int ret = ctsvc_db_person_create_record_from_stmt_with_projection(stmt,
- projection, s_query->property_count, record);
+ projection, s_query->property_count, false, NULL, NULL, NULL, -1, record);
free(projection);
return ret;
} else {
- return ctsvc_db_person_create_record_from_stmt_with_projection(stmt, s_query->projection, s_query->projection_count, record);
+ return ctsvc_db_person_create_record_from_stmt_with_projection(stmt,
+ s_query->projection, s_query->projection_count, false, NULL, NULL, NULL,
+ -1, record);
}
}
}
ctsvc_stmt_finalize(stmt);
- if (CTSVC_DATA_IMAGE == datatype) {
+ if (CONTACTS_DATA_TYPE_IMAGE == datatype) {
if (image_thumbnail_path) {
snprintf(query, sizeof(query),
"UPDATE "CTS_TABLE_PERSONS" SET image_thumbnail_path=? WHERE person_id=%d", person_id);
"SELECT D.contact_id FROM "CTS_TABLE_CONTACTS" C, "CTS_TABLE_DATA" D "
"ON C.contact_id = D.contact_id AND C.deleted = 0 "
"WHERE C.person_id=%d AND D.datatype=%d AND is_primary_default=1 AND D.is_my_profile = 0",
- person_id, CTSVC_DATA_IMAGE);
+ person_id, CONTACTS_DATA_TYPE_IMAGE);
ret = ctsvc_query_get_first_int_result(query, &contact_id);
RETV_IF(CONTACTS_ERROR_NONE != ret, -1);
return contact_id;
ret = ctsvc_begin_trans();
RETVM_IF(ret, ret, "ctsvc_begin_trans() Fail(%d)", ret);
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_NUMBER);
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_EMAIL);
- __ctsvc_db_update_person_default(contact->person_id, CTSVC_DATA_IMAGE);
+ __ctsvc_db_update_person_default(contact->person_id, CONTACTS_DATA_TYPE_NUMBER);
+ __ctsvc_db_update_person_default(contact->person_id, CONTACTS_DATA_TYPE_EMAIL);
+ __ctsvc_db_update_person_default(contact->person_id, CONTACTS_DATA_TYPE_IMAGE);
has_phonenumber = __ctsvc_get_has_column(contact->person_id, "has_phonenumber");
has_email = __ctsvc_get_has_column(contact->person_id, "has_email");
int ctsvc_db_person_create_record_from_stmt_with_query(cts_stmt stmt,
contacts_query_h query, contacts_record_h *record);
int ctsvc_db_person_create_record_from_stmt_with_projection(cts_stmt stmt,
- unsigned int *projection, int projection_count, contacts_record_h *record);
+ unsigned int *projection,
+ int projection_count,
+ bool is_snippet,
+ const char *keyword,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_record_h *record);
void ctsvc_db_normalize_str_callback(sqlite3_context *context, int argc,
sqlite3_value **argv);
int ctsvc_db_person_set_favorite(int person_id, bool set, bool propagate);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_PROFILE);
+ id, CONTACTS_DATA_TYPE_PROFILE);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_PROFILE);
+ CONTACTS_DATA_TYPE_PROFILE);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data3, data4, data5, "
"data6, data7, data8, data9, data10, data11) "
"VALUES(%d, %d, %d, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_PROFILE);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_PROFILE);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_PROFILE);
+ id, CONTACTS_DATA_TYPE_PROFILE);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_RELATIONSHIP);
+ id, CONTACTS_DATA_TYPE_RELATIONSHIP);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_RELATIONSHIP);
+ CONTACTS_DATA_TYPE_RELATIONSHIP);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_RELATIONSHIP, relationship->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_RELATIONSHIP, relationship->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_RELATIONSHIP);
+ id, CONTACTS_DATA_TYPE_RELATIONSHIP);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_SIP);
+ id, CONTACTS_DATA_TYPE_SIP);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_SIP);
+ CONTACTS_DATA_TYPE_SIP);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3) "
"VALUES(%d, %d, %d, ?, %d, ?)",
- contact_id, is_my_profile, CTSVC_DATA_SIP, sip->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_SIP, sip->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "DB error : ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_SIP);
+ id, CONTACTS_DATA_TYPE_SIP);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
"ON "CTS_TABLE_DATA".contact_id = "CTS_TABLE_CONTACTS".contact_id "
"AND contacts.deleted = 0 AND is_my_profile = 0 AND datatype = %d "
"WHERE id = %d ",
- CTSVC_DATA_NUMBER, speeddial->number_id);
+ CONTACTS_DATA_TYPE_NUMBER, speeddial->number_id);
ret = ctsvc_query_get_first_int_result(query, &number_id);
if (CONTACTS_ERROR_NONE != ret) {
ERR("ctsvc_query_get_first_int_result() Fail(%d) : number_id is invalid", ret);
"ON "CTS_TABLE_DATA".contact_id = "CTS_TABLE_CONTACTS".contact_id "
"AND contacts.deleted = 0 AND is_my_profile = 0 AND datatype = %d "
"WHERE id = %d ",
- CTSVC_DATA_NUMBER, speeddial->number_id);
+ CONTACTS_DATA_TYPE_NUMBER, speeddial->number_id);
ret = ctsvc_query_get_first_int_result(query, &number_id);
if (CONTACTS_ERROR_NONE != ret) {
ERR("ctsvc_query_get_first_int_result() Fail(%d) : number_id is invalid", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE id = %d AND datatype = %d ",
- id, CTSVC_DATA_URL);
+ id, CONTACTS_DATA_TYPE_URL);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
"FROM "CTS_TABLE_DATA", "CTSVC_DB_VIEW_CONTACT" "
"ON "CTS_TABLE_DATA".contact_id = "CTSVC_DB_VIEW_CONTACT".contact_id "
"WHERE datatype = %d AND is_my_profile=0 ",
- CTSVC_DATA_URL);
+ CONTACTS_DATA_TYPE_URL);
if (0 != limit) {
len += snprintf(query+len, sizeof(query)-len, " LIMIT %d", limit);
snprintf(query, sizeof(query),
"INSERT INTO "CTS_TABLE_DATA"(contact_id, is_my_profile, datatype, data1, data2, data3) "
"VALUES(%d, %d, %d, %d, ?, ?)",
- contact_id, is_my_profile, CTSVC_DATA_URL, url->type);
+ contact_id, is_my_profile, CONTACTS_DATA_TYPE_URL, url->type);
ret = ctsvc_query_prepare(query, &stmt);
RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
char query[CTS_SQL_MIN_LEN] = {0};
snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_DATA" WHERE id = %d AND datatype = %d",
- id, CTSVC_DATA_URL);
+ id, CONTACTS_DATA_TYPE_URL);
ret = ctsvc_query_exec(query);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_query_exec() Fail(%d)", ret);
#include "ctsvc_localize_utils.h"
#include "ctsvc_server_setting.h"
#include "ctsvc_notify.h"
+#include "ctsvc_utils_string.h"
#include "ctsvc_db_access_control.h"
#include "ctsvc_db_plugin_person_helper.h"
return len;
}
+static char* __ctsvc_db_make_search_keyword(const char *keyword)
+{
+ int size;
+ if (keyword == NULL)
+ return NULL;
+
+ size = strlen(keyword);
+ if (strstr(keyword, " ")) {
+ int i = 0;
+ int j = 0;
+ char search_keyword[size * 2+1];
+ for (i = 0; i < size; i++) {
+ if (0 < j && keyword[i] == ' ') {
+ if (search_keyword[j-1] != ' ')
+ search_keyword[j++] = '*';
+ }
+ search_keyword[j++] = keyword[i];
+ }
+ if (0 < j && search_keyword[j-1] != ' ')
+ search_keyword[j++] = '*';
+ search_keyword[j] = '\0';
+ return strdup(search_keyword);
+ } else {
+ char search_keyword[size+2];
+ snprintf(search_keyword, sizeof(search_keyword), "%s*", keyword);
+ return strdup(search_keyword);
+ }
+}
+
+static char *_get_search_query_for_name(const char *keyword)
+{
+ int ret = 0;
+ char *half_keyword = NULL;
+ int keyword_size = 0;
+ bool use_replaced_keyword = true;
+
+ ret = ctsvc_get_halfwidth_string(keyword, &half_keyword, &keyword_size);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("UChar converting error : ctsvc_get_halfwidth_string() Fail");
+ half_keyword = (char*)keyword;
+ use_replaced_keyword = false;
+ }
+
+ char *search_keyword = NULL;
+ search_keyword = __ctsvc_db_make_search_keyword(half_keyword);
+
+ char *normalized_name = NULL;
+ int lang = CTSVC_LANG_OTHERS;
+ lang = ctsvc_normalize_str(half_keyword, &normalized_name);
+ char *hiragana = NULL;
+ char *search_hiragana = NULL;
+
+ if (CTSVC_LANG_JAPANESE == lang) {
+ ctsvc_convert_japanese_to_hiragana(half_keyword, &hiragana);
+ search_hiragana = __ctsvc_db_make_search_keyword(hiragana);
+ }
+
+ int len_keyword = strlen(half_keyword);
+ int len_chosung= 0;
+ char *chosung = NULL;
+ char *korean_pattern = NULL;
+ char *search_chosung = NULL;
+ char *search_normalized = NULL;
+
+ char *mod_keyword = NULL;
+ switch (lang) {
+ case CTSVC_LANG_KOREAN: /* search with chosung */
+ /*
+ * If try to find '홍길동' by 'ㄱ동'
+ * search by 'ㄱㄷ' in search_index table
+ * intersect
+ * search by '*ㄱ*동*' in name_lookup table
+ */
+ chosung = calloc(len_keyword * 5, sizeof(char));
+ len_chosung = ctsvc_get_chosung(half_keyword, chosung, len_keyword * 5);
+ mod_keyword = __ctsvc_db_make_search_keyword(0 < len_chosung? chosung : half_keyword);
+ break;
+ case CTSVC_LANG_JAPANESE:
+ mod_keyword = search_hiragana;
+ break;
+ default:
+ if (CONTACTS_ERROR_NONE <= lang) { /* normalized string search */
+ search_normalized = __ctsvc_db_make_search_keyword(normalized_name);
+ mod_keyword = search_normalized;
+ } else { /* original keyword search */
+ mod_keyword = search_keyword;
+ }
+ break;
+ }
+
+ int temp_len = 0;
+ int query_size = CTS_SQL_MAX_LEN;
+ char *query = calloc(query_size, sizeof(char));
+ int len = 0;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT contact_id "
+ "FROM "CTS_TABLE_SEARCH_INDEX" WHERE "CTS_TABLE_SEARCH_INDEX" "
+ "MATCH 'name:");
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, mod_keyword);
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " '");
+ if (0 <= temp_len)
+ len += temp_len;
+
+
+ switch (lang) {
+ case CTSVC_LANG_KOREAN:
+ DBG("korean");
+ korean_pattern = calloc(len_keyword *5, sizeof(char));
+ ctsvc_get_korean_search_pattern(half_keyword, korean_pattern, len_keyword * 5);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " INTERSECT SELECT "
+ "contact_id FROM "CTS_TABLE_NAME_LOOKUP" WHERE name GLOB '*");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, korean_pattern);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "*' ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ free(chosung);
+ free(korean_pattern);
+ free(search_chosung);
+ break;
+ case CTSVC_LANG_JAPANESE:
+ break;
+ default:
+ DBG("default");
+ free(search_normalized);
+ break;
+ }
+
+ int i, j = 0;
+ char temp_str[len_keyword * 2 + 1];
+ for (i = 0; i < len_keyword; i++) {
+ if (half_keyword[i] == '\'' || half_keyword[i] == '_' ||
+ half_keyword[i] == '%' || half_keyword[i] == '\\') {
+ temp_str[j++] = CTSVC_DB_ESCAPE_CHAR;
+ }
+ temp_str[j++] = half_keyword[i];
+ }
+ temp_str[j] = '\0';
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION SELECT contact_id "
+ " FROM "CTS_TABLE_NAME_LOOKUP" WHERE name LIKE '%%");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_str);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ /* CTSVC_DB_ESCAPE_CHAR */
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\' ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ free(normalized_name);
+ free(hiragana);
+ free(search_hiragana);
+ free(search_keyword);
+
+ if (use_replaced_keyword)
+ free(half_keyword);
+
+ DBG("[%s]", query);
+ return strdup(query);
+}
+
+static char *_get_search_query_for_number(const char *keyword)
+{
+ int ret = 0;
+ char *half_keyword = NULL;
+ int keyword_size = 0;
+ bool use_replaced_keyword = true;
+
+ ret = ctsvc_get_halfwidth_string(keyword, &half_keyword, &keyword_size);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("UChar converting error : ctsvc_get_halfwidth_string() Fail");
+ half_keyword = (char*)keyword;
+ use_replaced_keyword = false;
+ }
+
+ char *search_keyword = NULL;
+ search_keyword = __ctsvc_db_make_search_keyword(half_keyword);
+
+ char *normalized_name = NULL;
+ int lang = CTSVC_LANG_OTHERS;
+ lang = ctsvc_normalize_str(half_keyword, &normalized_name);
+ char *hiragana = NULL;
+ char *search_hiragana = NULL;
+
+ if (CTSVC_LANG_JAPANESE == lang) {
+ ctsvc_convert_japanese_to_hiragana(half_keyword, &hiragana);
+ search_hiragana = __ctsvc_db_make_search_keyword(hiragana);
+ }
+
+ char *mod_keyword = NULL;
+ switch (lang) {
+ case CTSVC_LANG_JAPANESE:
+ mod_keyword = search_hiragana;
+ break;
+ default:
+ mod_keyword = search_keyword;
+ break;
+ }
+
+ int temp_len = 0;
+ int query_size = CTS_SQL_MAX_LEN;
+ char *query = calloc(query_size, sizeof(char));
+ int len = 0;
+
+ mod_keyword = search_hiragana ? search_hiragana : search_keyword;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT contact_id "
+ "FROM "CTS_TABLE_SEARCH_INDEX" WHERE "CTS_TABLE_SEARCH_INDEX" "
+ "MATCH 'number:");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, mod_keyword);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " '");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ free(hiragana);
+ free(search_hiragana);
+ free(search_keyword);
+
+
+
+ do {
+ int len_keyword = strlen(half_keyword);
+ char *clean_number = calloc(len_keyword + 1, sizeof(char));
+ int err = ctsvc_clean_number(half_keyword, clean_number, len_keyword + 1, false);
+ if (err <= 0) {
+ ERR("ctsvc_clean_number() Fail(%d)", err);
+ free(clean_number);
+ break;
+ }
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION SELECT contact_id "
+ "FROM "CTS_TABLE_PHONE_LOOKUP" WHERE number LIKE '%%");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, clean_number);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ const char *cc = ctsvc_get_network_cc(false);
+ if (cc && cc[0] == '7' && clean_number[0] == '8') { /* Russia */
+ char normal_num[strlen(clean_number)+1+5]; /* for cc */
+ int ret;
+ ret = ctsvc_normalize_number(clean_number, normal_num, sizeof(normal_num), false);
+ if (ret <= 0) {
+ free(clean_number);
+ break;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "OR number LIKE '%%");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, normal_num);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ free(clean_number);
+ } while (0);
+
+ if (use_replaced_keyword)
+ free(half_keyword);
+
+ DBG("[%s]", query);
+ return strdup(query);
+}
+
+static char *_get_search_query_for_data(const char *keyword)
+{
+ int ret = 0;
+ char *half_keyword = NULL;
+ int keyword_size = 0;
+ bool use_replaced_keyword = true;
+
+ ret = ctsvc_get_halfwidth_string(keyword, &half_keyword, &keyword_size);
+ if (CONTACTS_ERROR_NONE != ret) {
+ ERR("UChar converting error : ctsvc_get_halfwidth_string() Fail");
+ half_keyword = (char*)keyword;
+ use_replaced_keyword = false;
+ }
+
+ char *search_keyword = NULL;
+ search_keyword = __ctsvc_db_make_search_keyword(half_keyword);
+
+ char *normalized_name = NULL;
+ int lang = CTSVC_LANG_OTHERS;
+ lang = ctsvc_normalize_str(half_keyword, &normalized_name);
+ char *hiragana = NULL;
+ char *search_hiragana = NULL;
+
+ if (CTSVC_LANG_JAPANESE == lang) {
+ ctsvc_convert_japanese_to_hiragana(half_keyword, &hiragana);
+ search_hiragana = __ctsvc_db_make_search_keyword(hiragana);
+ }
+
+ int tmp_len = 0;
+ char *tmp_keyword = NULL;
+ int i;
+
+ char *mod_keyword = NULL;
+ switch (lang) {
+ case CTSVC_LANG_JAPANESE:
+ mod_keyword = search_hiragana;
+ break;
+ default:
+ /* replace '-' -> '_' because FTS does not support search '-' */
+ tmp_len = strlen(search_keyword);
+ tmp_keyword = calloc(tmp_len + 1, sizeof(char));
+ for (i = 0; i < tmp_len; i++)
+ tmp_keyword[i] = ('-' == search_keyword[i]) ? '_' : search_keyword[i];
+ tmp_keyword[i] = '\0';
+ mod_keyword = tmp_keyword;
+ break;
+ }
+
+
+ int temp_len = 0;
+ int query_size = CTS_SQL_MAX_LEN;
+ char *query = calloc(query_size, sizeof(char));
+ int len = 0;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT contact_id "
+ "FROM "CTS_TABLE_SEARCH_INDEX" WHERE "CTS_TABLE_SEARCH_INDEX" "
+ "MATCH 'data:");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, mod_keyword);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " '");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ free(hiragana);
+ free(search_hiragana);
+ free(search_keyword);
+ free(tmp_keyword);
+
+ if (use_replaced_keyword)
+ free(half_keyword);
+
+ DBG("[%s]", query);
+ return strdup(query);
+}
static inline void __db_create_str_condtion_number(
ctsvc_composite_filter_s *com_filter,
const property_info_s *properties, int ids_count,
unsigned int *projections,
int pro_count,
- char **projection)
+ char **projection,
+ bool is_snippet)
{
bool first;
int i;
const char *field_name = NULL;
char out_projection[CTS_SQL_MAX_LEN] = {0};
char temp[CTS_SQL_MAX_LEN] = {0};
+ bool is_data1 = false;
+ bool is_data2 = false;
len = 0;
first = true;
snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)",
ctsvc_get_sort_name_column());
field_name = temp;
+ } else if (projections[i] == CTSVC_PROPERTY_PERSON_SNIPPET_TYPE) {
+ snprintf(temp, sizeof(temp), "temp_data.datatype");
+ field_name = temp;
+ is_data1 = true;
+ } else if (projections[i] == CTSVC_PROPERTY_PERSON_SNIPPET_STRING) {
+ snprintf(temp, sizeof(temp), "(CASE "
+ "WHEN datatype=1 THEN (datatype || '@' || display_name) "
+ "ELSE (datatype || '@' || temp_data._data) END)");
+ field_name = temp;
+ is_data2 = true;
} else {
field_name = __ctsvc_db_get_property_field_name(properties, ids_count,
QUERY_PROJECTION, projections[i]);
snprintf(temp, sizeof(temp), "_NORMALIZE_INDEX_(%s)",
ctsvc_get_sort_name_column());
field_name = temp;
+ } else if (true == is_snippet &&
+ properties[i].property_id == CTSVC_PROPERTY_PERSON_SNIPPET_TYPE) {
+ snprintf(temp, sizeof(temp), "temp_data.datatype");
+ field_name = temp;
+ is_data1 = true;
+ } else if (true == is_snippet &&
+ properties[i].property_id == CTSVC_PROPERTY_PERSON_SNIPPET_STRING) {
+ snprintf(temp, sizeof(temp), "(CASE "
+ "WHEN datatype=1 THEN (datatype || '@' || display_name) "
+ "ELSE (datatype || '@' || temp_data._data) END)");
+ field_name = temp;
+ is_data2 = true;
} else {
field_name = ctsvc_get_display_column();
}
}
}
+ /* check extra data */
+ if (true == is_data1 || true == is_data2) {
+ snprintf(temp, sizeof(temp), "MIN(temp_data._priority) ");
+ field_name = temp;
+ if (first) {
+ len += snprintf(out_projection+len, sizeof(out_projection)-len, "%s",
+ field_name);
+ first = false;
+ } else {
+ len += snprintf(out_projection+len, sizeof(out_projection)-len, ", %s",
+ field_name);
+ }
+ }
+DBG("[%s]", out_projection);
+
*projection = strdup(out_projection);
return CONTACTS_ERROR_NONE;
}
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "Invalid view uri(%s)", s_query->view_uri);
ret = __db_create_projection(s_query->view_uri, s_query->properties,
- s_query->property_count,
- s_query->projection,
- s_query->projection_count,
- &projection);
+ s_query->property_count, s_query->projection, s_query->projection_count,
+ &projection, false);
if (CONTACTS_ERROR_NONE != ret) {
ERR("__db_create_projection() Fail(%d)", ret);
return ret;
char *projection;
const property_info_s *p = ctsvc_view_get_all_property_infos(view_uri, &count);
- ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection);
+ ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection, false);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__db_create_projection Fail(%d)", ret);
ret = __ctsvc_db_get_all_records_exec(view_uri, p, count, projection, offset, limit, out_list);
return ret;
}
-static inline bool __ctsvc_db_view_can_keyword_search(const char *view_uri)
+static bool __ctsvc_db_view_can_keyword_search(const char *view_uri, int *out_enum_uri)
{
RETV_IF(NULL == view_uri, false);
+ RETV_IF(NULL == out_enum_uri, false);
- if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_PERSON)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
- return true;
- }
- return false;
-}
+ int enum_uri = -1;
-static char* __ctsvc_db_make_search_keyword(const char *keyword)
-{
- int size;
- if (keyword == NULL)
- return NULL;
-
- size = strlen(keyword);
- if (strstr(keyword, " ")) {
- int i = 0;
- int j = 0;
- char search_keyword[size * 2+1];
- for (i = 0; i < size; i++) {
- if (0 < j && keyword[i] == ' ') {
- if (search_keyword[j-1] != ' ')
- search_keyword[j++] = '*';
- }
- search_keyword[j++] = keyword[i];
- }
- if (0 < j && search_keyword[j-1] != ' ')
- search_keyword[j++] = '*';
- search_keyword[j] = '\0';
- return strdup(search_keyword);
+ if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_PERSON)) {
+ enum_uri = CTSVC_ENUM_URI_PERSON;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED;
+ } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
+ enum_uri = CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED;
} else {
- char search_keyword[size+2];
- snprintf(search_keyword, sizeof(search_keyword), "%s*", keyword);
- return strdup(search_keyword);
+ ERR("Invalid uri[%s]", view_uri);
}
+
+ *out_enum_uri = enum_uri;
+
+ return (-1 == enum_uri) ? false : true;
}
/*
break;
}
if (need_union) {
- temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION");
+ temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION ");
if (0 <= temp_len)
len += temp_len;
}
- temp_len = SAFE_SNPRINTF(query, query_size, len, " SELECT contact_id "
+ temp_len = SAFE_SNPRINTF(query, query_size, len, "SELECT contact_id "
"FROM "CTS_TABLE_SEARCH_INDEX" WHERE "CTS_TABLE_SEARCH_INDEX" "
"MATCH 'data:");
if (0 <= temp_len)
break;
}
if (need_union) {
- temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION");
+ temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION ");
if (0 <= temp_len)
len += temp_len;
}
- temp_len = SAFE_SNPRINTF(query, query_size, len, " SELECT contact_id "
+ temp_len = SAFE_SNPRINTF(query, query_size, len, "SELECT contact_id "
"FROM "CTS_TABLE_SEARCH_INDEX" WHERE "CTS_TABLE_SEARCH_INDEX" "
"MATCH 'name:");
if (0 <= temp_len)
temp_str[j++] = half_keyword[i];
}
temp_str[j] = '\0';
- temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id"
- " FROM "CTS_TABLE_NAME_LOOKUP" WHERE name LIKE '");
+ temp_len = SAFE_SNPRINTF(query, query_size, len, " UNION SELECT contact_id "
+ "FROM "CTS_TABLE_NAME_LOOKUP" WHERE name LIKE '");
if (0 <= temp_len)
len += temp_len;
}
static int __ctsvc_db_search_records_exec(const char *view_uri,
+ int enum_uri,
const property_info_s *properties,
int ids_count,
const char *projection,
int offset,
int limit,
int range,
+ bool is_snippet,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
contacts_list_h *out_list)
{
char *query = NULL;
if (STRING_EQUAL == strcmp(keyword, "+"))
range &= ~CONTACTS_SEARCH_RANGE_NUMBER;
- if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
- || STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
+ if (0 == range) {
+ ERR("No range");
+ contacts_list_create(&list);
+ *out_list = list;
+ free(query);
+ return CONTACTS_ERROR_NONE;
+ }
+
+ switch (enum_uri) {
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED:
+
if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
free(query);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
- if (0 <= temp_len) len += temp_len;
+ if (0 <= temp_len)
+ len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
- if (0 <= temp_len) len += temp_len;
+ if (0 <= temp_len)
+ len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
- if (0 <= temp_len) len += temp_len;
+ if (0 <= temp_len)
+ len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
- if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE contact_id IN ");
- if (0 <= temp_len) len += temp_len;
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " as temp_contacts");
+ if (0 <= temp_len)
+ len += temp_len;
+ break;
- temp_len = __db_append_search_query(keyword, &query, &query_size, len, range);
- if (0 <= temp_len) len = temp_len;
- } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)) {
- bool need_or = false;
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER:
if (range & CONTACTS_SEARCH_RANGE_DATA || range & CONTACTS_SEARCH_RANGE_EMAIL) {
+ ERR("Invalid range");
free(query);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
+ bool need_or = false;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
if (0 <= temp_len) len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (");
- if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT * FROM ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (SELECT * FROM ");
if (0 <= temp_len) len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
- if (0 <= temp_len) len += temp_len;
if ((range & CONTACTS_SEARCH_RANGE_NUMBER) && ctsvc_is_phonenumber(keyword)) {
char clean_num[strlen(keyword)+1+5]; /* for cc */
* If contact has 010 1234 5678 (normalized number is +cc 10 1234 5678),
* then the contact should be searched by keyword +cc 10 1234 5678
*/
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
+ if (0 <= temp_len)
+ len += temp_len;
+
ret = ctsvc_clean_number(keyword, clean_num, sizeof(clean_num), false);
if (0 < ret) {
const char *cc = ctsvc_get_network_cc(false);
- temp_len = SAFE_SNPRINTF(&query, &query_size, len,
- "(normalized_number LIKE '%%");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "(normalized_number LIKE '%%");
if (0 <= temp_len)
len += temp_len;
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len,
- "%%' OR cleaned_number LIKE '%%");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' OR cleaned_number LIKE '%%");
if (0 <= temp_len)
len += temp_len;
return CONTACTS_ERROR_OUT_OF_MEMORY;
}
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT * FROM ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "(SELECT * FROM ");
if (0 <= temp_len)
len += temp_len;
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\'");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\')");
if (0 <= temp_len)
len += temp_len;
free(temp_keyword);
if (range & CONTACTS_SEARCH_RANGE_NAME) {
if (need_or) {
temp_len = SAFE_SNPRINTF(&query, &query_size, len, " OR ");
- if (0 <= temp_len) len += temp_len;
+ } else {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE ");
}
- snprintf(temp_query, sizeof(temp_query),
- "person_id IN (SELECT person_id "
- "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND contact_id ");
+ if (0 <= temp_len)
+ len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "person_id IN (SELECT "
+ "person_id FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND contact_id IN");
if (0 <= temp_len)
len += temp_len;
* FTS can support to serach with multiple words
* If contact display_name is 'abc def', then the contact should be searched by 'def'
*/
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " IN ");
+ temp_len = __db_append_search_query(keyword, &query, &query_size, len,
+ CONTACTS_SEARCH_RANGE_NAME);
+ if (0 <= temp_len)
+ len = temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") as temp_contacts");
+ if (0 <= temp_len)
+ len += temp_len;
+ break;
+
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL:
+ if (range & CONTACTS_SEARCH_RANGE_NUMBER || range & CONTACTS_SEARCH_RANGE_DATA) {
+ free(query);
+ return CONTACTS_ERROR_INVALID_PARAMETER;
+ }
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
+ /* search contact which has email address started with keyword */
+ char *temp_keyword = __db_get_str_with_escape((char*)keyword,
+ strlen(keyword), true);
+ if (NULL == temp_keyword) {
+ ERR("__db_get_str_with_escape() Fail");
+ free(query);
+ return CONTACTS_ERROR_OUT_OF_MEMORY;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT * FROM ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE (email LIKE '");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_keyword);
if (0 <= temp_len)
len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\')");
+ if (0 <= temp_len)
+ len += temp_len;
+ free(temp_keyword);
+ need_or = true;
+ }
+
+ if (range & CONTACTS_SEARCH_RANGE_NAME) {
+ if (need_or) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " OR ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ snprintf(temp_query, sizeof(temp_query), "person_id IN (SELECT person_id "
+ "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND contact_id ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " IN ");
+ if (0 <= temp_len)
+ len += temp_len;
temp_len = __db_append_search_query(keyword, &query, &query_size, len,
CONTACTS_SEARCH_RANGE_NAME);
if (0 <= temp_len)
len = temp_len;
-
temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
if (0 <= temp_len)
len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
if (0 <= temp_len)
len += temp_len;
- } else if (STRING_EQUAL == strcmp(view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
- bool need_or = false;
- if (range & CONTACTS_SEARCH_RANGE_NUMBER || range & CONTACTS_SEARCH_RANGE_DATA) {
+ break;
+
+ case CTSVC_ENUM_URI_PERSON:
+ if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
free(query);
return CONTACTS_ERROR_INVALID_PARAMETER;
}
-
temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
if (0 <= temp_len)
len += temp_len;
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM (");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
if (0 <= temp_len)
len += temp_len;
- if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
- /* search contact which has email address started with keyword */
- char *temp_keyword = __db_get_str_with_escape((char*)keyword,
- strlen(keyword), true);
- if (NULL == temp_keyword) {
- ERR("__db_get_str_with_escape() Fail");
- free(query);
- return CONTACTS_ERROR_OUT_OF_MEMORY;
- }
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT * FROM ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+
+ if (true == is_snippet) {
+ bool need_union = false;
+ char cond_data[CTS_SQL_MAX_LEN] = {0};
+ char clean_number[SAFE_STRLEN(keyword) + 1];
+ ctsvc_clean_number(keyword, clean_number, sizeof(clean_number), false);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", (SELECT contact_id temp_contact_id, "
+ "datatype, _priority, _data FROM (");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ if (range & CONTACTS_SEARCH_RANGE_NAME) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT contact_id, "
+ "datatype, 1 as _priority, 'a' as _data FROM "CTS_TABLE_DATA" "
+ "WHERE contact_id IN (");
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+ char *query_name = _get_search_query_for_name(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_name);
if (0 <= temp_len)
len += temp_len;
+ free(query_name);
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE (email LIKE '");
+ /* datatype=1 NAME */
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND datatype=1 ");
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_keyword);
+ need_union = true;
+ }
+ if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
+ if (true == need_union) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT contact_id, "
+ "datatype, 2 as _priority, data3 as _data FROM "CTS_TABLE_DATA" "
+ "WHERE contact_id IN (");
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, "%%' ESCAPE '\\')");
+ char *query_number = _get_search_query_for_number(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_number);
if (0 <= temp_len)
len += temp_len;
- free(temp_keyword);
- need_or = true;
- }
+ free(query_number);
- if (range & CONTACTS_SEARCH_RANGE_NAME) {
- if (need_or) {
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " OR ");
+ /* datatype=8 NUMBER */
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND datatype=8 ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ need_union = true;
+ }
+ if (range & CONTACTS_SEARCH_RANGE_DATA) {
+ if (true == need_union) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
if (0 <= temp_len)
len += temp_len;
}
+ snprintf(cond_data, sizeof(cond_data), "SELECT contact_id, datatype, "
+ "(CASE "
+ "WHEN datatype=%d THEN 5 " /* POSTAL */
+ "WHEN datatype=%d THEN 8 " /* MESSENGER */
+ "WHEN datatype=%d THEN 4 " /* COMPANY */
+ "WHEN datatype=%d THEN 3 " /* NICKNAME */
+ "WHEN datatype=%d THEN 6 " /* EMAIL */
+ "WHEN datatype=%d THEN 9 " /* RELATIONSHIP */
+ "WHEN datatype=%d THEN 7 " /* NOTE */
+ "END) as _priority, "
+ "(CASE "
+ "WHEN datatype=%d THEN (COALESCE(data5||' ','')||"
+ "COALESCE(data6||' ','')||COALESCE(data7||' ','')||"
+ "COALESCE(data8||' ','')||COALESCE(data9,'')) " /* POSTAL */
+ "WHEN datatype=%d THEN data3 " /* MESSENGER */
+ "WHEN datatype=%d THEN (COALESCE(data3||' ','')||"
+ "COALESCE(data4||' ','')||COALESCE(data5||' ','')||"
+ "COALESCE(data6||' ','')||COALESCE(data7||' ','')||"
+ "COALESCE(data8||' ','')||COALESCE(data9||' ','')||"
+ "COALESCE(data10||' ','')||COALESCE(data11||' ','')) " /* COMPANY */
+ "WHEN datatype=%d THEN data3 " /* NICKNAME */
+ "WHEN datatype=%d THEN data3 " /* EMAIL */
+ "WHEN datatype=%d THEN data3 " /* RELATIONSHIP */
+ "WHEN datatype=%d THEN data3 " /* NOTE */
+ "END) as _data FROM "CTS_TABLE_DATA" WHERE contact_id IN (",
+ CONTACTS_DATA_TYPE_POSTAL, CONTACTS_DATA_TYPE_MESSENGER, CONTACTS_DATA_TYPE_COMPANY,
+ CONTACTS_DATA_TYPE_NICKNAME, CONTACTS_DATA_TYPE_EMAIL, CONTACTS_DATA_TYPE_RELATIONSHIP,
+ CONTACTS_DATA_TYPE_NOTE, CONTACTS_DATA_TYPE_POSTAL, CONTACTS_DATA_TYPE_MESSENGER,
+ CONTACTS_DATA_TYPE_COMPANY, CONTACTS_DATA_TYPE_NICKNAME, CONTACTS_DATA_TYPE_EMAIL,
+ CONTACTS_DATA_TYPE_RELATIONSHIP, CONTACTS_DATA_TYPE_NOTE);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, cond_data);
+ if (0 <= temp_len)
+ len += temp_len;
- snprintf(temp_query, sizeof(temp_query),
- "person_id IN (SELECT person_id "
- "FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND contact_id ");
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
- if (0 <= temp_len) len += temp_len;
+ char *query_data = _get_search_query_for_data(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_data);
+ if (0 <= temp_len)
+ len += temp_len;
+ free(query_data);
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " IN ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND _data IS NOT NULL "
+ "AND _data LIKE ('%%' || '");
if (0 <= temp_len)
len += temp_len;
- temp_len = __db_append_search_query(keyword, &query, &query_size, len,
- CONTACTS_SEARCH_RANGE_NAME);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, keyword);
if (0 <= temp_len)
- len = temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "' || '%%') ");
if (0 <= temp_len)
len += temp_len;
}
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ")) as temp_data ON "
+ "temp_data.temp_contact_id = temp_contacts.contact_id ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
- if (0 <= temp_len) len += temp_len;
- } else { /* CTSVC_VIEW_URI_PERSON */
- if (range & CONTACTS_SEARCH_RANGE_EMAIL) {
- free(query);
- return CONTACTS_ERROR_INVALID_PARAMETER;
- }
+ switch (enum_uri) {
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED:
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE temp_contacts.contact_id IN ");
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = __db_append_search_query(keyword, &query, &query_size, len, range);
+ if (0 <= temp_len)
+ len = temp_len;
+ break;
- snprintf(temp_query, sizeof(temp_query), "SELECT %s FROM %s, "
- "(SELECT person_id person_id_in_contact, addressbook_id "
- "FROM "CTS_TABLE_CONTACTS " "
- "WHERE deleted = 0 AND contact_id IN ",
- projection, table);
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, temp_query);
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER:
+ break;
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL:
+ break;
+ case CTSVC_ENUM_URI_PERSON:
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", (SELECT contact_id, person_id "
+ "person_id_in_contact, addressbook_id FROM "CTS_TABLE_CONTACTS" "
+ "WHERE deleted = 0 AND contact_id IN ");
if (0 <= temp_len)
len += temp_len;
".person_id = temp_contacts.person_id_in_contact");
if (0 <= temp_len)
len += temp_len;
+ break;
}
if (__ctsvc_db_view_has_display_name(view_uri, properties, ids_count))
sortkey = ctsvc_get_sort_column();
+ if (true == is_snippet) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " GROUP BY temp_data.temp_contact_id");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+
if (sortkey) {
len = __ctsvc_db_search_records_append_sort(view_uri, sortkey, keyword, len,
&query, &query_size);
for (i = 0; i < ids_count; i++)
project[i] = properties[i].property_id;
- int ret = ctsvc_db_person_create_record_from_stmt_with_projection(stmt,
- project, ids_count, &record);
+ int ret = ctsvc_db_person_create_record_from_stmt_with_projection(stmt, project,
+ ids_count, is_snippet, keyword, start_match, end_match, token_number, &record);
free(project);
for (i = 0; i < ids_count; i++) {
type = (properties[i].property_id & CTSVC_VIEW_DATA_TYPE_MASK);
- if (type == CTSVC_VIEW_DATA_TYPE_INT) {
+ char *temp = NULL;
+ switch (type) {
+ case CTSVC_VIEW_DATA_TYPE_INT:
ctsvc_record_set_int(record, properties[i].property_id,
ctsvc_stmt_get_int(stmt, i));
- } else if (type == CTSVC_VIEW_DATA_TYPE_STR) {
- ctsvc_record_set_str(record, properties[i].property_id,
- ctsvc_stmt_get_text(stmt, i));
- } else if (type == CTSVC_VIEW_DATA_TYPE_BOOL) {
+ break;
+ case CTSVC_VIEW_DATA_TYPE_STR:
+ temp = ctsvc_stmt_get_text(stmt, i);
+ if (CTSVC_PROPERTY_PERSON_SNIPPET_STRING == properties[i].property_id) {
+ temp = ctsvc_utils_get_modified_str(temp, is_snippet, keyword,
+ start_match, end_match, token_number);
+ }
+ ctsvc_record_set_str(record, properties[i].property_id, temp);
+ break;
+ case CTSVC_VIEW_DATA_TYPE_BOOL:
ctsvc_record_set_bool(record, properties[i].property_id,
(ctsvc_stmt_get_int(stmt, i) ? true : false));
- } else if (type == CTSVC_VIEW_DATA_TYPE_LLI) {
+ break;
+ case CTSVC_VIEW_DATA_TYPE_LLI:
ctsvc_record_set_lli(record, properties[i].property_id,
ctsvc_stmt_get_int64(stmt, i));
- } else if (type == CTSVC_VIEW_DATA_TYPE_DOUBLE) {
+ break;
+ case CTSVC_VIEW_DATA_TYPE_DOUBLE:
ctsvc_record_set_double(record, properties[i].property_id,
ctsvc_stmt_get_dbl(stmt, i));
- } else {
+ break;
+ default:
ERR("unknown type (%d)", type);
+ break;
}
}
}
return CONTACTS_ERROR_NONE;
}
-static int __ctsvc_db_search_records(const char *view_uri, const char *keyword,
- int offset, int limit, contacts_list_h *out_list)
+static int __ctsvc_db_search_records(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ bool is_snippet,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
{
int ret;
unsigned int count;
char *projection;
const property_info_s *p;
bool can_keyword_search = false;
+ int enum_uri = 0;
int range = CONTACTS_SEARCH_RANGE_NAME | CONTACTS_SEARCH_RANGE_NUMBER | CONTACTS_SEARCH_RANGE_DATA;
RETV_IF(NULL == keyword, CONTACTS_ERROR_INVALID_PARAMETER);
- can_keyword_search = __ctsvc_db_view_can_keyword_search(view_uri);
+ can_keyword_search = __ctsvc_db_view_can_keyword_search(view_uri, &enum_uri);
RETVM_IF(false == can_keyword_search, CONTACTS_ERROR_INVALID_PARAMETER,
"can not keyword search");
p = ctsvc_view_get_all_property_infos(view_uri, &count);
- ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection);
+ ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection, is_snippet);
if (CONTACTS_ERROR_NONE != ret) {
ERR("__db_create_projection() Fail(%d)", ret);
return ret;
}
- ret = __ctsvc_db_search_records_exec(view_uri, p, count, projection, keyword, offset,
- limit, range, out_list);
+ ret = __ctsvc_db_search_records_exec(view_uri, enum_uri, p, count, projection,
+ keyword, offset, limit, range, is_snippet, start_match, end_match, token_number, out_list);
free(projection);
return ret;
}
-static int __ctsvc_db_search_records_with_range(const char *view_uri, const char *keyword,
- int offset, int limit, int range, contacts_list_h *out_list)
+static int __ctsvc_db_search_records_with_range(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ bool is_snippet,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
{
int ret;
unsigned int count;
char *projection;
const property_info_s *p;
bool can_keyword_search = false;
+ int eunm_uri = 0;
RETV_IF(NULL == keyword, CONTACTS_ERROR_INVALID_PARAMETER);
- can_keyword_search = __ctsvc_db_view_can_keyword_search(view_uri);
+ can_keyword_search = __ctsvc_db_view_can_keyword_search(view_uri, &eunm_uri);
RETV_IF(false == can_keyword_search, CONTACTS_ERROR_INVALID_PARAMETER);
p = ctsvc_view_get_all_property_infos(view_uri, &count);
- ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection);
+ ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection, is_snippet);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__db_create_projection() Fail(%d)", ret);
- ret = __ctsvc_db_search_records_exec(view_uri, p, count, projection, keyword, offset,
- limit, range, out_list);
+ ret = __ctsvc_db_search_records_exec(view_uri, eunm_uri, p, count, projection,
+ keyword, offset, limit, range, is_snippet, start_match, end_match, token_number, out_list);
free(projection);
return ret;
}
static inline int __ctsvc_db_search_records_with_query_exec(ctsvc_query_s *s_query,
+ int enum_uri,
const char *projection,
const char *condition,
GSList *bind,
const char *keyword,
int offset,
int limit,
+ bool is_snippet,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
contacts_list_h *out_list)
{
char *query = NULL;
len = 0;
- if (s_query->distinct)
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT DISTINCT ");
- else
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
- if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
- if (0 <= temp_len) len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
- if (0 <= temp_len) len += temp_len;
-
- if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_CONTACT)
- || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP)
- || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_ASSIGNED)
- || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED)) {
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
- if (0 <= temp_len)
- len += temp_len;
-
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE person_id IN ");
- if (0 <= temp_len)
- len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT ");
+ if (0 <= temp_len)
+ len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ( SELECT person_id FROM ");
+ if (s_query->distinct) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "DISTINCT ");
if (0 <= temp_len)
len += temp_len;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, projection);
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " FROM ");
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+ if (0 <= temp_len)
+ len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTS_TABLE_CONTACTS);
+ switch (enum_uri) {
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED:
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " temp_contacts ");
if (0 <= temp_len)
len += temp_len;
+ break;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len,
- " WHERE deleted = 0 AND contact_id IN ");
- if (0 <= temp_len)
- len += temp_len;
+ case CTSVC_ENUM_URI_PERSON:
+ break;
- person_contact_query = true;
- } else if (STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_NUMBER)
- || STRING_EQUAL == strcmp(s_query->view_uri, CTSVC_VIEW_URI_READ_ONLY_PERSON_EMAIL)) {
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL:
+ default:
free(query);
return CONTACTS_ERROR_INVALID_PARAMETER;
- } else { /* CTSVC_VIEW_URI_PERSON */
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
+ }
+
+ if (true == is_snippet) {
+ bool need_union = false;
+ char cond_data[CTS_SQL_MAX_LEN] = {0};
+ char clean_number[SAFE_STRLEN(keyword) + 1];
+ ctsvc_clean_number(keyword, clean_number, sizeof(clean_number), false);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", (SELECT contact_id temp_contact_id, "
+ "datatype, _priority, _data FROM (");
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", "
- "(SELECT contact_id, person_id person_id_in_contact, addressbook_id FROM ");
+ if (range & CONTACTS_SEARCH_RANGE_NAME) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT contact_id, "
+ "datatype, 1 as _priority, 'a' as _data FROM "CTS_TABLE_DATA" "
+ "WHERE contact_id IN (");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ char *query_name = _get_search_query_for_name(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_name);
+ if (0 <= temp_len)
+ len += temp_len;
+ free(query_name);
+
+ /* datatype=1 NAME */
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND datatype=1 ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ need_union = true;
+ }
+ if (range & CONTACTS_SEARCH_RANGE_NUMBER) {
+ if (true == need_union) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "SELECT contact_id, "
+ "datatype, 2 as _priority, data3 as _data FROM "CTS_TABLE_DATA" "
+ "WHERE contact_id IN (");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ char *query_number = _get_search_query_for_number(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_number);
+ if (0 <= temp_len)
+ len += temp_len;
+ free(query_number);
+
+ /* datatype=8 NUMBER */
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND datatype=8 ");
+ if (0 <= temp_len)
+ len += temp_len;
+
+ need_union = true;
+ }
+ if (range & CONTACTS_SEARCH_RANGE_DATA) {
+ if (true == need_union) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " UNION ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ snprintf(cond_data, sizeof(cond_data), "SELECT contact_id, datatype, "
+ "(CASE "
+ "WHEN datatype=%d THEN 5 " /* POSTAL */
+ "WHEN datatype=%d THEN 8 " /* MESSENGER */
+ "WHEN datatype=%d THEN 4 " /* COMPANY */
+ "WHEN datatype=%d THEN 3 " /* NICKNAME */
+ "WHEN datatype=%d THEN 6 " /* EMAIL */
+ "WHEN datatype=%d THEN 9 " /* RELATIONSHIP */
+ "WHEN datatype=%d THEN 7 " /* NOTE */
+ "END) as _priority, "
+ "(CASE "
+ "WHEN datatype=%d THEN (COALESCE(data5||' ','')||"
+ "COALESCE(data6||' ','')||COALESCE(data7||' ','')||"
+ "COALESCE(data8||' ','')||COALESCE(data9,'')) " /* POSTAL */
+ "WHEN datatype=%d THEN data3 " /* MESSENGER */
+ "WHEN datatype=%d THEN (COALESCE(data3||' ','')||"
+ "COALESCE(data4||' ','')||COALESCE(data5||' ','')||"
+ "COALESCE(data6||' ','')||COALESCE(data7||' ','')||"
+ "COALESCE(data8||' ','')||COALESCE(data9||' ','')||"
+ "COALESCE(data10||' ','')||COALESCE(data11||' ','')) " /* COMPANY */
+ "WHEN datatype=%d THEN data3 " /* NICKNAME */
+ "WHEN datatype=%d THEN data3 " /* EMAIL */
+ "WHEN datatype=%d THEN data3 " /* RELATIONSHIP */
+ "WHEN datatype=%d THEN data3 " /* NOTE */
+ "END) as _data FROM "CTS_TABLE_DATA" WHERE contact_id IN (",
+ CONTACTS_DATA_TYPE_POSTAL, CONTACTS_DATA_TYPE_MESSENGER, CONTACTS_DATA_TYPE_COMPANY,
+ CONTACTS_DATA_TYPE_NICKNAME, CONTACTS_DATA_TYPE_EMAIL, CONTACTS_DATA_TYPE_RELATIONSHIP,
+ CONTACTS_DATA_TYPE_NOTE, CONTACTS_DATA_TYPE_POSTAL, CONTACTS_DATA_TYPE_MESSENGER,
+ CONTACTS_DATA_TYPE_COMPANY, CONTACTS_DATA_TYPE_NICKNAME, CONTACTS_DATA_TYPE_EMAIL,
+ CONTACTS_DATA_TYPE_RELATIONSHIP, CONTACTS_DATA_TYPE_NOTE);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, cond_data);
+ if (0 <= temp_len)
+ len += temp_len;
+
+ char *query_data = _get_search_query_for_data(keyword);
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, query_data);
+ if (0 <= temp_len)
+ len += temp_len;
+ free(query_data);
+
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") AND _data IS NOT NULL "
+ "AND _data LIKE ('%%' || '");
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, keyword);
+ if (0 <= temp_len)
+ len += temp_len;
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, "' || '%%') ");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ")) as temp_data ON "
+ "temp_data.temp_contact_id = temp_contacts.contact_id ");
if (0 <= temp_len)
len += temp_len;
+ }
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, CTS_TABLE_CONTACTS);
+ switch (enum_uri) {
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_CONTACT:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_ASSIGNED:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_GROUP_NOT_ASSIGNED:
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " WHERE temp_contacts.person_id IN (SELECT "
+ "person_id FROM "CTS_TABLE_CONTACTS" WHERE deleted = 0 AND temp_contacts.contact_id IN ");
if (0 <= temp_len)
len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len,
- " WHERE deleted = 0) temp_contacts ON ");
+ person_contact_query = true;
+ break;
+
+ case CTSVC_ENUM_URI_PERSON:
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ", (SELECT contact_id, "
+ "person_id person_id_in_contact, addressbook_id FROM "CTS_TABLE_CONTACTS" "
+ "WHERE deleted = 0) temp_contacts ON ");
if (0 <= temp_len)
len += temp_len;
".person_id = temp_contacts.person_id_in_contact WHERE temp_contacts.contact_id IN ");
if (0 <= temp_len)
len += temp_len;
+ break;
+
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_NUMBER:
+ case CTSVC_ENUM_URI_READ_ONLY_PERSON_EMAIL:
+ default:
+ return CONTACTS_ERROR_INVALID_PARAMETER;
}
temp_len = __db_append_search_query(keyword, &query, &query_size, len, range);
len = temp_len;
if (person_contact_query) {
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " ) ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, ") ");
if (0 <= temp_len)
len += temp_len;
}
if (condition && *condition) {
if (person_contact_query) {
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " AND contact_id IN (");
- if (0 <= temp_len)
- len += temp_len;
- temp_len = SAFE_SNPRINTF(&query, &query_size, len, " SELECT contact_id FROM ");
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " AND contact_id IN "
+ "(SELECT contact_id FROM ");
if (0 <= temp_len)
len += temp_len;
temp_len = SAFE_SNPRINTF(&query, &query_size, len, table);
len += temp_len;
}
+ if (true == is_snippet) {
+ temp_len = SAFE_SNPRINTF(&query, &query_size, len, " GROUP BY temp_data.temp_contact_id");
+ if (0 <= temp_len)
+ len += temp_len;
+ }
+
if (__ctsvc_db_view_has_display_name(s_query->view_uri, s_query->properties, s_query->property_count))
sortkey = ctsvc_get_sort_column();
} while (0);
ret = ctsvc_query_prepare(query, &stmt);
+ if (NULL == stmt) {
+ ERR("ctsvc_query_prepare() Fail(%d)[%s]", ret, query);
+ free(query);
+ return ret;
+ }
free(query);
- RETVM_IF(NULL == stmt, ret, "ctsvc_query_prepare() Fail(%d)", ret);
i = 1;
len = g_slist_length(bind);
}
ret = ctsvc_db_person_create_record_from_stmt_with_projection(stmt, project,
- ids_count, &record);
+ ids_count, is_snippet, keyword, start_match, end_match, token_number, &record);
if (CONTACTS_ERROR_NONE != ret)
ERR("ctsvc_db_person_create_record_from_stmt_with_projection() Fail(%d)", ret);
type = __ctsvc_db_get_property_type(s_query->properties,
s_query->property_count, property_id);
- if (type == CTSVC_VIEW_DATA_TYPE_INT)
+
+ char *temp = NULL;
+ switch (type) {
+ case CTSVC_VIEW_DATA_TYPE_INT:
ctsvc_record_set_int(record, property_id, ctsvc_stmt_get_int(stmt, i));
- else if (type == CTSVC_VIEW_DATA_TYPE_STR)
- ctsvc_record_set_str(record, property_id, ctsvc_stmt_get_text(stmt, i));
- else if (type == CTSVC_VIEW_DATA_TYPE_BOOL)
+ break;
+ case CTSVC_VIEW_DATA_TYPE_STR:
+ temp = ctsvc_stmt_get_text(stmt, i);
+ if (CTSVC_PROPERTY_PERSON_SNIPPET_STRING == property_id) {
+ temp = ctsvc_utils_get_modified_str(temp, is_snippet, keyword,
+ start_match, end_match, token_number);
+ }
+ ctsvc_record_set_str(record, property_id, temp);
+ break;
+ case CTSVC_VIEW_DATA_TYPE_BOOL:
ctsvc_record_set_bool(record, property_id, (ctsvc_stmt_get_int(stmt, i) ? true : false));
- else if (type == CTSVC_VIEW_DATA_TYPE_LLI)
+ break;
+ case CTSVC_VIEW_DATA_TYPE_LLI:
ctsvc_record_set_lli(record, property_id, ctsvc_stmt_get_int64(stmt, i));
- else if (type == CTSVC_VIEW_DATA_TYPE_DOUBLE)
+ break;
+ case CTSVC_VIEW_DATA_TYPE_DOUBLE:
ctsvc_record_set_double(record, property_id, ctsvc_stmt_get_dbl(stmt, i));
- else
+ break;
+ default:
ERR("unknown type (%d)", type);
+ break;
+ }
}
}
ctsvc_list_prepend(list, record);
return CONTACTS_ERROR_NONE;
}
-static int __ctsvc_db_search_records_with_query(contacts_query_h query, const char *keyword,
- int offset, int limit, contacts_list_h *out_list)
+static int __ctsvc_db_search_records_with_query(contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ bool is_snippet,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
{
int ret;
char *condition = NULL;
GSList *bind_text = NULL;
GSList *cursor = NULL;
bool can_keyword_search;
+ int enum_uri = 0;
RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
RETV_IF(NULL == keyword, CONTACTS_ERROR_INVALID_PARAMETER);
- can_keyword_search = __ctsvc_db_view_can_keyword_search(s_query->view_uri);
+ can_keyword_search = __ctsvc_db_view_can_keyword_search(s_query->view_uri, &enum_uri);
RETV_IF(false == can_keyword_search, CONTACTS_ERROR_INVALID_PARAMETER);
ret = __db_create_projection(s_query->view_uri, s_query->properties,
- s_query->property_count,
- s_query->projection,
- s_query->projection_count,
- &projection);
+ s_query->property_count, s_query->projection, s_query->projection_count,
+ &projection, is_snippet);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__db_create_projection Fail(%d)", ret);
if (s_query->filter) {
}
}
- ret = __ctsvc_db_search_records_with_query_exec(s_query, projection, condition,
- bind_text, keyword, offset, limit, out_list);
+ ret = __ctsvc_db_search_records_with_query_exec(s_query, enum_uri, projection, condition,
+ bind_text, keyword, offset, limit, is_snippet, start_match, end_match, token_number, out_list);
if (CONTACTS_ERROR_NONE != ret) {
ERR("__ctsvc_db_search_records_with_query_exec Fail(%d)", ret);
for (cursor = bind_text; cursor; cursor = cursor->next)
char *projection;
const property_info_s *p = ctsvc_view_get_all_property_infos(view_uri, &count);
- ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection);
+ ret = __db_create_projection(view_uri, p, count, NULL, 0, &projection, false);
RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__db_create_projection Fail(%d)", ret);
__ctsvc_db_get_count_exec(view_uri, p, count, projection, out_count);
}
ret = __db_create_projection(s_query->view_uri, s_query->properties,
- s_query->property_count,
- s_query->projection,
- s_query->projection_count,
- &projection);
+ s_query->property_count, s_query->projection, s_query->projection_count,
+ &projection, false);
if (CONTACTS_ERROR_NONE != ret) {
ERR("__db_create_projection() Fail(%d)", ret);
for (cursor = bind_text; cursor; cursor = cursor->next)
*out_list = NULL;
RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
- return __ctsvc_db_search_records(view_uri, keyword, offset, limit, out_list);
+ return __ctsvc_db_search_records(view_uri, keyword, offset, limit, false, NULL,
+ NULL, -1, out_list);
}
int ctsvc_db_search_records_with_range(const char *view_uri, const char *keyword,
RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
return __ctsvc_db_search_records_with_range(view_uri, keyword, offset, limit, range,
- out_list);
+ false, NULL, NULL, -1, out_list);
}
int ctsvc_db_search_records_with_query(contacts_query_h query, const char *keyword,
*out_list = NULL;
RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
- return __ctsvc_db_search_records_with_query(query, keyword, offset, limit, out_list);
+ return __ctsvc_db_search_records_with_query(query, keyword, offset, limit, false,
+ NULL, NULL, -1, out_list);
+}
+
+int ctsvc_db_search_records_for_snippet(const char *view_uri, const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+ RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ return __ctsvc_db_search_records(view_uri, keyword, offset, limit, true, start_match,
+ end_match, token_number, out_list);
+}
+
+int ctsvc_db_search_records_with_range_for_snippet(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+ RETV_IF(range == 0, CONTACTS_ERROR_INVALID_PARAMETER);
+ RETV_IF(NULL == view_uri, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ return __ctsvc_db_search_records_with_range(view_uri, keyword, offset, limit, range,
+ true, start_match, end_match, token_number, out_list);
+}
+
+int ctsvc_db_search_records_with_query_for_snippet(contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list)
+{
+ RETV_IF(NULL == out_list, CONTACTS_ERROR_INVALID_PARAMETER);
+ *out_list = NULL;
+ RETV_IF(NULL == query, CONTACTS_ERROR_INVALID_PARAMETER);
+
+ return __ctsvc_db_search_records_with_query(query, keyword, offset, limit, true,
+ start_match, end_match, token_number, out_list);
}
int ctsvc_db_get_count(const char *view_uri, int *out_count)
int offset, int limit, int range, contacts_list_h *out_list);
int ctsvc_db_search_records_with_query(contacts_query_h query, const char *keyword,
int offset, int limit, contacts_list_h *out_list);
+int ctsvc_db_search_records_for_snippet(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
+int ctsvc_db_search_records_with_range_for_snippet(const char *view_uri,
+ const char *keyword,
+ int offset,
+ int limit,
+ int range,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
+int ctsvc_db_search_records_with_query_for_snippet(contacts_query_h query,
+ const char *keyword,
+ int offset,
+ int limit,
+ const char *start_match,
+ const char *end_match,
+ int token_number,
+ contacts_list_h *out_list);
int ctsvc_db_get_status(contacts_db_status_e *status);
int ctsvc_db_insert_records_with_vcard(const char *vcard_stream, int **record_id_array,
int *count);
#include "test_main.h"
#include "test_debug.h"
+#include "test_query.h"
int _print_errors(int argc, char **argv)
{
static const func _func[] = {
_print_errors,
+ test_query,
};
bool test_main_is_selected(int argc, char **argv, int depth, const func test_func[], int count)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <contacts.h>
-
-#include "test_main.h"
+#include "contacts.h"
#include "test_debug.h"
+#include "test_main.h"
+#include "test_utils.h"
+
+#define TEST_CONTACT_COUNT 2
+
+enum {
+ TEST_URI_PERSON_CONTACT,
+ TEST_URI_PERSON_GROUPREL,
+ TEST_URI_PERSON_GROUP_ASSIGNED,
+ TEST_URI_PERSON_GROUP_NOT_ASSIGNED,
+ TEST_URI_PERSON_NUMBER,
+ TEST_URI_PERSON_EMAIL,
+ TEST_URI_PERSON,
+};
-int test_query_person_contact(int argc, char **argv)
-{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
+static const char *uris[] = {
+ "tizen.contacts_view.person/simple_contact",
+ "tizen.contacts_view.person/simple_contact/number",
+ "tizen.contacts_view.person/simple_contact/email",
+ "tizen.contacts_view.person/simple_contact/group",
+ "tizen.contacts_view.person/simple_contact/group_assigned",
+ "tizen.contacts_view.person/simple_contact/group_not_assigned",
+ "tizen.contacts_view.person",
+};
- int limit = -1;
- int offset = -1;
+static const char *keywords[] = {
+ "gildo",
+ "123", "ㅎㄱ", "ㄱㄷ", "music", "Seoul",
+ "SEOUL", "run", "tiz", "plat", "hong",
+ "+", " ",
+};
- contacts_connect();
- contacts_list_h list = NULL;
- contacts_db_search_records(_contacts_person_contact._uri, keyword, limit, offset, &list);
- int count = 0;
- contacts_list_get_count(list, &count);
- DBG("count(%d)", count);
+static contacts_record_h _get_name(const char *first, const char *last)
+{
+ contacts_record_h name = NULL;
+ contacts_record_create(_contacts_name._uri, &name);
+ contacts_record_set_str(name, _contacts_name.first, first);
+ contacts_record_set_str(name, _contacts_name.last, last);
+ return name;
+}
- contacts_list_first(list);
- contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_contact.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_contact.display_name_index, &name_index);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s]", name_index, name);
- contacts_list_next(list);
- }
+static contacts_record_h _get_number(const char *phone_number)
+{
+ contacts_record_h number = NULL;
+ contacts_record_create(_contacts_number._uri, &number);
+ contacts_record_set_str(number, _contacts_number.number, phone_number);
+ return number;
+}
- contacts_disconnect();
+static contacts_record_h _get_email(int type, const char *email_address)
+{
+ contacts_record_h email = NULL;
+ contacts_record_create(_contacts_email._uri, &email);
+ contacts_record_set_int(email, _contacts_email.type, type);
+ contacts_record_set_str(email, _contacts_email.email, email_address);
+ return email;
+}
- return 0;
+static contacts_record_h _get_nickname(const char *name)
+{
+ contacts_record_h nickname = NULL;
+ contacts_record_create(_contacts_nickname._uri, &nickname);
+ contacts_record_set_str(nickname, _contacts_nickname.name, name);
+ return nickname;
}
-int test_query_with_query_person_contact(int argc, char **argv)
+static contacts_record_h _get_address(const char *street, const char *locality,
+ const char *region, const char *country)
{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
+ contacts_record_h address = NULL;
+ contacts_record_create(_contacts_address._uri, &address);
+ contacts_record_set_str(address, _contacts_address.street, street);
+ contacts_record_set_str(address, _contacts_address.locality, locality);
+ contacts_record_set_str(address, _contacts_address.region, region);
+ contacts_record_set_str(address, _contacts_address.country, country);
+ return address;
+}
- int limit = -1;
- int offset = -1;
+static contacts_record_h _get_note(const char *contents)
+{
+ contacts_record_h note = NULL;
+ contacts_record_create(_contacts_note._uri, ¬e);
+ contacts_record_set_str(note, _contacts_note.note, contents);
+ return note;
+}
- contacts_connect();
+static contacts_record_h _get_company(const char *department, const char *name,
+ const char *role)
+{
+ contacts_record_h company = NULL;
+ contacts_record_create(_contacts_company._uri, &company);
+ contacts_record_set_str(company, _contacts_company.department, department);
+ contacts_record_set_str(company, _contacts_company.name, name);
+ contacts_record_set_str(company, _contacts_company.role, role);
+ return company;
+}
- contacts_query_h query = NULL;
- contacts_query_create(_contacts_person_contact._uri, &query);
+int _insert_contact_01(int *id)
+{
+ int contact_id = 0;
+ contacts_record_h contact = NULL;
+ contacts_record_create(_contacts_contact._uri, &contact);
+ contacts_record_add_child_record(contact, _contacts_contact.name,
+ _get_name("홍길동", "korea123"));
+ contacts_record_add_child_record(contact, _contacts_contact.number,
+ _get_number("010-1234-1234"));
+ contacts_record_add_child_record(contact, _contacts_contact.email,
+ _get_email(CONTACTS_EMAIL_TYPE_HOME, "gildong.hong@music.com"));
+ contacts_record_add_child_record(contact, _contacts_contact.nickname,
+ _get_nickname("super"));
+ contacts_record_add_child_record(contact, _contacts_contact.address,
+ _get_address("hongic Univ", "mapo", "Seoul", "Korea"));
+ contacts_record_add_child_record(contact, _contacts_contact.note,
+ _get_note("running"));
+ contacts_record_add_child_record(contact, _contacts_contact.company,
+ _get_company("Platform Lab", "tizen", "PIMS"));
+ contacts_db_insert_record(contact, &contact_id);
+ contacts_record_destroy(contact, true);
+ DBG("contact_id(%d)", contact_id);
+
+ if (id)
+ *id = contact_id;
- contacts_filter_h filter = NULL;
- contacts_filter_create(_contacts_person_contact._uri, &filter);
+ return 0;
+}
- contacts_filter_add_int(filter,
- _contacts_person_contact.address_book_id, CONTACTS_MATCH_EQUAL, 0);
- contacts_query_set_filter(query, filter);
+int _insert_contact_02(int *id)
+{
+ int contact_id = 0;
+ contacts_record_h contact = NULL;
+ contacts_record_create(_contacts_contact._uri, &contact);
+ contacts_record_add_child_record(contact, _contacts_contact.name,
+ _get_name("AlpaGo", "pro9"));
+ contacts_record_add_child_record(contact, _contacts_contact.number,
+ _get_number("+851034123412"));
+ contacts_record_add_child_record(contact, _contacts_contact.email,
+ _get_email(CONTACTS_EMAIL_TYPE_HOME, "alpago@baduk.com"));
+ contacts_record_add_child_record(contact, _contacts_contact.nickname,
+ _get_nickname("prime"));
+ contacts_record_add_child_record(contact, _contacts_contact.address,
+ _get_address("broad", "young123", "Gyoung", "Korea"));
+ contacts_record_add_child_record(contact, _contacts_contact.note,
+ _get_note("day123"));
+ contacts_record_add_child_record(contact, _contacts_contact.company,
+ _get_company("customer", "new123", "role"));
+ contacts_db_insert_record(contact, &contact_id);
+ contacts_record_destroy(contact, true);
+ DBG("contact_id(%d)", contact_id);
+
+ if (id)
+ *id = contact_id;
- contacts_list_h list = NULL;
- contacts_db_search_records_with_query(query, keyword, limit, offset, &list);
+ return 0;
+}
- contacts_filter_destroy(filter);
- contacts_query_destroy(query);
- int count = 0;
- contacts_list_get_count(list, &count);
- DBG("count(%d)", count);
+static void _delete_contact(int contact_id)
+{
+ contacts_db_delete_record(_contacts_contact._uri, contact_id);
+}
- contacts_list_first(list);
- contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_contact.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_contact.display_name_index, &name_index);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s]", name_index, name);
- contacts_list_next(list);
+static void _get_query_on_uri(const char *uri, int limit, int offset, contacts_query_h *out_query)
+{
+ contacts_query_h query = NULL;
+ contacts_query_create(uri, &query);
+
+ contacts_filter_h filter = NULL;
+ contacts_filter_create(uri, &filter);
+
+
+ if (0 == strcmp(uri, _contacts_person_contact._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_contact.person_id,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person_grouprel._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_grouprel.link_count,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person_group_assigned._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_group_assigned.person_id,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person_group_not_assigned._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_group_not_assigned.link_count,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person_number._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_number.person_id,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person_email._uri)) {
+ contacts_filter_add_int(filter, _contacts_person_email.person_id,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else if (0 == strcmp(uri, _contacts_person._uri)) {
+ contacts_filter_add_int(filter, _contacts_person.link_count,
+ CONTACTS_MATCH_GREATER_THAN, 0);
+ } else {
+ ERR("Invalid uri[%s]", uri);
+ return;
}
- contacts_disconnect();
+ contacts_query_set_filter(query, filter);
+ contacts_filter_destroy(filter);
- return 0;
+ if (out_query)
+ *out_query = query;
}
-int test_query_person_number(int argc, char **argv)
+static int _check_list(const char *uri, contacts_list_h in_list, bool is_snippet)
{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
-
- int limit = -1;
- int offset = -1;
-
- contacts_connect();
+ if (NULL == in_list) {
+ ERR("NO list");
+ return 0;
+ }
- contacts_list_h list = NULL;
- contacts_db_search_records(_contacts_person_number._uri, keyword, limit, offset, &list);
+ int uri_type = -1;
+ if (0 == strcmp(uri, _contacts_person_contact._uri)) {
+ uri_type = TEST_URI_PERSON_CONTACT;
+ } else if (0 == strcmp(uri, _contacts_person_grouprel._uri)) {
+ uri_type = TEST_URI_PERSON_GROUPREL;
+ } else if (0 == strcmp(uri, _contacts_person_group_assigned._uri)) {
+ uri_type = TEST_URI_PERSON_GROUP_ASSIGNED;
+ } else if (0 == strcmp(uri, _contacts_person_group_not_assigned._uri)) {
+ uri_type = TEST_URI_PERSON_GROUP_NOT_ASSIGNED;
+ } else if (0 == strcmp(uri, _contacts_person_number._uri)) {
+ uri_type = TEST_URI_PERSON_NUMBER;
+ } else if (0 == strcmp(uri, _contacts_person_email._uri)) {
+ uri_type = TEST_URI_PERSON_EMAIL;
+ } else if (0 == strcmp(uri, _contacts_person._uri)) {
+ uri_type = TEST_URI_PERSON;
+ } else {
+ ERR("Invalid uri[%s]", uri);
+ return 0;
+ }
int count = 0;
- contacts_list_get_count(list, &count);
+ contacts_list_get_count(in_list, &count);
DBG("count(%d)", count);
- contacts_list_first(list);
+ contacts_list_first(in_list);
contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.display_name_index, &name_index);
+ while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(in_list, &record)) {
+ int contact_id = 0;
+ char *display_name = NULL;
char *number = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.number, &number);
- char *normalized_number = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.normalized_number, &normalized_number);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s] number[%s] normalized_number[%s]",
- name_index, name, number, normalized_number);
- contacts_list_next(list);
- }
+ int snippet_type = NULL;
+ char *snippet_string = NULL;
+
+ switch (uri_type) {
+ case TEST_URI_PERSON_CONTACT:
+ contacts_record_get_int(record, _contacts_person_contact.contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_contact.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_contact.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_contact.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON_GROUPREL:
+ contacts_record_get_int(record, _contacts_person_grouprel.contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_grouprel.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_grouprel.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_grouprel.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON_GROUP_ASSIGNED:
+ contacts_record_get_int(record, _contacts_person_group_assigned.contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_group_assigned.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_group_assigned.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_group_assigned.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON_GROUP_NOT_ASSIGNED:
+ contacts_record_get_int(record, _contacts_person_group_not_assigned.contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_group_not_assigned.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_group_not_assigned.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_group_not_assigned.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON_NUMBER:
+ contacts_record_get_int(record, _contacts_person_number.display_contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_number.display_name, &display_name);
+ contacts_record_get_str_p(record, _contacts_person_number.number, &number);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_number.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_number.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON_EMAIL:
+ contacts_record_get_int(record, _contacts_person_email.display_contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person_email.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person_email.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person_email.snippet_string, &snippet_string);
+ break;
+ case TEST_URI_PERSON:
+ contacts_record_get_int(record, _contacts_person.display_contact_id, &contact_id);
+ contacts_record_get_str_p(record, _contacts_person.display_name, &display_name);
+ if (false == is_snippet)
+ break;
+
+ contacts_record_get_int(record, _contacts_person.snippet_type, &snippet_type);
+ contacts_record_get_str_p(record, _contacts_person.snippet_string, &snippet_string);
+ break;
+ }
+ DBG("id(%d) name[%s] |%d|%s|", contact_id, display_name, snippet_type, snippet_string);
- contacts_disconnect();
+ contacts_list_next(in_list);
+ }
return 0;
}
-int test_query_with_query_person_number(int argc, char **argv)
+static int test_get_records(int argc, char **argv)
{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
+ DBG("[%s]", __func__);
- int limit = -1;
- int offset = -1;
+ int i;
+ int i_count = sizeof(uris)/sizeof(uris[0]);
- contacts_connect();
+ const char *uri = NULL;
+ int offset = 0;
+ int limit = 0;
- contacts_query_h query = NULL;
- contacts_query_create(_contacts_person_number._uri, &query);
+ if (3 < argc) {
+ i_count = 1;
+ }
- contacts_filter_h filter = NULL;
- contacts_filter_create(_contacts_person_number._uri, &filter);
+ contacts_connect();
- contacts_filter_add_bool(filter,
- _contacts_person_number.has_phonenumber, true);
- contacts_query_set_filter(query, filter);
+ int ids[TEST_CONTACT_COUNT] = {0};
+ _insert_contact_01(&ids[0]);
+ _insert_contact_02(&ids[1]);
- contacts_list_h list = NULL;
- contacts_db_search_records_with_query(query, keyword, limit, offset, &list);
+ for (i = 0; i < i_count; i++) {
+ uri = 3 < argc ? argv[3] : uris[i];
+ DBG("uri[%s]", uri);
- contacts_filter_destroy(filter);
- contacts_query_destroy(query);
+ contacts_list_h get_list = NULL;
- int count = 0;
- contacts_list_get_count(list, &count);
- DBG("count(%d)", count);
+ DBG("search_records");
+ contacts_db_get_all_records(uri, offset, limit, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
- contacts_list_first(list);
- contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.display_name_index, &name_index);
- char *number = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.number, &number);
- char *normalized_number = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_number.normalized_number, &normalized_number);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s] number[%s] normalized_number[%s]",
- name_index, name, number, normalized_number);
- contacts_list_next(list);
+ DBG("search_records_with_query");
+ contacts_query_h query = NULL;
+ _get_query_on_uri(uri, limit, offset, &query);
+ contacts_db_get_records_with_query(query, offset, limit, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+ contacts_query_destroy(query);
}
- contacts_disconnect();
+ for (i = 0; i < TEST_CONTACT_COUNT; i++)
+ _delete_contact(ids[i]);
+ contacts_disconnect();
return 0;
}
-int test_query_person_email(int argc, char **argv)
+static int test_search_records(int argc, char **argv)
{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
+ DBG("[%s]", __func__);
- int limit = -1;
- int offset = -1;
+ int i, j;
+ int i_count = sizeof(uris)/sizeof(uris[0]);
+ int j_count = sizeof(keywords)/sizeof(keywords[0]);
- contacts_connect();
+ const char *uri = NULL;
+ const char *keyword = NULL;
+ int offset = 0;
+ int limit = 0;
- contacts_list_h list = NULL;
- contacts_db_search_records(_contacts_person_email._uri, keyword, limit, offset, &list);
+ if (3 < argc) {
+ i_count = 1;
+ j_count = 1;
+ }
- int count = 0;
- contacts_list_get_count(list, &count);
- DBG("count(%d)", count);
+ contacts_connect();
- contacts_list_first(list);
- contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.display_name_index, &name_index);
- char *email = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.email, &email);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s] email[%s]", name_index, name, email);
- contacts_list_next(list);
+ int ids[TEST_CONTACT_COUNT] = {0};
+ _insert_contact_01(&ids[0]);
+ _insert_contact_02(&ids[1]);
+
+ for (i = 0; i < i_count; i++) {
+ uri = 3 < argc ? argv[3] : uris[i];
+ DBG("uri[%s]", uri);
+
+ for (j = 0; j < j_count; j++) {
+ keyword = 4 < argc ? argv[4] : keywords[j];
+ DBG("keyword[%s]", keyword);
+
+ contacts_list_h get_list = NULL;
+
+ DBG("search_records");
+ contacts_db_search_records(uri, keyword, offset, limit, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range:CONTACTS_SEARCH_RANGE_NAME");
+ contacts_db_search_records_with_range(uri, keyword, offset, limit,
+ CONTACTS_SEARCH_RANGE_NAME, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range:CONTACTS_SEARCH_RANGE_NUMBER");
+ contacts_db_search_records_with_range(uri, keyword, offset, limit,
+ CONTACTS_SEARCH_RANGE_NUMBER, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range:CONTACTS_SEARCH_RANGE_DATA");
+ contacts_db_search_records_with_range(uri, keyword, offset, limit,
+ CONTACTS_SEARCH_RANGE_DATA, &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_query");
+ contacts_query_h query = NULL;
+ _get_query_on_uri(uri, limit, offset, &query);
+ contacts_db_search_records_with_query(query, keyword, offset, limit,
+ &get_list);
+ _check_list(uri, get_list, false);
+ contacts_list_destroy(get_list, true);
+ contacts_query_destroy(query);
+ }
}
- contacts_disconnect();
+ for (i = 0; i < TEST_CONTACT_COUNT; i++)
+ _delete_contact(ids[i]);
+ contacts_disconnect();
return 0;
}
-int test_query_with_query_person_email(int argc, char **argv)
+/*
+ * /usr/bin//contacts-service-test 1 2 {uri} {keyword}
+ */
+static int test_search_records_for_snippet(int argc, char **argv)
{
- char *keyword = NULL;
- keyword = argv[0];
- DBG("keyword[%s]", keyword);
-
- int limit = -1;
- int offset = -1;
+ DBG("[%s]", __func__);
+
+ int i, j;
+ int i_count = sizeof(uris)/sizeof(uris[0]);
+ int j_count = sizeof(keywords)/sizeof(keywords[0]);
+
+ const char *uri = NULL;
+ const char *keyword = NULL;
+ char *start_match = "[";
+ char *end_match = "]";
+ int offset = 0;
+ int limit = 0;
+
+ if (3 < argc) {
+ i_count = 1;
+ j_count = 1;
+ }
contacts_connect();
- contacts_query_h query = NULL;
- contacts_query_create(_contacts_person_email._uri, &query);
-
- contacts_filter_h filter = NULL;
- contacts_filter_create(_contacts_person_email._uri, &filter);
-
- contacts_filter_add_bool(filter,
- _contacts_person_email.is_favorite, false);
- contacts_query_set_filter(query, filter);
-
- contacts_list_h list = NULL;
- contacts_db_search_records_with_query(query, keyword, limit, offset, &list);
-
- contacts_filter_destroy(filter);
- contacts_query_destroy(query);
-
- int count = 0;
- contacts_list_get_count(list, &count);
- DBG("count(%d)", count);
-
- contacts_list_first(list);
- contacts_record_h record = NULL;
- while (CONTACTS_ERROR_NONE == contacts_list_get_current_record_p(list, &record)) {
- char *name = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.display_name, &name);
- char *name_index = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.display_name_index, &name_index);
- char *email = NULL;
- contacts_record_get_str_p(record,
- _contacts_person_email.email, &email);
-
- DBG("-------------------------------------------");
- DBG("name_index[%s] name[%s] email[%s]", name_index, name, email);
- contacts_list_next(list);
+ int ids[TEST_CONTACT_COUNT] = {0};
+ _insert_contact_01(&ids[0]);
+ _insert_contact_02(&ids[1]);
+
+ for (i = 0; i < i_count; i++) {
+ uri = 3 < argc ? argv[3] : uris[i];
+ DBG(">>>>> uri[%s]", uri);
+
+ for (j = 0; j < j_count; j++) {
+ keyword = 4 < argc ? argv[4] : keywords[j];
+ DBG("keyword [%s]", keyword);
+
+ contacts_list_h get_list = NULL;
+
+ DBG("search_records_for_snippet");
+ contacts_db_search_records_for_snippet(uri, keyword, offset, limit,
+ start_match, end_match, 0, &get_list);
+ _check_list(uri, get_list, true);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range_for_snippet:CONTACTS_SEARCH_RANGE_NAME");
+ contacts_db_search_records_with_range_for_snippet(uri, keyword, offset,
+ limit, CONTACTS_SEARCH_RANGE_NAME, start_match, end_match, 0, &get_list);
+ _check_list(uri, get_list, true);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range_for_snippet:CONTACTS_SEARCH_RANGE_NUMBER");
+ contacts_db_search_records_with_range_for_snippet(uri, keyword, offset,
+ limit, CONTACTS_SEARCH_RANGE_NUMBER, start_match, end_match, 0, &get_list);
+ _check_list(uri, get_list, true);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_range_for_snippet:CONTACTS_SEARCH_RANGE_DATA");
+ contacts_db_search_records_with_range_for_snippet(uri, keyword, offset,
+ limit, CONTACTS_SEARCH_RANGE_DATA, start_match, end_match, 0, &get_list);
+ _check_list(uri, get_list, true);
+ contacts_list_destroy(get_list, true);
+
+ DBG("search_records_with_query_for_snippet");
+ contacts_query_h query = NULL;
+ _get_query_on_uri(uri, limit, offset, &query);
+ contacts_db_search_records_with_query_for_snippet(query, keyword, offset,
+ limit, start_match, end_match, 0, &get_list);
+ _check_list(uri, get_list, true);
+ contacts_list_destroy(get_list, true);
+ contacts_query_destroy(query);
+ }
}
- contacts_disconnect();
+ for (i = 0; i < TEST_CONTACT_COUNT; i++)
+ _delete_contact(ids[i]);
+ contacts_disconnect();
return 0;
}
static const func _func[] = {
- test_query_person_contact,
- test_query_with_query_person_contact,
- test_query_person_number,
- test_query_with_query_person_number,
- test_query_person_email,
- test_query_with_query_person_email,
+ test_get_records,
+ test_search_records,
+ test_search_records_for_snippet,
};
int test_query(int argc, char **argv)
int i = 0;
for (i = 0; i < count; i++) {
+ test_utils_cleanup();
if (_func[i](argc, argv) < 0)
break;
}
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
-
-int test_query_person_contact(char **argv);
-int test_query_person_number(char **argv);
-int test_query_person_email(char **argv);
-int test_query_with_query_person_contact(char **argv);
-int test_query_with_query_person_number(char **argv);
-int test_query_with_query_person_email(char **argv);
+int test_query(int argc, char **argv);
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdlib.h>
+#include "contacts.h"
+#include "test_debug.h"
+#include "test_utils.h"
+
+void test_utils_cleanup(void)
+{
+ DBG("[%s]", __func__);
+
+ int ret = 0;
+
+ contacts_connect();
+
+ contacts_list_h get_list = NULL;
+ contacts_db_get_all_records(_contacts_contact._uri, 0, 0, &get_list);
+
+ contacts_list_first(get_list);
+ int count = 0;
+ contacts_list_get_count(get_list, &count);
+ DBG("count(%d)", count);
+
+ int *ids = calloc(count, sizeof(int));
+ int index = 0;
+ do {
+ contacts_record_h record = NULL;
+ ret = contacts_list_get_current_record_p(get_list, &record);
+ if (CONTACTS_ERROR_NONE != ret)
+ break;
+ int contact_id = 0;
+ contacts_record_get_int(record, _contacts_contact.id, &contact_id);
+ ids[index] = contact_id;
+ contacts_list_next(get_list);
+ } while (1);
+
+ ret = contacts_db_delete_records(_contacts_contact._uri, ids, count);
+ if (CONTACTS_ERROR_NONE != ret)
+ ERR("contacts_db_delete_records() Fail(%d)", ret);
+
+ free(ids);
+
+ contacts_disconnect();
+}
--- /dev/null
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __TEST_UTILS_H__
+#define __TEST_UTILS_H__
+
+void test_utils_cleanup(void);
+
+#endif /* __TEST_UTILS_H__ */