Mercurial > dovecot > core-2.2
annotate src/lib-dict/dict-private.h @ 22652:09523ad05bef
director: Log whenever HOST-RESET-USERS is used
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Sun, 05 Nov 2017 22:53:23 +0200 |
parents | b74ab3872a80 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
4517
diff
changeset
|
1 #ifndef DICT_PRIVATE_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
4517
diff
changeset
|
2 #define DICT_PRIVATE_H |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
21379
2efa6abf97df
lib-dict: Add dict_transaction_set_timestamp()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20884
diff
changeset
|
4 #include <time.h> |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "dict.h" |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 struct dict_vfuncs { |
15067
9bff478f81fd
dict_init() API changed to return int.
Timo Sirainen <tss@iki.fi>
parents:
14906
diff
changeset
|
8 int (*init)(struct dict *dict_driver, const char *uri, |
17751
77e71a45a475
lib-dict: Changed dict.init() API to take struct dict_settings and added dict_init_full().
Timo Sirainen <tss@iki.fi>
parents:
17043
diff
changeset
|
9 const struct dict_settings *set, |
15218
22c22d704422
lib-dict: dict_init() now returns error string instead of logging it
Timo Sirainen <tss@iki.fi>
parents:
15067
diff
changeset
|
10 struct dict **dict_r, const char **error_r); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 void (*deinit)(struct dict *dict); |
9889
0f7b25f3e2ce
dict: Added support for async commits. Changed dict_atomic_inc() behavior.
Timo Sirainen <tss@iki.fi>
parents:
9545
diff
changeset
|
12 int (*wait)(struct dict *dict); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 |
3787
40600601502e
Added dictinary lookup server and a "proxy" dict implementation to talk to
Timo Sirainen <tss@iki.fi>
parents:
3737
diff
changeset
|
14 int (*lookup)(struct dict *dict, pool_t pool, |
40600601502e
Added dictinary lookup server and a "proxy" dict implementation to talk to
Timo Sirainen <tss@iki.fi>
parents:
3737
diff
changeset
|
15 const char *key, const char **value_r); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 struct dict_iterate_context * |
10752
6aa76d89195d
dict: Added dict_iterate_init_multiple().
Timo Sirainen <tss@iki.fi>
parents:
10659
diff
changeset
|
18 (*iterate_init)(struct dict *dict, const char *const *paths, |
4516
aa2f73a4df26
Dictionary changes: Added support for defining value's type. Key is still always a string. Added support for sorting the iteration replies. Added dict_unset(). Added Berkeley DB support. Most of the code written by Tianyan Liu.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4511
diff
changeset
|
19 enum dict_iterate_flags flags); |
10659
7309b5c84ca9
lib-dict: Changed dict_iterate API.
Timo Sirainen <tss@iki.fi>
parents:
9889
diff
changeset
|
20 bool (*iterate)(struct dict_iterate_context *ctx, |
7309b5c84ca9
lib-dict: Changed dict_iterate API.
Timo Sirainen <tss@iki.fi>
parents:
9889
diff
changeset
|
21 const char **key_r, const char **value_r); |
7309b5c84ca9
lib-dict: Changed dict_iterate API.
Timo Sirainen <tss@iki.fi>
parents:
9889
diff
changeset
|
22 int (*iterate_deinit)(struct dict_iterate_context *ctx); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 struct dict_transaction_context *(*transaction_init)(struct dict *dict); |
8660
d8a56ea9f408
Added dict_transaction_commit_async().
Timo Sirainen <tss@iki.fi>
parents:
8300
diff
changeset
|
25 int (*transaction_commit)(struct dict_transaction_context *ctx, |
9889
0f7b25f3e2ce
dict: Added support for async commits. Changed dict_atomic_inc() behavior.
Timo Sirainen <tss@iki.fi>
parents:
9545
diff
changeset
|
26 bool async, |
0f7b25f3e2ce
dict: Added support for async commits. Changed dict_atomic_inc() behavior.
Timo Sirainen <tss@iki.fi>
parents:
9545
diff
changeset
|
27 dict_transaction_commit_callback_t *callback, |
0f7b25f3e2ce
dict: Added support for async commits. Changed dict_atomic_inc() behavior.
Timo Sirainen <tss@iki.fi>
parents:
9545
diff
changeset
|
28 void *context); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 void (*transaction_rollback)(struct dict_transaction_context *ctx); |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 void (*set)(struct dict_transaction_context *ctx, |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 const char *key, const char *value); |
4516
aa2f73a4df26
Dictionary changes: Added support for defining value's type. Key is still always a string. Added support for sorting the iteration replies. Added dict_unset(). Added Berkeley DB support. Most of the code written by Tianyan Liu.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4511
diff
changeset
|
33 void (*unset)(struct dict_transaction_context *ctx, |
aa2f73a4df26
Dictionary changes: Added support for defining value's type. Key is still always a string. Added support for sorting the iteration replies. Added dict_unset(). Added Berkeley DB support. Most of the code written by Tianyan Liu.
Timo Sirainen <timo.sirainen@movial.fi>
parents:
4511
diff
changeset
|
34 const char *key); |
14900
87e14707d210
dict: Implemented dict_append()
Timo Sirainen <tss@iki.fi>
parents:
14808
diff
changeset
|
35 void (*append)(struct dict_transaction_context *ctx, |
87e14707d210
dict: Implemented dict_append()
Timo Sirainen <tss@iki.fi>
parents:
14808
diff
changeset
|
36 const char *key, const char *value); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 void (*atomic_inc)(struct dict_transaction_context *ctx, |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 const char *key, long long diff); |
19064
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
39 |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
40 void (*lookup_async)(struct dict *dict, const char *key, |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
41 dict_lookup_callback_t *callback, void *context); |
20341
b9a3058184f1
lib-dict: Added dict_switch_ioloop()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19064
diff
changeset
|
42 bool (*switch_ioloop)(struct dict *dict); |
21379
2efa6abf97df
lib-dict: Add dict_transaction_set_timestamp()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20884
diff
changeset
|
43 void (*set_timestamp)(struct dict_transaction_context *ctx, |
2efa6abf97df
lib-dict: Add dict_transaction_set_timestamp()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20884
diff
changeset
|
44 const struct timespec *ts); |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 }; |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 struct dict { |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 const char *name; |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 struct dict_vfuncs v; |
21413
91187182279c
lib-dict: Add assert to make sure all iterators are deinitialized.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21379
diff
changeset
|
51 unsigned int iter_count; |
21801
62499b1abc68
lib-dict: Track transaction counts
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21797
diff
changeset
|
52 unsigned int transaction_count; |
21836
b74ab3872a80
lib-dict: Keep a linked list of all transactions in dict.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21801
diff
changeset
|
53 struct dict_transaction_context *transactions; |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 }; |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 struct dict_iterate_context { |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 struct dict *dict; |
19064
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
58 |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
59 dict_iterate_callback_t *async_callback; |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
60 void *async_context; |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
61 |
d40d7f24ffcf
lib-dict: Added async API for lookup and iteration.
Timo Sirainen <tss@iki.fi>
parents:
17751
diff
changeset
|
62 unsigned int has_more:1; |
20884
c9e829c8a36f
lib-dict: Added dict_iterate_set_limit()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20668
diff
changeset
|
63 uint64_t row_count, max_rows; |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 }; |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 struct dict_transaction_context { |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 struct dict *dict; |
21836
b74ab3872a80
lib-dict: Keep a linked list of all transactions in dict.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
21801
diff
changeset
|
68 struct dict_transaction_context *prev, *next; |
4511
3f808dd8f568
If invalid key is given to dict_set() or dict_atomic_inc() fail the whole
Timo Sirainen <tss@iki.fi>
parents:
3967
diff
changeset
|
69 |
21379
2efa6abf97df
lib-dict: Add dict_transaction_set_timestamp()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20884
diff
changeset
|
70 struct timespec timestamp; |
2efa6abf97df
lib-dict: Add dict_transaction_set_timestamp()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20884
diff
changeset
|
71 |
4511
3f808dd8f568
If invalid key is given to dict_set() or dict_atomic_inc() fail the whole
Timo Sirainen <tss@iki.fi>
parents:
3967
diff
changeset
|
72 unsigned int changed:1; |
20668
44c049b65011
lib-dict: Added dict_transaction_no_slowness_warning()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20341
diff
changeset
|
73 unsigned int no_slowness_warning:1; |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 }; |
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 |
14786
211fbc872ed4
lib-dict: Added initial version of Redis support.
Timo Sirainen <tss@iki.fi>
parents:
10752
diff
changeset
|
76 extern struct dict dict_driver_client; |
8300
9d963e3bbe65
Added a simple flat file dict backend.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
77 extern struct dict dict_driver_file; |
17043
773e9ce608ed
lib-dict: Added "fs" wrapper dict backend, which uses lib-fs.
Timo Sirainen <tss@iki.fi>
parents:
15665
diff
changeset
|
78 extern struct dict dict_driver_fs; |
14808
b6df5871632a
lib-dict: Added memcached backend using its binary protocol.
Timo Sirainen <tss@iki.fi>
parents:
14786
diff
changeset
|
79 extern struct dict dict_driver_memcached; |
14906
96a9a086c052
lib-dict: Added memcached_ascii backend.
Timo Sirainen <tss@iki.fi>
parents:
14900
diff
changeset
|
80 extern struct dict dict_driver_memcached_ascii; |
14786
211fbc872ed4
lib-dict: Added initial version of Redis support.
Timo Sirainen <tss@iki.fi>
parents:
10752
diff
changeset
|
81 extern struct dict dict_driver_redis; |
15665
2c249941f9c2
dict: Added support for cdb backend.
Timo Sirainen <tss@iki.fi>
parents:
15218
diff
changeset
|
82 extern struct dict dict_driver_cdb; |
21797
3daf1ea24cf1
lib-dict: Add dict-fail driver
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21413
diff
changeset
|
83 extern struct dict dict_driver_fail; |
3daf1ea24cf1
lib-dict: Add dict-fail driver
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21413
diff
changeset
|
84 |
3daf1ea24cf1
lib-dict: Add dict-fail driver
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21413
diff
changeset
|
85 extern struct dict_iterate_context dict_iter_unsupported; |
3daf1ea24cf1
lib-dict: Add dict-fail driver
Aki Tuomi <aki.tuomi@dovecot.fi>
parents:
21413
diff
changeset
|
86 extern struct dict_transaction_context dict_transaction_unsupported; |
8300
9d963e3bbe65
Added a simple flat file dict backend.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
87 |
3737
d67092398377
Added dictionary API and implementation for SQL. It's meant for looking and
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 #endif |