dovecot-2.0: lib-storage optimization: SEARCH_MAILBOX* should be...

dovecot at dovecot.org dovecot at dovecot.org
Fri Apr 30 15:36:02 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/957e907834e7
changeset: 11234:957e907834e7
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Apr 30 15:35:59 2010 +0300
description:
lib-storage optimization: SEARCH_MAILBOX* should be checked before cache lookups.

diffstat:

 src/lib-storage/index/index-search.c |  41 +++++++++++++++++++++--------------------
 1 files changed, 21 insertions(+), 20 deletions(-)

diffs (72 lines):

diff -r 5d0027f17bd8 -r 957e907834e7 src/lib-storage/index/index-search.c
--- a/src/lib-storage/index/index-search.c	Fri Apr 30 15:33:15 2010 +0300
+++ b/src/lib-storage/index/index-search.c	Fri Apr 30 15:35:59 2010 +0300
@@ -150,6 +150,8 @@
 				  struct mail_search_arg *arg,
 				  const struct mail_index_record *rec)
 {
+	uint8_t guid[MAIL_GUID_128_SIZE];
+	const char *str;
 	enum mail_flags flags;
 	uint64_t modseq;
 	int ret;
@@ -184,6 +186,25 @@
 		}
 		return modseq >= arg->value.modseq->modseq;
 	}
+	case SEARCH_MAILBOX:
+		if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME,
+				     &str) < 0)
+			return -1;
+
+		if (strcasecmp(str, "INBOX") == 0)
+			return strcasecmp(arg->value.str, "INBOX") == 0;
+		return strcmp(str, arg->value.str) == 0;
+	case SEARCH_MAILBOX_GUID:
+		if (mailbox_get_guid(ctx->mail->box, guid) < 0)
+			return -1;
+
+		return strcmp(mail_guid_128_to_string(guid),
+			      arg->value.str) == 0;
+	case SEARCH_MAILBOX_GLOB:
+		if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME,
+				     &str) < 0)
+			return -1;
+		return imap_match(arg->value.mailbox_glob, str) == IMAP_MATCH_YES;
 	default:
 		return -1;
 	}
@@ -218,7 +239,6 @@
 	time_t date;
 	int tz_offset;
 	bool have_tz_offset;
-	uint8_t guid[MAIL_GUID_128_SIZE];
 
 	switch (arg->type) {
 	/* internal dates */
@@ -279,25 +299,6 @@
 		if (mail_get_special(ctx->mail, MAIL_FETCH_GUID, &str) < 0)
 			return -1;
 		return strcmp(str, arg->value.str) == 0;
-	case SEARCH_MAILBOX:
-		if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME,
-				     &str) < 0)
-			return -1;
-
-		if (strcasecmp(str, "INBOX") == 0)
-			return strcasecmp(arg->value.str, "INBOX") == 0;
-		return strcmp(str, arg->value.str) == 0;
-	case SEARCH_MAILBOX_GUID:
-		if (mailbox_get_guid(ctx->mail->box, guid) < 0)
-			return -1;
-
-		return strcmp(mail_guid_128_to_string(guid),
-			      arg->value.str) == 0;
-	case SEARCH_MAILBOX_GLOB:
-		if (mail_get_special(ctx->mail, MAIL_FETCH_MAILBOX_NAME,
-				     &str) < 0)
-			return -1;
-		return imap_match(arg->value.mailbox_glob, str) == IMAP_MATCH_YES;
 	default:
 		return -1;
 	}


More information about the dovecot-cvs mailing list