annotate src/plugins/fts/fts-api-private.h @ 9292:96b764649cbb HEAD

fts: Fixed crashing with Squat. A better solution would be for Squat to use existing mailboxes' Squat indexes, but for now this isn't done.
author Timo Sirainen <tss@iki.fi>
date Fri, 07 Aug 2009 15:12:04 -0400
parents ffb37c392166
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: 5405
diff changeset
1 #ifndef FTS_API_PRIVATE_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5405
diff changeset
2 #define FTS_API_PRIVATE_H
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "fts-api.h"
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 struct fts_backend_vfuncs {
4709
d2693511dd33 Let FTS backend init function take a struct mailbox instead of path.
Timo Sirainen <tss@iki.fi>
parents: 4618
diff changeset
7 struct fts_backend *(*init)(struct mailbox *box);
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 void (*deinit)(struct fts_backend *backend);
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
4712
70ca205ce6f1 Added fts_backend_get_last_uid() which is first used to check if
Timo Sirainen <tss@iki.fi>
parents: 4709
diff changeset
10 int (*get_last_uid)(struct fts_backend *backend, uint32_t *last_uid_r);
8495
ffb37c392166 Finished making full text search indexes work fast with virtual mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 8006
diff changeset
11 int (*get_all_last_uids)(struct fts_backend *backend, pool_t pool,
ffb37c392166 Finished making full text search indexes work fast with virtual mailboxes.
Timo Sirainen <tss@iki.fi>
parents: 8006
diff changeset
12 ARRAY_TYPE(fts_backend_uid_map) *last_uids);
4712
70ca205ce6f1 Added fts_backend_get_last_uid() which is first used to check if
Timo Sirainen <tss@iki.fi>
parents: 4709
diff changeset
13
6898
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
14 int (*build_init)(struct fts_backend *backend, uint32_t *last_uid_r,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
15 struct fts_backend_build_context **ctx_r);
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 int (*build_more)(struct fts_backend_build_context *ctx, uint32_t uid,
5341
acd4ed841b01 Separate headers and body in building and searching. Added support for
Timo Sirainen <tss@iki.fi>
parents: 4942
diff changeset
17 const unsigned char *data, size_t size, bool headers);
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 int (*build_deinit)(struct fts_backend_build_context *ctx);
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
4714
1acce53d423e ADd support for expunges
Timo Sirainen <tss@iki.fi>
parents: 4712
diff changeset
20 void (*expunge)(struct fts_backend *backend, struct mail *mail);
4854
09b9b1e8f73d Added fts_backend_expunge_finish() virtual backend function.
Timo Sirainen <tss@iki.fi>
parents: 4714
diff changeset
21 void (*expunge_finish)(struct fts_backend *backend,
09b9b1e8f73d Added fts_backend_expunge_finish() virtual backend function.
Timo Sirainen <tss@iki.fi>
parents: 4714
diff changeset
22 struct mailbox *box, bool committed);
4714
1acce53d423e ADd support for expunges
Timo Sirainen <tss@iki.fi>
parents: 4712
diff changeset
23
4877
63d3b76e44fe Added lock/unlock backend operations.
Timo Sirainen <tss@iki.fi>
parents: 4854
diff changeset
24 int (*lock)(struct fts_backend *backend);
63d3b76e44fe Added lock/unlock backend operations.
Timo Sirainen <tss@iki.fi>
parents: 4854
diff changeset
25 void (*unlock)(struct fts_backend *backend);
63d3b76e44fe Added lock/unlock backend operations.
Timo Sirainen <tss@iki.fi>
parents: 4854
diff changeset
26
6898
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
27 int (*lookup)(struct fts_backend *backend, const char *key,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
28 enum fts_lookup_flags flags,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
29 ARRAY_TYPE(seq_range) *definite_uids,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
30 ARRAY_TYPE(seq_range) *maybe_uids);
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
31 int (*filter)(struct fts_backend *backend, const char *key,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
32 enum fts_lookup_flags flags,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
33 ARRAY_TYPE(seq_range) *definite_uids,
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
34 ARRAY_TYPE(seq_range) *maybe_uids);
8004
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
35
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
36 int (*lookup2)(struct fts_backend_lookup_context *ctx,
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
37 ARRAY_TYPE(seq_range) *definite_uids,
8006
0a3b5ddb0869 Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents: 8004
diff changeset
38 ARRAY_TYPE(seq_range) *maybe_uids,
0a3b5ddb0869 Added support for sorting by X-SCORE. Currently it's only set by fts-solr.
Timo Sirainen <tss@iki.fi>
parents: 8004
diff changeset
39 ARRAY_TYPE(fts_score_map) *scores);
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 };
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41
4942
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
42 enum fts_backend_flags {
6898
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
43 /* If set, the backend is used for TEXT and BODY search
4942
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
44 optimizations. Otherwise only TEXT_FAST and BODY_FAST are
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
45 optimized. */
9292
96b764649cbb fts: Fixed crashing with Squat.
Timo Sirainen <tss@iki.fi>
parents: 8495
diff changeset
46 FTS_BACKEND_FLAG_SUBSTRING_LOOKUPS = 0x01,
96b764649cbb fts: Fixed crashing with Squat.
Timo Sirainen <tss@iki.fi>
parents: 8495
diff changeset
47 /* Backend supports virtual mailbox lookups. */
96b764649cbb fts: Fixed crashing with Squat.
Timo Sirainen <tss@iki.fi>
parents: 8495
diff changeset
48 FTS_BACKEND_FLAG_VIRTUAL_LOOKUPS = 0x02
4942
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
49 };
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
50
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 struct fts_backend {
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 const char *name;
4942
b382b21409b5 Added support for X-BODY-FAST and X-TEXT-FAST SEARCH arguments. FTS plugin
Timo Sirainen <tss@iki.fi>
parents: 4877
diff changeset
53 enum fts_backend_flags flags;
4618
a1621235f405 API updates and some fixes
Timo Sirainen <tss@iki.fi>
parents: 4609
diff changeset
54
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 struct fts_backend_vfuncs v;
7238
983c6ea05de0 Compile fix with some compilers
Timo Sirainen <tss@iki.fi>
parents: 7207
diff changeset
56 struct mailbox *box;
5405
22d04968449a Don't crash if another search is started while we're still building the
Timo Sirainen <tss@iki.fi>
parents: 5341
diff changeset
57
6898
e739cffd05ef FTS API changes and Squat rewrite. Squat is still missing expunge handling.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
58 unsigned int locked:1;
5405
22d04968449a Don't crash if another search is started while we're still building the
Timo Sirainen <tss@iki.fi>
parents: 5341
diff changeset
59 unsigned int building:1;
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 };
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62 struct fts_backend_build_context {
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 struct fts_backend *backend;
4618
a1621235f405 API updates and some fixes
Timo Sirainen <tss@iki.fi>
parents: 4609
diff changeset
64
a1621235f405 API updates and some fixes
Timo Sirainen <tss@iki.fi>
parents: 4609
diff changeset
65 unsigned int failed:1;
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 };
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67
8004
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
68 struct fts_backend_lookup_field {
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
69 const char *key;
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
70 enum fts_lookup_flags flags;
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
71 };
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
72
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
73 struct fts_backend_lookup_context {
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
74 struct fts_backend *backend;
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
75 pool_t pool;
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
76
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
77 ARRAY_DEFINE(fields, struct fts_backend_lookup_field);
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
78 };
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
79
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 void fts_backend_register(const struct fts_backend *backend);
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 void fts_backend_unregister(const char *name);
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82
8004
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
83 void fts_filter_uids(ARRAY_TYPE(seq_range) *definite_dest,
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
84 const ARRAY_TYPE(seq_range) *definite_filter,
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
85 ARRAY_TYPE(seq_range) *maybe_dest,
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
86 const ARRAY_TYPE(seq_range) *maybe_filter);
6418d4c0ff16 fts: Added a new lookup API where the backend can look up all the fields
Timo Sirainen <tss@iki.fi>
parents: 7238
diff changeset
87
4609
48a16f1254b5 Added full text search plugin framework. Still missing support for handling
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 #endif