]> git.sur5r.net Git - openldap/blob - servers/slapd/back-mdb/proto-mdb.h
More for slap tools
[openldap] / servers / slapd / back-mdb / proto-mdb.h
1 /* $OpenLDAP$ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 2000-2011 The OpenLDAP Foundation.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted only as authorized by the OpenLDAP
9  * Public License.
10  *
11  * A copy of this license is available in the file LICENSE in the
12  * top-level directory of the distribution or, alternatively, at
13  * <http://www.OpenLDAP.org/license.html>.
14  */
15
16 #ifndef _PROTO_MDB_H
17 #define _PROTO_MDB_H
18
19 LDAP_BEGIN_DECL
20
21 #define MDB_UCTYPE      "MDB"
22
23 /*
24  * attr.c
25  */
26
27 AttrInfo *mdb_attr_mask( struct mdb_info *mdb,
28         AttributeDescription *desc );
29
30 void mdb_attr_flush( struct mdb_info *mdb );
31
32 int mdb_attr_slot( struct mdb_info *mdb,
33         AttributeDescription *desc, int *insert );
34
35 int mdb_attr_index_config LDAP_P(( struct mdb_info *mdb,
36         const char *fname, int lineno,
37         int argc, char **argv, struct config_reply_s *cr ));
38
39 void mdb_attr_index_unparse LDAP_P(( struct mdb_info *mdb, BerVarray *bva ));
40 void mdb_attr_index_destroy LDAP_P(( struct mdb_info *mdb ));
41 void mdb_attr_index_free LDAP_P(( struct mdb_info *mdb,
42         AttributeDescription *ad ));
43
44 void mdb_attr_info_free( AttrInfo *ai );
45
46 /*
47  * config.c
48  */
49
50 int mdb_back_init_cf( BackendInfo *bi );
51
52 /*
53  * dbcache.c
54  */
55
56 int
57 mdb_db_cache(
58     Backend     *be,
59     struct berval *name,
60         MDB_dbi *dbi );
61
62 /*
63  * dn2entry.c
64  */
65
66 int mdb_dn2entry LDAP_P(( Operation *op, MDB_txn *tid,
67         struct berval *dn, Entry **e, struct berval *matched ));
68
69 /*
70  * dn2id.c
71  */
72
73 int mdb_dn2id(
74         Operation *op,
75         MDB_txn *txn,
76         struct berval *dn,
77         ID *id );
78
79 int mdb_dn2id_add(
80         Operation *op,
81         MDB_txn *tid,
82         ID pid,
83         Entry *e );
84
85 int mdb_dn2id_delete(
86         Operation *op,
87         MDB_txn *tid,
88         ID pid,
89         Entry *e );
90
91 int mdb_dn2id_children(
92         Operation *op,
93         MDB_txn *tid,
94         Entry *e );
95
96 int mdb_dn2idl(
97         Operation *op,
98         MDB_txn *txn,
99         struct berval *ndn,
100         ID eid,
101         ID *ids,
102         ID *stack );
103
104 int mdb_dn2id_parent(
105         Operation *op,
106         MDB_txn *txn,
107         ID eid,
108         ID *idp );
109
110 int mdb_id2name(
111         Operation *op,
112         MDB_txn *txn,
113         ID eid,
114         struct berval *name,
115         struct berval *nname);
116
117 MDB_cmp_func mdb_dup_compare;
118
119 /*
120  * filterentry.c
121  */
122
123 int mdb_filter_candidates(
124         Operation *op,
125         MDB_txn *txn,
126         Filter  *f,
127         ID *ids,
128         ID *tmp,
129         ID *stack );
130
131 /*
132  * id2entry.c
133  */
134
135 int mdb_id2entry_add(
136         Operation *op,
137         MDB_txn *tid,
138         Entry *e );
139
140 int mdb_id2entry_update(
141         Operation *op,
142         MDB_txn *tid,
143         Entry *e );
144
145 int mdb_id2entry_delete(
146         BackendDB *be,
147         MDB_txn *tid,
148         Entry *e);
149
150 int mdb_id2entry(
151         Operation *op,
152         MDB_txn *tid,
153         ID id,
154         Entry **e);
155
156 void mdb_entry_free ( Entry *e );
157 int mdb_entry_return( Entry *e );
158 BI_entry_release_rw mdb_entry_release;
159 BI_entry_get_rw mdb_entry_get;
160
161
162 /*
163  * idl.c
164  */
165
166 unsigned mdb_idl_search( ID *ids, ID id );
167
168 int mdb_idl_fetch_key(
169         BackendDB       *be,
170         MDB_txn         *txn,
171         MDB_dbi         dbi,
172         MDB_val         *key,
173         ID                      *ids,
174         MDB_cursor      **saved_cursor,
175         int                     get_flag );
176
177 int mdb_idl_insert( ID *ids, ID id );
178
179 int mdb_idl_insert_key(
180         BackendDB *be,
181         MDB_txn *txn,
182         MDB_dbi dbi,
183         MDB_val *key,
184         ID id );
185
186 int mdb_idl_delete_key(
187         BackendDB *be,
188         MDB_txn *txn,
189         MDB_dbi dbi,
190         MDB_val *key,
191         ID id );
192
193 int
194 mdb_idl_intersection(
195         ID *a,
196         ID *b );
197
198 int
199 mdb_idl_union(
200         ID *a,
201         ID *b );
202
203 ID mdb_idl_first( ID *ids, ID *cursor );
204 ID mdb_idl_next( ID *ids, ID *cursor );
205
206 void mdb_idl_sort( ID *ids, ID *tmp );
207 int mdb_idl_append( ID *a, ID *b );
208 int mdb_idl_append_one( ID *ids, ID id );
209
210
211 /*
212  * index.c
213  */
214
215 extern AttrInfo *
216 mdb_index_mask LDAP_P((
217         Backend *be,
218         AttributeDescription *desc,
219         struct berval *name ));
220
221 extern int
222 mdb_index_param LDAP_P((
223         Backend *be,
224         AttributeDescription *desc,
225         int ftype,
226         MDB_dbi *dbi,
227         slap_mask_t *mask,
228         struct berval *prefix ));
229
230 extern int
231 mdb_index_values LDAP_P((
232         Operation *op,
233         MDB_txn *txn,
234         AttributeDescription *desc,
235         BerVarray vals,
236         ID id,
237         int opid ));
238
239 extern int
240 mdb_index_recset LDAP_P((
241         struct mdb_info *mdb,
242         Attribute *a,
243         AttributeType *type,
244         struct berval *tags,
245         IndexRec *ir ));
246
247 extern int
248 mdb_index_recrun LDAP_P((
249         Operation *op,
250         struct mdb_info *mdb,
251         IndexRec *ir,
252         ID id,
253         int base ));
254
255 int mdb_index_entry LDAP_P(( Operation *op, MDB_txn *t, int r, Entry *e ));
256
257 #define mdb_index_entry_add(op,t,e) \
258         mdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e))
259 #define mdb_index_entry_del(op,t,e) \
260         mdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e))
261
262 /*
263  * key.c
264  */
265
266 extern int
267 mdb_key_read(
268     Backend     *be,
269         MDB_txn *txn,
270         MDB_dbi dbi,
271     struct berval *k,
272         ID *ids,
273     MDB_cursor **saved_cursor,
274         int get_flags );
275
276 extern int
277 mdb_key_change(
278     Backend      *be,
279         MDB_txn *txn,
280     MDB_dbi dbi,
281     struct berval *k,
282     ID id,
283     int op );
284         
285 /*
286  * nextid.c
287  */
288
289 int mdb_next_id( BackendDB *be, MDB_txn *tid, ID *id );
290
291 /*
292  * modify.c
293  */
294
295 int mdb_modify_internal(
296         Operation *op,
297         MDB_txn *tid,
298         Modifications *modlist,
299         Entry *e,
300         const char **text,
301         char *textbuf,
302         size_t textlen );
303
304 /*
305  * monitor.c
306  */
307
308 int mdb_monitor_db_init( BackendDB *be );
309 int mdb_monitor_db_open( BackendDB *be );
310 int mdb_monitor_db_close( BackendDB *be );
311 int mdb_monitor_db_destroy( BackendDB *be );
312
313 #ifdef MDB_MONITOR_IDX
314 int
315 mdb_monitor_idx_add(
316         struct mdb_info         *mdb,
317         AttributeDescription    *desc,
318         slap_mask_t             type );
319 #endif /* MDB_MONITOR_IDX */
320
321 /*
322  * former external.h
323  */
324
325 extern BI_init                          mdb_back_initialize;
326
327 extern BI_db_config                     mdb_db_config;
328
329 extern BI_op_add                        mdb_add;
330 extern BI_op_bind                       mdb_bind;
331 extern BI_op_compare                    mdb_compare;
332 extern BI_op_delete                     mdb_delete;
333 extern BI_op_modify                     mdb_modify;
334 extern BI_op_modrdn                     mdb_modrdn;
335 extern BI_op_search                     mdb_search;
336 extern BI_op_extended                   mdb_extended;
337
338 extern BI_chk_referrals                 mdb_referrals;
339
340 extern BI_operational                   mdb_operational;
341
342 extern BI_has_subordinates              mdb_hasSubordinates;
343
344 /* tools.c */
345 extern BI_tool_entry_open               mdb_tool_entry_open;
346 extern BI_tool_entry_close              mdb_tool_entry_close;
347 extern BI_tool_entry_first_x            mdb_tool_entry_first_x;
348 extern BI_tool_entry_next               mdb_tool_entry_next;
349 extern BI_tool_entry_get                mdb_tool_entry_get;
350 extern BI_tool_entry_put                mdb_tool_entry_put;
351 extern BI_tool_entry_reindex            mdb_tool_entry_reindex;
352 extern BI_tool_dn2id_get                mdb_tool_dn2id_get;
353 extern BI_tool_entry_modify             mdb_tool_entry_modify;
354
355 LDAP_END_DECL
356
357 #endif /* _PROTO_MDB_H */