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