Modify search related operations.
authorKeebum Kim <keebum.kim@samsung.com>
Thu, 22 Aug 2013 11:35:14 +0000 (20:35 +0900)
committerKeebum Kim <keebum.kim@samsung.com>
Thu, 22 Aug 2013 11:35:14 +0000 (20:35 +0900)
framework/storage-handler/MsgStorageMessage.cpp
utils/MsgContact.cpp

index 8721b3d..1f2a954 100755 (executable)
@@ -2507,9 +2507,11 @@ msg_error_t MsgStoSearchMessage(const char *pSearchString, msg_struct_list_s *pT
        // Replace string for '%' and '_' character
        char *ext1_str = NULL;
        char *ext2_str = NULL;
+       char *ext3_str = NULL;
 
        ext1_str = MsgStoReplaceString(pSearchString, "_", "\\_");
        ext2_str = MsgStoReplaceString(ext1_str, "%", "\\%");
+       ext3_str = MsgStoReplaceString(ext2_str, "'", "''");
 
        // Search - Address, Name
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
@@ -2517,7 +2519,7 @@ msg_error_t MsgStoSearchMessage(const char *pSearchString, msg_struct_list_s *pT
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT CONV_ID, UNREAD_CNT, SMS_CNT, MMS_CNT, DISPLAY_NAME, \
                        MAIN_TYPE, SUB_TYPE, MSG_DIRECTION, DISPLAY_TIME, MSG_TEXT \
                        FROM %s WHERE DISPLAY_NAME LIKE '%%%s%%' ESCAPE '\\' ORDER BY DISPLAY_TIME DESC;",
-                       MSGFW_CONVERSATION_TABLE_NAME, ext2_str);
+                       MSGFW_CONVERSATION_TABLE_NAME, ext3_str);
 
        if (ext1_str) {
                free(ext1_str);
@@ -2529,6 +2531,11 @@ msg_error_t MsgStoSearchMessage(const char *pSearchString, msg_struct_list_s *pT
                ext2_str = NULL;
        }
 
+       if (ext3_str) {
+               free(ext3_str);
+               ext3_str = NULL;
+       }
+
        MSG_DEBUG("[%s]", sqlQuery);
 
        if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS) {
@@ -2614,6 +2621,7 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
 
        char *ext1_str = NULL;
        char *ext2_str = NULL;
+       char *ext3_str = NULL;
 
        // Get Name Order
        int order = MsgGetContactNameOrder();
@@ -2677,6 +2685,7 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
                // Replace string for '%' and '_' character
                ext1_str = MsgStoReplaceString(pSearchCon->pSearchVal, "_", "\\_");
                ext2_str = MsgStoReplaceString(ext1_str, "%", "\\%");
+               ext3_str = MsgStoReplaceString(ext2_str, "'", "''");
 
                memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
                snprintf(sqlQuerySubset, sizeof(sqlQuerySubset),
@@ -2686,7 +2695,7 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
                                "OR B.DISPLAY_NAME LIKE '%%%s%%' ESCAPE '\\' "
                                "OR B.FIRST_NAME LIKE '%%%s%%' ESCAPE '\\' "
                                "OR B.LAST_NAME LIKE '%%%s%%' ESCAPE '\\') ",
-                               ext2_str, ext2_str, ext2_str, ext2_str, ext2_str, ext2_str);
+                               ext3_str, ext3_str, ext3_str, ext3_str, ext3_str, ext3_str);
                strncat(sqlQuery, sqlQuerySubset, MAX_QUERY_LEN-strlen(sqlQuery));
 
                if (ext1_str) {
@@ -2698,6 +2707,11 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
                        free(ext2_str);
                        ext2_str = NULL;
                }
+
+               if (ext3_str) {
+                       free(ext3_str);
+                       ext3_str = NULL;
+               }
        }
 
        /// address
@@ -2706,9 +2720,10 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
                // Replace string for '%' and '_' character
                ext1_str = MsgStoReplaceString(pSearchCon->pAddressVal, "_", "\\_");
                ext2_str = MsgStoReplaceString(ext1_str, "%", "\\%");
+               ext3_str = MsgStoReplaceString(ext2_str, "'", "''");
 
                memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND B.ADDRESS_VAL LIKE '%%%s%%' ESCAPE '\\' ", ext2_str);
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND B.ADDRESS_VAL LIKE '%%%s%%' ESCAPE '\\' ", ext3_str);
                strncat(sqlQuery, sqlQuerySubset, MAX_QUERY_LEN-strlen(sqlQuery));
 
                if (ext1_str) {
@@ -2720,6 +2735,11 @@ msg_error_t MsgStoSearchMessage(const MSG_SEARCH_CONDITION_S *pSearchCon, int of
                        free(ext2_str);
                        ext2_str = NULL;
                }
+
+               if (ext3_str) {
+                       free(ext3_str);
+                       ext3_str = NULL;
+               }
        }
 
        /// limit, offset
index 732bef9..1fcb514 100755 (executable)
@@ -93,18 +93,23 @@ msg_error_t MsgInitContactSvc(MsgContactChangeCB cb)
 {
        msg_error_t err = MSG_SUCCESS;
 
-       if ((err = MsgOpenContactSvc()) != MSG_SUCCESS) {
-               MSG_DEBUG("MsgOpenContactSvc fail.");
-               return err;
-       }
+       unsigned int retryCnt = 10;
 
-       int errCode = CONTACTS_ERROR_NONE;
+       do {
+               if ((err = MsgOpenContactSvc()) != MSG_SUCCESS) {
+                       retryCnt--;
+                       MSG_DEBUG("MsgOpenContactSvc fail. Retry count left [%d]", retryCnt);
+                       usleep(100 * 1000);
+               }
+       } while (err != MSG_SUCCESS && retryCnt > 0);
 
        if (!isContactSvcConnected) {
                MSG_DEBUG("Contact Service Not Opened.");
                return MSG_ERR_UNKNOWN;
        }
 
+       int errCode = CONTACTS_ERROR_NONE;
+
        if (cb != NULL)
                cbFunction = cb;