]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
More for 2.2beta
[openldap] / servers / slapd / back-bdb / proto-bdb.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 2000-2003 The OpenLDAP Foundation, All Rights Reserved.
4  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5  */
6
7 #ifndef _PROTO_BDB_H
8 #define _PROTO_BDB_H
9
10 LDAP_BEGIN_DECL
11
12 #ifdef BDB_HIER
13 #define BDB_SYMBOL(x)   LDAP_CONCAT(hdb_,x)
14 #else
15 #define BDB_SYMBOL(x)   LDAP_CONCAT(bdb_,x)
16 #endif
17
18 /*
19  * attr.c
20  */
21
22 #define bdb_attr_mask                           BDB_SYMBOL(attr_mask)
23 #define bdb_attr_index_config           BDB_SYMBOL(attr_index_config)
24 #define bdb_attr_index_destroy          BDB_SYMBOL(attr_index_destroy)
25
26 void bdb_attr_mask( struct bdb_info *bdb,
27         AttributeDescription *desc,
28         slap_mask_t *indexmask );
29
30 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
31         const char *fname, int lineno,
32         int argc, char **argv ));
33
34 void bdb_attr_index_destroy LDAP_P(( Avlnode *tree ));
35
36 /*
37  * ctxcsn.c
38  */
39 #define bdb_csn_commit                          BDB_SYMBOL(csn_commit)
40 #define bdb_get_commit_csn                      BDB_SYMBOL(get_commit_csn)
41
42 int bdb_csn_commit LDAP_P(( Operation *op, SlapReply *rs, DB_TXN *tid,
43                                                 EntryInfo *ei, EntryInfo **suffix_ei, Entry **ctxcsn_e,
44                                                 int *ctxcsn_added, u_int32_t locker ));
45
46 int bdb_get_commit_csn LDAP_P(( Operation *op, SlapReply *rs,
47                                                 struct berval **search_context_csn,
48                                                 u_int32_t locker, DB_LOCK *ctxcsn_lock ));
49
50 /*
51  * dbcache.c
52  */
53 #define bdb_db_cache                            BDB_SYMBOL(db_cache)
54
55 int
56 bdb_db_cache(
57     Backend     *be,
58     DB_TXN *tid,
59     const char *name,
60         DB **db );
61
62 /*
63  * dn2entry.c
64  */
65 #define bdb_dn2entry                            BDB_SYMBOL(dn2entry)
66
67 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
68         struct berval *dn, EntryInfo **e, int matched,
69         u_int32_t locker, DB_LOCK *lock ));
70
71 /*
72  * dn2id.c
73  */
74 #define bdb_dn2id                                       BDB_SYMBOL(dn2id)
75 #define bdb_dn2id_add                           BDB_SYMBOL(dn2id_add)
76 #define bdb_dn2id_delete                        BDB_SYMBOL(dn2id_delete)
77 #define bdb_dn2id_children                      BDB_SYMBOL(dn2id_children)
78 #define bdb_dn2idl                                      BDB_SYMBOL(dn2idl)
79
80 int bdb_dn2id(
81         Operation *op,
82         DB_TXN *tid,
83         struct berval *dn,
84         EntryInfo *ei );
85
86 int bdb_dn2id_add(
87         Operation *op,
88         DB_TXN *tid,
89         EntryInfo *eip,
90         Entry *e );
91
92 int bdb_dn2id_delete(
93         Operation *op,
94         DB_TXN *tid,
95         EntryInfo *eip,
96         Entry *e );
97
98 int bdb_dn2id_children(
99         Operation *op,
100         DB_TXN *tid,
101         Entry *e );
102
103 int bdb_dn2idl(
104         Operation *op,
105         Entry *e,
106         ID *ids,
107         ID *stack );
108
109 #ifdef BDB_HIER
110 #define bdb_dn2id_parent                        BDB_SYMBOL(dn2id_parent)
111 #define bdb_dup_compare                         BDB_SYMBOL(dup_compare)
112 #define bdb_fix_dn                                      BDB_SYMBOL(fix_dn)
113
114 int bdb_dn2id_parent(
115         Operation *op,
116         DB_TXN *txn,
117         EntryInfo *ei,
118         ID *idp );
119
120 int bdb_dup_compare(
121         DB *db,
122         const DBT *usrkey,
123         const DBT *curkey );
124
125 int bdb_fix_dn( Entry *e, int checkit );
126 #endif
127
128
129 /*
130  * error.c
131  */
132 #define bdb_errcall                                     BDB_SYMBOL(errcall)
133
134 void bdb_errcall( const char *pfx, char * msg );
135
136 #ifdef HAVE_EBCDIC
137 #define ebcdic_dberror                          BDB_SYMBOL(ebcdic_dberror)
138
139 char *ebcdic_dberror( int rc );
140 #define db_strerror(x)  ebcdic_dberror(x)
141 #endif
142
143 /*
144  * filterentry.c
145  */
146 #define bdb_filter_candidates           BDB_SYMBOL(filter_candidates)
147
148 int bdb_filter_candidates(
149         Operation *op,
150         Filter  *f,
151         ID *ids,
152         ID *tmp,
153         ID *stack );
154
155 /*
156  * id2entry.c
157  */
158 #define bdb_id2entry                            BDB_SYMBOL(id2entry)
159 #define bdb_id2entry_add                        BDB_SYMBOL(id2entry_add)
160 #define bdb_id2entry_update                     BDB_SYMBOL(id2entry_update)
161 #define bdb_id2entry_delete                     BDB_SYMBOL(id2entry_delete)
162
163 int bdb_id2entry_add(
164         BackendDB *be,
165         DB_TXN *tid,
166         Entry *e );
167
168 int bdb_id2entry_update(
169         BackendDB *be,
170         DB_TXN *tid,
171         Entry *e );
172
173 int bdb_id2entry_delete(
174         BackendDB *be,
175         DB_TXN *tid,
176         Entry *e);
177
178 int bdb_id2entry(
179         BackendDB *be,
180         DB_TXN *tid,
181         ID id,
182         Entry **e);
183
184 #define bdb_entry_free                          BDB_SYMBOL(entry_free)
185 #define bdb_entry_return                        BDB_SYMBOL(entry_return)
186 #define bdb_entry_release                       BDB_SYMBOL(entry_release)
187 #define bdb_entry_get                           BDB_SYMBOL(entry_get)
188
189 void bdb_entry_free ( Entry *e );
190 int bdb_entry_return( Entry *e );
191 BI_entry_release_rw bdb_entry_release;
192 BI_entry_get_rw bdb_entry_get;
193
194
195 /*
196  * idl.c
197  */
198 #ifdef SLAP_IDL_CACHE
199
200 #define bdb_idl_cache_get                       BDB_SYMBOL(idl_cache_get)
201 #define bdb_idl_cache_put                       BDB_SYMBOL(idl_cache_put)
202 #define bdb_idl_cache_del                       BDB_SYMBOL(idl_cache_del)
203
204 int bdb_idl_cache_get(
205         struct bdb_info *bdb,
206         DB *db,
207         DBT *key,
208         ID *ids );
209
210 void
211 bdb_idl_cache_put(
212         struct bdb_info *bdb,
213         DB              *db,
214         DBT             *key,
215         ID              *ids,
216         int             rc );
217
218 void
219 bdb_idl_cache_del(
220         struct bdb_info *bdb,
221         DB              *db,
222         DBT             *key );
223 #endif
224
225 #define bdb_idl_first                           BDB_SYMBOL(idl_first)
226 #define bdb_idl_next                            BDB_SYMBOL(idl_next)
227 #define bdb_idl_search                          BDB_SYMBOL(idl_search)
228 #define bdb_idl_insert                          BDB_SYMBOL(idl_insert)
229 #define bdb_idl_intersection            BDB_SYMBOL(idl_intersection)
230 #define bdb_idl_union                           BDB_SYMBOL(idl_union)
231
232 #define bdb_idl_fetch_key                       BDB_SYMBOL(idl_fetch_key)
233 #define bdb_idl_insert_key                      BDB_SYMBOL(idl_insert_key)
234 #define bdb_idl_delete_key                      BDB_SYMBOL(idl_delete_key)
235
236 unsigned bdb_idl_search( ID *ids, ID id );
237
238 int bdb_idl_fetch_key(
239         BackendDB *be,
240         DB *db,
241         DB_TXN *txn,
242         DBT *key,
243         ID *ids );
244
245 int bdb_idl_insert( ID *ids, ID id );
246
247 int bdb_idl_insert_key(
248         BackendDB *be,
249         DB *db,
250         DB_TXN *txn,
251         DBT *key,
252         ID id );
253
254 int bdb_idl_delete_key(
255         BackendDB *be,
256         DB *db,
257         DB_TXN *txn,
258         DBT *key,
259         ID id );
260
261 int
262 bdb_idl_intersection(
263         ID *a,
264         ID *b );
265
266 int
267 bdb_idl_union(
268         ID *a,
269         ID *b );
270
271 ID bdb_idl_first( ID *ids, ID *cursor );
272 ID bdb_idl_next( ID *ids, ID *cursor );
273
274
275 #define bdb_bt_compare                          BDB_SYMBOL(bt_compare)
276
277 int bdb_bt_compare(
278         DB *db,
279         const DBT *a,
280         const DBT *b );
281
282
283 /*
284  * index.c
285  */
286 #define bdb_index_is_indexed            BDB_SYMBOL(index_is_indexed)
287 #define bdb_index_param                         BDB_SYMBOL(index_param)
288 #define bdb_index_values                        BDB_SYMBOL(index_values)
289 #define bdb_index_entry                         BDB_SYMBOL(index_entry)
290
291 extern int
292 bdb_index_is_indexed LDAP_P((
293         Backend *be,
294         AttributeDescription *desc ));
295
296 extern int
297 bdb_index_param LDAP_P((
298         Backend *be,
299         AttributeDescription *desc,
300         int ftype,
301         DB **db,
302         slap_mask_t *mask,
303         struct berval *prefix ));
304
305 extern int
306 bdb_index_values LDAP_P((
307         Operation *op,
308         DB_TXN *txn,
309         AttributeDescription *desc,
310         BerVarray vals,
311         ID id,
312         int opid ));
313
314 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
315
316 #define bdb_index_entry_add(op,t,e) \
317         bdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e))
318 #define bdb_index_entry_del(op,t,e) \
319         bdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e))
320
321 /*
322  * init.c
323  */
324 #define bdb_uuid                                        BDB_SYMBOL(uuid)
325
326 extern struct berval bdb_uuid;
327
328 /*
329  * key.c
330  */
331 #define bdb_key_read                            BDB_SYMBOL(key_read)
332 #define bdb_key_change                          BDB_SYMBOL(key_change)
333
334 extern int
335 bdb_key_read(
336     Backend     *be,
337         DB *db,
338         DB_TXN *txn,
339     struct berval *k,
340         ID *ids );
341
342 extern int
343 bdb_key_change(
344     Backend      *be,
345     DB *db,
346         DB_TXN *txn,
347     struct berval *k,
348     ID id,
349     int op );
350         
351 /*
352  * nextid.c
353  */
354 #define bdb_next_id                                     BDB_SYMBOL(next_id)
355 #define bdb_last_id                                     BDB_SYMBOL(last_id)
356
357 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
358 int bdb_last_id( BackendDB *be, DB_TXN *tid );
359
360 /*
361  * modify.c
362  */
363 #define bdb_modify_internal                     BDB_SYMBOL(modify_internal)
364
365 int bdb_modify_internal(
366         Operation *op,
367         DB_TXN *tid,
368         Modifications *modlist,
369         Entry *e,
370         const char **text,
371         char *textbuf,
372         size_t textlen );
373
374 /*
375  * passwd.c
376  */
377 #define bdb_exop_passwd                         BDB_SYMBOL(exop_passwd)
378
379 BI_op_extended bdb_exop_passwd;
380
381
382 /*
383  * cache.c
384  */
385 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
386
387 #define bdb_cache_entryinfo_lock(e) \
388         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
389 #define bdb_cache_entryinfo_unlock(e) \
390         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
391
392 /* What a mess. Hopefully the current cache scheme will stabilize
393  * and we can trim out all of this stuff.
394  */
395 #if 0
396 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
397         int rw, DB_LOCK *lock );
398 #else
399 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
400         bdb_cache_entry_db_unlock( env, lock )
401 #define bdb_cache_return_entry( env, lock ) \
402         bdb_cache_entry_db_unlock( env, lock )
403 #endif
404 #define bdb_cache_return_entry_r(env, c, e, l) \
405         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
406 #define bdb_cache_return_entry_w(env, c, e, l) \
407         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
408 #if 0
409 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
410 #else
411 #define bdb_unlocked_cache_return_entry_rw( a, b, c )
412 #endif
413 #define bdb_unlocked_cache_return_entry_r( c, e ) \
414         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
415 #define bdb_unlocked_cache_return_entry_w( c, e ) \
416         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
417
418 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
419 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
420 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
421 #define bdb_cache_delete_cleanup                BDB_SYMBOL(cache_delete_cleanup)
422 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
423 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
424 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
425 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
426 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
427
428 int bdb_cache_children(
429         Operation *op,
430         DB_TXN *txn,
431         Entry *e
432 );
433 int bdb_cache_add(
434         struct bdb_info *bdb,
435         EntryInfo *pei,
436         Entry   *e,
437         struct berval *nrdn,
438         u_int32_t locker
439 );
440 int bdb_cache_modrdn(
441         Entry   *e,
442         struct berval *nrdn,
443         Entry   *new,
444         EntryInfo *ein,
445         DB_ENV *env,
446         u_int32_t locker,
447         DB_LOCK *lock
448 );
449 int bdb_cache_modify(
450         Entry *e,
451         Attribute *newAttrs,
452         DB_ENV *env,
453         u_int32_t locker,
454         DB_LOCK *lock
455 );
456 int bdb_cache_find_ndn(
457         Operation *op,
458         DB_TXN  *txn,
459         struct berval   *ndn,
460         EntryInfo       **res
461 );
462 int bdb_cache_find_id(
463         Operation *op,
464         DB_TXN  *tid,
465         ID              id,
466         EntryInfo **eip,
467         int     islocked,
468         u_int32_t       locker,
469         DB_LOCK         *lock
470 );
471 int bdb_cache_delete(
472         Cache   *cache,
473         Entry   *e,
474         DB_ENV  *env,
475         u_int32_t locker,
476         DB_LOCK *lock
477 );
478 void bdb_cache_delete_cleanup(
479         Entry   *e
480 );
481 void bdb_cache_release_all( Cache *cache );
482
483 #ifdef BDB_HIER
484 int hdb_cache_load(
485         struct bdb_info *bdb,
486         EntryInfo *ei,
487         EntryInfo **res
488 );
489 #endif
490
491 #define bdb_cache_entry_db_relock               BDB_SYMBOL(cache_entry_db_relock)
492 int bdb_cache_entry_db_relock(
493         DB_ENV *env,
494         u_int32_t locker,
495         EntryInfo *ei,
496         int rw,
497         int tryOnly,
498         DB_LOCK *lock );
499
500 #ifdef BDB_REUSE_LOCKERS
501
502 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
503 int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
504
505 #define LOCK_ID_FREE(env, locker)
506 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
507
508 #else
509
510 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
511 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
512
513 #endif
514
515 /*
516  * search.c
517  */
518
519 #define bdb_abandon                                     BDB_SYMBOL(abandon)
520 #define bdb_cancel                                      BDB_SYMBOL(cancel)
521 #define bdb_do_search                           BDB_SYMBOL(do_search)
522
523 BI_op_abandon bdb_abandon;
524 BI_op_cancel bdb_cancel;
525
526 int bdb_do_search(
527         Operation       *op,
528         SlapReply       *rs,
529         Operation       *ps_op,
530         Entry           *entry,
531         int             psearch_type
532 );
533 #define bdb_psearch(op, rs, sop, e, ps_type)    bdb_do_search(op, rs, sop, e, ps_type)
534
535 #define bdb_build_sync_state_ctrl       BDB_SYMBOL(build_sync_state_ctrl)
536 #define bdb_build_sync_done_ctrl        BDB_SYMBOL(build_sync_done_ctrl)
537 #define bdb_send_ldap_intermediate      BDB_SYMBOL(send_ldap_intermediate)
538
539 int
540 bdb_build_sync_state_ctrl(
541         Operation       *op,
542         SlapReply               *rs,
543         Entry           *e,
544         int             entry_sync_state,
545         LDAPControl     **ctrls,
546         int             num_ctrls,
547         int             send_cookie,
548         struct berval   *csn     );
549
550 int
551 bdb_build_sync_done_ctrl(
552         Operation       *op,
553         SlapReply       *rs,
554         LDAPControl     **ctrls,
555         int             num_ctrls,
556         int             send_cookie,
557         struct berval   *latest_entrycsn_bv     );
558
559 int
560 bdb_send_ldap_intermediate(
561         Operation   *op,
562         SlapReply       *rs,
563         int         state,
564         struct berval *cookie );
565
566 /*
567  * trans.c
568  */
569 #define bdb_trans_backoff                       BDB_SYMBOL(trans_backoff)
570
571 void
572 bdb_trans_backoff( int num_retries );
573
574 LDAP_END_DECL
575
576 #endif /* _PROTO_BDB_H */