+static int _make_filter_fts_rule_string(email_list_filter_rule_fts_t *input_list_filter_rule, char **output_string)
+{
+ EM_DEBUG_FUNC_BEGIN("input_list_filter_rule [%p], output_string [%p]", input_list_filter_rule, output_string);
+
+ int ret = EMAIL_ERROR_NONE;
+ char *field_name_string = NULL;
+ char key_value_string[QUERY_SIZE] = {0,};
+ char result_rule_string[QUERY_SIZE] = {0,};
+
+ int rc = -1;
+ int count = 0;
+ int col_index = 0;
+ int error = EMAIL_ERROR_NONE;
+ char **result = NULL;
+ char sql_query_string[QUERY_SIZE] = {0,};
+ char sql_query_string2[QUERY_SIZE] = {0,};
+ sqlite3 *local_db_handle = NULL;
+
+ if(input_list_filter_rule == NULL || output_string == NULL) {
+ EM_DEBUG_EXCEPTION("EMAIL_ERROR_INVALID_PARAM");
+ return EMAIL_ERROR_INVALID_PARAM;
+ }
+
+ field_name_string = EM_SAFE_STRDUP("body_text");
+ SNPRINTF(key_value_string, QUERY_SIZE, "%s", input_list_filter_rule->key_value.string_type_value);
+
+ switch (input_list_filter_rule->rule_type) {
+
+ case EMAIL_LIST_FILTER_RULE_INCLUDE:
+ SNPRINTF(result_rule_string, QUERY_SIZE, "WHERE %s LIKE \'%%%s%%\' ", field_name_string, key_value_string);
+ break;
+
+ case EMAIL_LIST_FILTER_RULE_MATCH:
+ SNPRINTF(result_rule_string, QUERY_SIZE, "WHERE %s MATCH \'%s\' ", field_name_string, key_value_string);
+ break;
+
+ default :
+ EM_DEBUG_EXCEPTION("Invalid rule_type [%d]", input_list_filter_rule->rule_type);
+ ret = EMAIL_ERROR_INVALID_PARAM;
+ goto FINISH_OFF;
+ }
+
+ local_db_handle = emstorage_get_db_connection();
+ EMSTORAGE_START_READ_TRANSACTION(true);
+ SNPRINTF(sql_query_string, QUERY_SIZE, "SELECT mail_id FROM mail_text_tbl %s", result_rule_string);
+
+ EMSTORAGE_PROTECTED_FUNC_CALL(sqlite3_get_table(local_db_handle, sql_query_string, &result, &count, 0, NULL), rc);
+ EM_DEBUG_DB_EXEC((SQLITE_OK != rc && -1 != rc), {error = EMAIL_ERROR_DB_FAILURE; sqlite3_free_table(result); goto FINISH_OFF;},
+ ("SQL(%s) sqlite3_get_table fail:%d -%s", sql_query_string, rc, sqlite3_errmsg(local_db_handle)));
+
+ col_index = 1;
+
+ if (!count) {
+ EM_DEBUG_EXCEPTION("No mail found...");
+ ret = true;
+ error= EMAIL_ERROR_MAIL_NOT_FOUND;
+ *output_string = strdup("mail_id IN ( ) ");
+ goto FINISH_OFF;
+ }
+
+ EM_DEBUG_LOG(">>>> DATA ASSIGN START >>");
+ int i = 0;
+ int *mail_ids = NULL;
+ if (!(mail_ids = (int *)em_malloc(sizeof(int) * count))) {
+ EM_DEBUG_EXCEPTION("malloc for mail_ids failed...");
+ error = EMAIL_ERROR_OUT_OF_MEMORY;
+ goto FINISH_OFF;
+ }
+
+ for (i = 0; i < count; i++) {
+ _get_table_field_data_int(result, &(mail_ids[i]), col_index++);
+ EM_DEBUG_LOG(">>>> DATA ASSIGN [mail_id : %d] >>", mail_ids[i]);
+ }
+
+ EM_DEBUG_LOG(">>>> DATA ASSIGN END [count : %d] >>", count);
+ EM_PROFILE_END(emstorage_query_mail_list_loop);
+ sqlite3_free_table(result);
+ EMSTORAGE_FINISH_READ_TRANSACTION(true);
+
+ sqlite3_release_memory(-1);
+
+ _DISCONNECT_DB;
+
+ int cur_query = 0;
+ cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, QUERY_SIZE, "mail_id IN ( ");
+ for (i = 0; i < count-1; i++) {
+ cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, QUERY_SIZE, "%d, ", mail_ids[i]);
+ }
+ cur_query += SNPRINTF_OFFSET(sql_query_string2, cur_query, QUERY_SIZE, "%d ) ", mail_ids[count-1]);
+
+ *output_string = strdup(sql_query_string2);
+
+FINISH_OFF:
+ EM_SAFE_FREE(field_name_string);
+ EM_DEBUG_FUNC_END("ret [%d]", ret);
+ return ret;
+}
+