Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8945:43b68bd6023a HEAD
fts-solr: Fixes with virtual mailboxes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 14 Apr 2009 16:51:36 -0400 |
parents | 1143c696126a |
children | 7e639229c2c8 |
files | src/plugins/fts-solr/fts-backend-solr.c |
diffstat | 1 files changed, 21 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/fts-solr/fts-backend-solr.c Mon Apr 13 19:20:42 2009 -0400 +++ b/src/plugins/fts-solr/fts-backend-solr.c Tue Apr 14 16:51:36 2009 -0400 @@ -185,17 +185,23 @@ static void solr_add_ns_query(string_t *str, struct fts_backend *_backend, - struct mail_namespace *ns) + struct mail_namespace *ns, bool neg) { struct solr_fts_backend *backend = (struct solr_fts_backend *)_backend; while (ns->alias_for != NULL) ns = ns->alias_for; - if (ns == backend->default_ns || *ns->prefix == '\0') - str_append(str, " -ns:[* TO *]"); - else { - str_append(str, " %2Bns:"); + if (ns == backend->default_ns || *ns->prefix == '\0') { + if (!neg) + str_append(str, " -ns:[* TO *]"); + else + str_append(str, " +ns:[* TO *]"); + } else { + if (!neg) + str_append(str, " +ns:"); + else + str_append(str, " -ns:"); solr_quote(str, ns->prefix); } } @@ -207,7 +213,7 @@ string_t *tmp; tmp = t_str_new(64); - solr_add_ns_query(tmp, backend, ns); + solr_add_ns_query(tmp, backend, ns, FALSE); solr_connection_http_escape(solr_conn, str, str_c(tmp)); } @@ -331,6 +337,11 @@ if (!mail_namespace_update_name(pattern->ns, &name)) name = mail_namespace_fix_sep(pattern->ns, name); + if (strcmp(name, "*") == 0) { + str_append(str, "[* TO *]"); + return; + } + /* first check if there are any wildcards in the pattern */ for (p = name; *p != '\0'; p++) { if (*p == '%' || *p == '*') @@ -392,7 +403,7 @@ str_append_c(fq, '('); str_append(fq, "+box:"); solr_add_pattern(fq, &includes[i]); - solr_add_ns_query(fq, _backend, includes[i].ns); + solr_add_ns_query(fq, _backend, includes[i].ns, FALSE); str_append_c(fq, ')'); } str_append_c(fq, ')'); @@ -401,19 +412,13 @@ for (i = 0; i < exc_count; i++) { if (str_len(fq) > 0) str_append_c(fq, ' '); - str_append_c(fq, '('); - str_append(fq, "-box:"); + str_append(fq, "NOT ("); + str_append(fq, "box:"); solr_add_pattern(fq, &excludes[i]); for (ns = excludes[i].ns; ns->alias_for != NULL; ) ns = ns->alias_for; - if (ns == backend->default_ns) { - str_append(fq, " OR NOT"); - solr_add_ns_query(fq, _backend, ns); - } else if (*ns->prefix != '\0') { - str_append(fq, " OR -ns:"); - solr_quote(fq, ns->prefix); - } + solr_add_ns_query(fq, _backend, ns, FALSE); str_append_c(fq, ')'); } if (str_len(fq) > 0) {