#include "notmuch-private.h"
#include "database-private.h"
-#if HAVE_XAPIAN_FIELD_PROCESSOR
static void
compile_regex (regex_t ®exp, const char *str)
{
if (err != 0) {
size_t len = regerror (err, ®exp, NULL, 0);
char *buffer = new char[len];
- std::string msg;
+ std::string msg = "Regexp error: ";
(void) regerror (err, ®exp, buffer, len);
- msg.assign (buffer, len);
+ msg.append (buffer, len);
delete[] buffer;
throw Xapian::QueryParserError (msg);
RegexpPostingSource::check (Xapian::docid did, unused (double min_wt))
{
started_ = true;
- if (!it_.check (did) || at_end ())
+ if (! it_.check (did) || at_end ())
return false;
return (regexec (®exp_, (*it_).c_str (), 0, NULL, 0) == 0);
}
-static inline Xapian::valueno _find_slot (std::string prefix)
+static inline Xapian::valueno
+_find_slot (std::string prefix)
{
if (prefix == "from")
return NOTMUCH_VALUE_FROM;
notmuch_field_flag_t options_,
Xapian::QueryParser &parser_,
notmuch_database_t *notmuch_)
- : slot (_find_slot (prefix)),
- term_prefix (_find_prefix (prefix.c_str ())),
- options (options_),
- parser (parser_),
- notmuch (notmuch_)
+ : slot (_find_slot (prefix)),
+ term_prefix (_find_prefix (prefix.c_str ())),
+ options (options_),
+ parser (parser_),
+ notmuch (notmuch_)
{
};
{
if (str.empty ()) {
if (options & NOTMUCH_FIELD_PROBABILISTIC) {
- return Xapian::Query(Xapian::Query::OP_AND_NOT,
- Xapian::Query::MatchAll,
- Xapian::Query (Xapian::Query::OP_WILDCARD, term_prefix));
+ return Xapian::Query (Xapian::Query::OP_AND_NOT,
+ Xapian::Query::MatchAll,
+ Xapian::Query (Xapian::Query::OP_WILDCARD, term_prefix));
} else {
return Xapian::Query (term_prefix);
}
}
if (str.at (0) == '/') {
- if (str.length() > 1 && str.at (str.size () - 1) == '/'){
- std::string regexp_str = str.substr(1,str.size () - 2);
+ if (str.length () > 1 && str.at (str.size () - 1) == '/') {
+ std::string regexp_str = str.substr (1, str.size () - 2);
if (slot != Xapian::BAD_VALUENO) {
RegexpPostingSource *postings = new RegexpPostingSource (slot, regexp_str);
return Xapian::Query (postings->release ());
std::vector<std::string> terms;
regex_t regexp;
- compile_regex(regexp, regexp_str.c_str ());
+ compile_regex (regexp, regexp_str.c_str ());
for (Xapian::TermIterator it = notmuch->xapian_db->allterms_begin (term_prefix);
it != notmuch->xapian_db->allterms_end (); ++it) {
- if (regexec (®exp, (*it).c_str () + term_prefix.size(),
+ if (regexec (®exp, (*it).c_str () + term_prefix.size (),
0, NULL, 0) == 0)
- terms.push_back(*it);
+ terms.push_back (*it);
}
- return Xapian::Query (Xapian::Query::OP_OR, terms.begin(), terms.end());
+ return Xapian::Query (Xapian::Query::OP_OR, terms.begin (), terms.end ());
}
} else {
throw Xapian::QueryParserError ("unmatched regex delimiter in '" + str + "'");
* phrase parsing, when possible */
std::string query_str;
- if (str.find (' ') != std::string::npos)
+ if (*str.rbegin () != '*' || str.find (' ') != std::string::npos)
query_str = '"' + str + '"';
else
query_str = str;
}
}
}
-#endif