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