annotate src/lib-storage/mail-search.h @ 9266:cd29b745c8dd HEAD

configure: clock_gettime()'s -lrt adding dropped everything else from $LIBS.
author Timo Sirainen <tss@iki.fi>
date Mon, 27 Jul 2009 06:32:42 -0400
parents ef33393452f7
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6410
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5599
diff changeset
1 #ifndef MAIL_SEARCH_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5599
diff changeset
2 #define MAIL_SEARCH_H
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
7619
56f55bd35aa5 Moved IMAP messageset handling to lib-imap/ and searching to lib-storage/.
Timo Sirainen <tss@iki.fi>
parents: 7618
diff changeset
4 #include "seq-range-array.h"
6962
659e4a606aae Replaced SEARCH_<flag> with a generic SEARCH_FLAGS. Use value.size for
Timo Sirainen <tss@iki.fi>
parents: 6899
diff changeset
5 #include "mail-types.h"
7909
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
6 #include "mail-thread.h"
6962
659e4a606aae Replaced SEARCH_<flag> with a generic SEARCH_FLAGS. Use value.size for
Timo Sirainen <tss@iki.fi>
parents: 6899
diff changeset
7
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
8 enum mail_search_arg_type {
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 SEARCH_OR,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 SEARCH_SUB,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents: 1844
diff changeset
12 /* sequence sets */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 SEARCH_ALL,
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents: 1844
diff changeset
14 SEARCH_SEQSET,
7618
6dbd70663adf Added support for SEARCH_UIDSET.
Timo Sirainen <tss@iki.fi>
parents: 7284
diff changeset
15 SEARCH_UIDSET,
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 /* flags */
6962
659e4a606aae Replaced SEARCH_<flag> with a generic SEARCH_FLAGS. Use value.size for
Timo Sirainen <tss@iki.fi>
parents: 6899
diff changeset
18 SEARCH_FLAGS,
6965
ae369569e7de SEARCH_KEYWORDS now uses struct mail_keywords instead of a string array.
Timo Sirainen <tss@iki.fi>
parents: 6962
diff changeset
19 SEARCH_KEYWORDS,
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 /* dates */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 SEARCH_BEFORE,
5599
6789ba80419b Parse search dates already in IMAP code.
Timo Sirainen <tss@iki.fi>
parents: 4942
diff changeset
23 SEARCH_ON, /* time must point to beginning of the day */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 SEARCH_SINCE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 SEARCH_SENTBEFORE,
5599
6789ba80419b Parse search dates already in IMAP code.
Timo Sirainen <tss@iki.fi>
parents: 4942
diff changeset
26 SEARCH_SENTON, /* time must point to beginning of the day */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 SEARCH_SENTSINCE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 /* sizes */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 SEARCH_SMALLER,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 SEARCH_LARGER,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 /* headers */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 SEARCH_HEADER,
1672
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
35 SEARCH_HEADER_ADDRESS,
7284
346d4a44c2f4 SEARCH SUBJECT now changes LWSP to spaces to match ENVELOPE's subject field.
Timo Sirainen <tss@iki.fi>
parents: 6965
diff changeset
36 SEARCH_HEADER_COMPRESS_LWSP,
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 /* body */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 SEARCH_BODY,
4942
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4906
diff changeset
40 SEARCH_TEXT,
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4906
diff changeset
41 SEARCH_BODY_FAST,
7620
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
42 SEARCH_TEXT_FAST,
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
43
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
44 /* extensions */
7909
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
45 SEARCH_MODSEQ,
7910
c1bbdc2b262e FETCH X-MAILBOX and SEARCH X-MAILBOX can be used with virtual mailboxes to
Timo Sirainen <tss@iki.fi>
parents: 7909
diff changeset
46 SEARCH_INTHREAD,
8077
6d51328896d6 Added the concept of Global UIDs that are preserved across copies.
Timo Sirainen <tss@iki.fi>
parents: 7910
diff changeset
47 SEARCH_GUID,
7910
c1bbdc2b262e FETCH X-MAILBOX and SEARCH X-MAILBOX can be used with virtual mailboxes to
Timo Sirainen <tss@iki.fi>
parents: 7909
diff changeset
48 SEARCH_MAILBOX
7620
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
49 };
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
50
7640
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
51 enum mail_search_arg_flag {
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
52 /* For (SENT)BEFORE/SINCE/ON searches: Don't drop timezone from
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
53 comparisons */
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
54 MAIL_SEARCH_ARG_FLAG_USE_TZ = 0x01,
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
55 };
c78e9204f3f2 Implemented WITHIN extension.
Timo Sirainen <tss@iki.fi>
parents: 7620
diff changeset
56
7620
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
57 enum mail_search_modseq_type {
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
58 MAIL_SEARCH_MODSEQ_TYPE_ANY = 0,
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
59 MAIL_SEARCH_MODSEQ_TYPE_PRIVATE,
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
60 MAIL_SEARCH_MODSEQ_TYPE_SHARED
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
61 };
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
62
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
63 struct mail_search_modseq {
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
64 uint64_t modseq;
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
65 enum mail_search_modseq_type type;
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
66 };
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
68 struct mail_search_arg {
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
69 struct mail_search_arg *next;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
71 enum mail_search_arg_type type;
1915
79790750c349 importing new index code. mbox still broken.
Timo Sirainen <tss@iki.fi>
parents: 1844
diff changeset
72 struct {
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
73 struct mail_search_arg *subargs;
7619
56f55bd35aa5 Moved IMAP messageset handling to lib-imap/ and searching to lib-storage/.
Timo Sirainen <tss@iki.fi>
parents: 7618
diff changeset
74 ARRAY_TYPE(seq_range) seqset;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75 const char *str;
5599
6789ba80419b Parse search dates already in IMAP code.
Timo Sirainen <tss@iki.fi>
parents: 4942
diff changeset
76 time_t time;
6962
659e4a606aae Replaced SEARCH_<flag> with a generic SEARCH_FLAGS. Use value.size for
Timo Sirainen <tss@iki.fi>
parents: 6899
diff changeset
77 uoff_t size;
659e4a606aae Replaced SEARCH_<flag> with a generic SEARCH_FLAGS. Use value.size for
Timo Sirainen <tss@iki.fi>
parents: 6899
diff changeset
78 enum mail_flags flags;
7909
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
79 enum mail_search_arg_flag search_flags;
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
80 enum mail_thread_type thread_type;
6965
ae369569e7de SEARCH_KEYWORDS now uses struct mail_keywords instead of a string array.
Timo Sirainen <tss@iki.fi>
parents: 6962
diff changeset
81 struct mail_keywords *keywords;
7620
4b8c1c164d8f Initial CONDSTORE support.
Timo Sirainen <tss@iki.fi>
parents: 7619
diff changeset
82 struct mail_search_modseq *modseq;
7909
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
83 struct mail_search_args *search_args;
bf9c51edbc66 Added non-optimized support for SEARCH INTHREAD.
Timo Sirainen <tss@iki.fi>
parents: 7908
diff changeset
84 struct mail_search_result *search_result;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 } value;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86
568
f2aa58c2afd0 SEARCH CHARSET support. Currently we do it through iconv() and only ASCII
Timo Sirainen <tss@iki.fi>
parents: 444
diff changeset
87 void *context;
1672
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
88 const char *hdr_field_name; /* for SEARCH_HEADER* */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 unsigned int not:1;
1844
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
90 unsigned int match_always:1; /* result = 1 always */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91
1069
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
92 int result; /* -1 = unknown, 0 = unmatched, 1 = matched */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 };
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
95 struct mail_search_args {
8951
77fb2731830b mail_search_args_[de]init() calls stack now. Last unref is still allowed without deiniting.
Timo Sirainen <tss@iki.fi>
parents: 8751
diff changeset
96 int refcount, init_refcount;
77fb2731830b mail_search_args_[de]init() calls stack now. Last unref is still allowed without deiniting.
Timo Sirainen <tss@iki.fi>
parents: 8751
diff changeset
97
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
98 pool_t pool;
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
99 struct mailbox *box;
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
100 struct mail_search_arg *args;
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
101 const char *charset;
7908
1e69c84a1e5a Search code cleanups and minor optimizations.
Timo Sirainen <tss@iki.fi>
parents: 7655
diff changeset
102
1e69c84a1e5a Search code cleanups and minor optimizations.
Timo Sirainen <tss@iki.fi>
parents: 7655
diff changeset
103 unsigned int simplified:1;
1e69c84a1e5a Search code cleanups and minor optimizations.
Timo Sirainen <tss@iki.fi>
parents: 7655
diff changeset
104 unsigned int have_inthreads:1;
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
105 };
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
106
1069
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
107 #define ARG_SET_RESULT(arg, res) \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
108 STMT_START { \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
109 (arg)->result = !(arg)->not ? (res) : \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
110 (res) == -1 ? -1 : !(res); \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
111 } STMT_END
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
112
4903
204d7edc7cdc Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
113 typedef void mail_search_foreach_callback_t(struct mail_search_arg *arg,
204d7edc7cdc Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
114 void *context);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
116 /* Allocate keywords for search arguments. If change_uidsets is TRUE,
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
117 change uidsets to seqsets. */
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
118 void mail_search_args_init(struct mail_search_args *args,
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
119 struct mailbox *box, bool change_uidsets,
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
120 const ARRAY_TYPE(seq_range) *search_saved_uidset);
8751
98e46e8153e4 mail-storage API: Added some function description comments.
Timo Sirainen <tss@iki.fi>
parents: 8144
diff changeset
121 /* Free keywords. The args can initialized afterwards again if needed.
98e46e8153e4 mail-storage API: Added some function description comments.
Timo Sirainen <tss@iki.fi>
parents: 8144
diff changeset
122 The args can be reused for other queries after calling this. */
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
123 void mail_search_args_deinit(struct mail_search_args *args);
7655
ec49260ed4ee SEARCH UPDATE: Convert seqsets in saved results to uidsets so that they can
Timo Sirainen <tss@iki.fi>
parents: 7642
diff changeset
124 /* Convert sequence sets in args to UIDs. */
ec49260ed4ee SEARCH UPDATE: Convert seqsets in saved results to uidsets so that they can
Timo Sirainen <tss@iki.fi>
parents: 7642
diff changeset
125 void mail_search_args_seq2uid(struct mail_search_args *args);
8144
ea5f84256c3f Added mail_search_args_equal().
Timo Sirainen <tss@iki.fi>
parents: 8077
diff changeset
126 /* Returns TRUE if the two search arguments are fully compatible.
ea5f84256c3f Added mail_search_args_equal().
Timo Sirainen <tss@iki.fi>
parents: 8077
diff changeset
127 Always returns FALSE if there are seqsets, since they may point to different
ea5f84256c3f Added mail_search_args_equal().
Timo Sirainen <tss@iki.fi>
parents: 8077
diff changeset
128 messages depending on when the search is run. */
ea5f84256c3f Added mail_search_args_equal().
Timo Sirainen <tss@iki.fi>
parents: 8077
diff changeset
129 bool mail_search_args_equal(const struct mail_search_args *args1,
ea5f84256c3f Added mail_search_args_equal().
Timo Sirainen <tss@iki.fi>
parents: 8077
diff changeset
130 const struct mail_search_args *args2);
7642
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
131
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
132 void mail_search_args_ref(struct mail_search_args *args);
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
133 void mail_search_args_unref(struct mail_search_args **args);
077bb84e9e77 Make mail_search_args an independent structure that can be used for multiple
Timo Sirainen <tss@iki.fi>
parents: 7640
diff changeset
134
9043
ef33393452f7 Added mail_search_args_dup().
Timo Sirainen <tss@iki.fi>
parents: 8951
diff changeset
135 struct mail_search_args *
ef33393452f7 Added mail_search_args_dup().
Timo Sirainen <tss@iki.fi>
parents: 8951
diff changeset
136 mail_search_args_dup(const struct mail_search_args *args);
ef33393452f7 Added mail_search_args_dup().
Timo Sirainen <tss@iki.fi>
parents: 8951
diff changeset
137
1844
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
138 /* Reset the results in search arguments. match_always is reset only if
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
139 full_reset is TRUE. */
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 1915
diff changeset
140 void mail_search_args_reset(struct mail_search_arg *args, bool full_reset);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
141
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
142 /* goes through arguments in list that don't have a result yet.
1069
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
143 Returns 1 = search matched, 0 = search unmatched, -1 = don't know yet */
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
144 int mail_search_args_foreach(struct mail_search_arg *args,
4903
204d7edc7cdc Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents: 3863
diff changeset
145 mail_search_foreach_callback_t *callback,
953
411006be3c66 Naming change for function typedefs.
Timo Sirainen <tss@iki.fi>
parents: 903
diff changeset
146 void *context);
4906
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
147 #ifdef CONTEXT_TYPE_SAFETY
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
148 # define mail_search_args_foreach(args, callback, context) \
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
149 ({(void)(1 ? 0 : callback((struct mail_search_arg *)NULL, context)); \
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
150 mail_search_args_foreach(args, \
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
151 (mail_search_foreach_callback_t *)callback, context); })
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
152 #else
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
153 # define mail_search_args_foreach(args, callback, context) \
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
154 mail_search_args_foreach(args, \
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
155 (mail_search_foreach_callback_t *)callback, context)
0c3c948412c5 Type safe callbacks weren't as easy as I thought. Only callback(void
Timo Sirainen <tss@iki.fi>
parents: 4903
diff changeset
156 #endif
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
157
1672
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
158 /* Fills have_headers and have_body based on if such search argument exists
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
159 that needs to be checked. Returns the headers that we're searching for, or
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
160 NULL if we're searching for TEXT. */
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
161 const char *const *
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
162 mail_search_args_analyze(struct mail_search_arg *args,
3863
55df57c028d4 Added "bool" type and changed all ints that were used as booleans to bool.
Timo Sirainen <tss@iki.fi>
parents: 1915
diff changeset
163 bool *have_headers, bool *have_body);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
164
7908
1e69c84a1e5a Search code cleanups and minor optimizations.
Timo Sirainen <tss@iki.fi>
parents: 7655
diff changeset
165 /* Simplify/optimize search arguments */
1e69c84a1e5a Search code cleanups and minor optimizations.
Timo Sirainen <tss@iki.fi>
parents: 7655
diff changeset
166 void mail_search_args_simplify(struct mail_search_args *args);
6899
69babcc2fb80 Simplify search arguments immediately when calling mailbox_search_init().
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
167
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
168 #endif