* clean up mu-query; don't preprocess twice...
This commit is contained in:
@ -222,29 +222,36 @@ struct _MuQuery {
|
|||||||
MuSizeRangeProcessor _size_range_processor;
|
MuSizeRangeProcessor _size_range_processor;
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool
|
static const Xapian::Query
|
||||||
set_query (MuQuery *mqx, Xapian::Query& q, const char* searchexpr,
|
get_query (MuQuery *mqx, const char* searchexpr, GError **err)
|
||||||
GError **err) {
|
{
|
||||||
|
Xapian::Query query;
|
||||||
|
char *preprocessed;
|
||||||
|
|
||||||
|
preprocessed = mu_query_preprocess (searchexpr);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
q = mqx->_qparser.parse_query
|
query = mqx->_qparser.parse_query
|
||||||
(searchexpr,
|
(preprocessed,
|
||||||
Xapian::QueryParser::FLAG_BOOLEAN |
|
Xapian::QueryParser::FLAG_BOOLEAN |
|
||||||
Xapian::QueryParser::FLAG_PURE_NOT |
|
Xapian::QueryParser::FLAG_PURE_NOT |
|
||||||
Xapian::QueryParser::FLAG_WILDCARD |
|
Xapian::QueryParser::FLAG_WILDCARD |
|
||||||
Xapian::QueryParser::FLAG_AUTO_SYNONYMS |
|
Xapian::QueryParser::FLAG_AUTO_SYNONYMS |
|
||||||
Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE);
|
Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE);
|
||||||
|
g_free (preprocessed);
|
||||||
return true;
|
return query;
|
||||||
|
|
||||||
} MU_XAPIAN_CATCH_BLOCK;
|
} catch (...) {
|
||||||
|
/* some error occured */
|
||||||
/* some error occured */
|
g_set_error (err, 0, MU_ERROR_QUERY, "parse error in query '%s'",
|
||||||
g_set_error (err, 0, MU_ERROR_QUERY, "parse error in query '%s'",
|
searchexpr);
|
||||||
searchexpr);
|
g_free (preprocessed);
|
||||||
|
throw;
|
||||||
return false;
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_prefix (MuMsgFieldId mfid, Xapian::QueryParser* qparser)
|
add_prefix (MuMsgFieldId mfid, Xapian::QueryParser* qparser)
|
||||||
{
|
{
|
||||||
@ -343,17 +350,7 @@ mu_query_run (MuQuery *self, const char* searchexpr, gboolean threads,
|
|||||||
sortfieldid == MU_MSG_FIELD_ID_NONE,
|
sortfieldid == MU_MSG_FIELD_ID_NONE,
|
||||||
NULL);
|
NULL);
|
||||||
try {
|
try {
|
||||||
Xapian::Query query;
|
Xapian::Query query (get_query (self, searchexpr, err));
|
||||||
char *preprocessed;
|
|
||||||
|
|
||||||
preprocessed = mu_query_preprocess (searchexpr);
|
|
||||||
|
|
||||||
if (!set_query(self, query, preprocessed, err)) {
|
|
||||||
g_free (preprocessed);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
g_free (preprocessed);
|
|
||||||
|
|
||||||
Xapian::Enquire enq (self->_db);
|
Xapian::Enquire enq (self->_db);
|
||||||
|
|
||||||
/* note, when our result will be *threaded*, we sort
|
/* note, when our result will be *threaded*, we sort
|
||||||
@ -379,17 +376,7 @@ mu_query_as_string (MuQuery *self, const char *searchexpr, GError **err)
|
|||||||
g_return_val_if_fail (searchexpr, NULL);
|
g_return_val_if_fail (searchexpr, NULL);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Xapian::Query query;
|
Xapian::Query query (get_query(self, searchexpr, err));
|
||||||
char *preprocessed;
|
|
||||||
|
|
||||||
preprocessed = mu_query_preprocess (searchexpr);
|
|
||||||
|
|
||||||
if (!set_query(self, query, preprocessed, err)) {
|
|
||||||
g_free (preprocessed);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
g_free (preprocessed);
|
|
||||||
|
|
||||||
return g_strdup(query.get_description().c_str());
|
return g_strdup(query.get_description().c_str());
|
||||||
|
|
||||||
} MU_XAPIAN_CATCH_BLOCK_RETURN(NULL);
|
} MU_XAPIAN_CATCH_BLOCK_RETURN(NULL);
|
||||||
|
|||||||
Reference in New Issue
Block a user