]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
plugins/fts: expunge-log - query function to lookup GUID/UID
authorPhil Carmody <phil@dovecot.fi>
Tue, 20 Jan 2015 23:52:59 +0000 (01:52 +0200)
committerPhil Carmody <phil@dovecot.fi>
Tue, 20 Jan 2015 23:52:59 +0000 (01:52 +0200)
Constant time hash lookup for GUID. Log time lookup in seq_range array.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
src/plugins/fts/fts-expunge-log.c
src/plugins/fts/fts-expunge-log.h

index 02b60312cc206d268939fe4fbca8f91e7842ce60..f099ccce0ff2e0e5db2fd66f96a50d7b4c39dcce 100644 (file)
@@ -532,3 +532,14 @@ int fts_expunge_log_flatten(const char *path,
 
        return ret;
 }
+bool fts_expunge_log_contains(const struct fts_expunge_log_append_ctx *ctx,
+                             const guid_128_t mailbox_guid, uint32_t uid)
+{
+       const struct fts_expunge_log_mailbox *mailbox;
+       const uint8_t *guid_p = mailbox_guid;
+
+       mailbox = hash_table_lookup(ctx->mailboxes, guid_p);
+       if (mailbox == NULL)
+               return FALSE;
+       return seq_range_exists(&mailbox->uids, uid);   
+}
index 2240202615807c4e656d118a41986601332fbd71..0b4647fb748453154a105c2e737062ae9eb89f95 100644 (file)
@@ -41,4 +41,7 @@ int fts_expunge_log_read_end(struct fts_expunge_log_read_ctx **ctx);
    The struct it returns cannot be written, as it has no backing store */
 int fts_expunge_log_flatten(const char *path,
                            struct fts_expunge_log_append_ctx **flattened_r);
+bool fts_expunge_log_contains(const struct fts_expunge_log_append_ctx *ctx,
+                             const guid_128_t mailbox_guid, uint32_t uid);
+
 #endif