From f59ca5af2d5cdc728f81d1024c316bcb38bb19a7 Mon Sep 17 00:00:00 2001 From: "Dirk-Jan C. Binnema" Date: Sun, 10 Jul 2011 14:08:16 +0300 Subject: [PATCH] * support special characters in X-Labels --- src/mu-msg-fields.c | 2 +- src/mu-store.cc | 3 +++ src/tests/test-mu-query.c | 38 +++++++++++++++++++++++++++++++++----- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/mu-msg-fields.c b/src/mu-msg-fields.c index 71b12359..072a26b2 100644 --- a/src/mu-msg-fields.c +++ b/src/mu-msg-fields.c @@ -212,7 +212,7 @@ static const MuMsgField FIELD_DATA[] = { MU_MSG_FIELD_TYPE_STRING_LIST, "tag", 'x', 'X', FLAG_GMIME | FLAG_XAPIAN_TERM | FLAG_XAPIAN_PREFIX_ONLY | - FLAG_NORMALIZE + FLAG_NORMALIZE | FLAG_XAPIAN_ESCAPE } }; diff --git a/src/mu-store.cc b/src/mu-store.cc index dc356d94..284efbb7 100644 --- a/src/mu-store.cc +++ b/src/mu-store.cc @@ -407,6 +407,9 @@ add_terms_values_string_list (Xapian::Document& doc, MuMsg *msg, if (mu_msg_field_normalize (mfid)) mu_str_normalize_in_place (val, TRUE); + + if (mu_msg_field_xapian_escape (mfid)) + mu_str_ascii_xapian_escape_in_place (val); doc.add_term (prefix(mfid) + std::string(val, 0, MU_STORE_MAX_TERM_LENGTH)); diff --git a/src/tests/test-mu-query.c b/src/tests/test-mu-query.c index 9d97e226..6cfeff3f 100644 --- a/src/tests/test-mu-query.c +++ b/src/tests/test-mu-query.c @@ -87,7 +87,6 @@ run_and_count_matches (const char *xpath, const char *query) MuQuery *mquery; MuMsgIter *iter; guint count1, count2; - GHashTable *hash; mquery = mu_query_new (xpath, NULL); g_assert (query); @@ -107,9 +106,6 @@ run_and_count_matches (const char *xpath, const char *query) mu_query_destroy (mquery); g_assert (iter); - hash = g_hash_table_new_full (g_str_hash, g_str_equal, - (GDestroyNotify)g_free, NULL); - assert_no_dups (iter); /* run query twice, to test mu_msg_iter_reset */ @@ -414,7 +410,7 @@ test_mu_query_attach (void) /* g_print ("(%s)\n", xpath); */ - for (i = 0; i != G_N_ELEMENTS(queries); ++i) + for (i = 0; i != G_N_ELEMENTS(queries); ++i) g_assert_cmpuint (run_and_count_matches (xpath, queries[i].query), ==, queries[i].count); @@ -450,6 +446,36 @@ test_mu_query_tags (void) } +static void +test_mu_query_tags_02 (void) +{ + gchar *xpath; + int i; + + QResults queries[] = { + { "x:paradise", 1}, + { "tag:@NextActions", 1}, + { "x:queensrÿche", 1}, + { "tag:lost OR tag:operation:mindcrime", 2}, + }; + + xpath = fill_database (MU_TESTMAILDIR2); + g_assert (xpath != NULL); + + /* g_print ("(%s)\n", xpath); */ + + for (i = 0; i != G_N_ELEMENTS(queries); ++i) { + /* g_print ("%s\n", queries[i].query); */ + g_assert_cmpuint (run_and_count_matches (xpath, queries[i].query), + ==, queries[i].count); + } + + g_free (xpath); +} + + + + int main (int argc, char *argv[]) { @@ -474,6 +500,8 @@ main (int argc, char *argv[]) test_mu_query_attach); g_test_add_func ("/mu-query/test-mu-query-tags", test_mu_query_tags); + g_test_add_func ("/mu-query/test-mu-query-tags_02", + test_mu_query_tags_02); g_log_set_handler (NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION,