annotate src/lib-storage/mail-search.h @ 1844:4c2678dd65f1 HEAD

Some optimizations to messageset handling in search.
author Timo Sirainen <tss@iki.fi>
date Sun, 26 Oct 2003 21:41:09 +0200
parents 8920600a8cfc
children 79790750c349
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef __MAIL_SEARCH_H
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define __MAIL_SEARCH_H
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
4 enum mail_search_arg_type {
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 SEARCH_OR,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 SEARCH_SUB,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 /* message sets */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 SEARCH_ALL,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 SEARCH_SET,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 SEARCH_UID,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 /* flags */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 SEARCH_ANSWERED,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 SEARCH_DELETED,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 SEARCH_DRAFT,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 SEARCH_FLAGGED,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 SEARCH_SEEN,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 SEARCH_RECENT,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 SEARCH_KEYWORD,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 /* dates */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 SEARCH_BEFORE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 SEARCH_ON,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 SEARCH_SINCE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 SEARCH_SENTBEFORE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 SEARCH_SENTON,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 SEARCH_SENTSINCE,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 /* sizes */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 SEARCH_SMALLER,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 SEARCH_LARGER,
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 /* headers */
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 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
36 SEARCH_HEADER_ADDRESS,
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,
1672
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
40 SEARCH_TEXT
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
41 };
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
43 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
44 struct mail_search_arg *next;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
46 enum mail_search_arg_type type;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 union {
903
fd8888f6f037 Naming style changes, finally got tired of most of the typedefs. Also the
Timo Sirainen <tss@iki.fi>
parents: 568
diff changeset
48 struct mail_search_arg *subargs;
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 const char *str;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 } value;
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
568
f2aa58c2afd0 SEARCH CHARSET support. Currently we do it through iconv() and only ASCII
Timo Sirainen <tss@iki.fi>
parents: 444
diff changeset
52 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
53 const char *hdr_field_name; /* for SEARCH_HEADER* */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 unsigned int not:1;
1844
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
55 unsigned int match_always:1; /* result = 1 always */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
1069
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
57 int result; /* -1 = unknown, 0 = unmatched, 1 = matched */
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 };
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59
1069
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
60 #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
61 STMT_START { \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
62 (arg)->result = !(arg)->not ? (res) : \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
63 (res) == -1 ? -1 : !(res); \
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
64 } STMT_END
8024a2cdc406 Several search fixes, mostly related to matching multiple conditions.
Timo Sirainen <tss@iki.fi>
parents: 988
diff changeset
65
953
411006be3c66 Naming change for function typedefs.
Timo Sirainen <tss@iki.fi>
parents: 903
diff changeset
66 typedef void (*mail_search_foreach_callback_t)(struct mail_search_arg *arg,
411006be3c66 Naming change for function typedefs.
Timo Sirainen <tss@iki.fi>
parents: 903
diff changeset
67 void *context);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68
1844
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
69 /* 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
70 full_reset is TRUE. */
4c2678dd65f1 Some optimizations to messageset handling in search.
Timo Sirainen <tss@iki.fi>
parents: 1672
diff changeset
71 void mail_search_args_reset(struct mail_search_arg *args, int full_reset);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 /* 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
74 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
75 int mail_search_args_foreach(struct mail_search_arg *args,
953
411006be3c66 Naming change for function typedefs.
Timo Sirainen <tss@iki.fi>
parents: 903
diff changeset
76 mail_search_foreach_callback_t callback,
411006be3c66 Naming change for function typedefs.
Timo Sirainen <tss@iki.fi>
parents: 903
diff changeset
77 void *context);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78
1672
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
79 /* 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
80 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
81 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
82 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
83 mail_search_args_analyze(struct mail_search_arg *args,
8920600a8cfc Index cache file rewrite. It's not finished yet and mbox support is
Timo Sirainen <tss@iki.fi>
parents: 1069
diff changeset
84 int *have_headers, int *have_body);
0
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 #endif