]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
9991da08b3e1bfac2b2bd5487bcb1712c3d281d6
[openldap] / servers / slapd / back-bdb / proto-bdb.h
1 /* $OpenLDAP$ */
2 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
3  *
4  * Copyright 2000-2005 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_BDB_H
17 #define _PROTO_BDB_H
18
19 LDAP_BEGIN_DECL
20
21 #ifdef BDB_HIER
22 #define BDB_SYMBOL(x)   LDAP_CONCAT(hdb_,x)
23 #define BDB_UCTYPE      "HDB"
24 #else
25 #define BDB_SYMBOL(x)   LDAP_CONCAT(bdb_,x)
26 #define BDB_UCTYPE      "BDB"
27 #endif
28
29 /*
30  * attr.c
31  */
32
33 #define bdb_attr_mask                           BDB_SYMBOL(attr_mask)
34 #define bdb_attr_flush                          BDB_SYMBOL(attr_flush)
35 #define bdb_attr_slot                           BDB_SYMBOL(attr_slot)
36 #define bdb_attr_index_config           BDB_SYMBOL(attr_index_config)
37 #define bdb_attr_index_destroy          BDB_SYMBOL(attr_index_destroy)
38 #define bdb_attr_index_free                     BDB_SYMBOL(attr_index_free)
39 #define bdb_attr_index_unparse          BDB_SYMBOL(attr_index_unparse)
40 #define bdb_attr_info_free                      BDB_SYMBOL(attr_info_free)
41
42 AttrInfo *bdb_attr_mask( struct bdb_info *bdb,
43         AttributeDescription *desc );
44
45 void bdb_attr_flush( struct bdb_info *bdb );
46
47 int bdb_attr_slot( struct bdb_info *bdb,
48         AttributeDescription *desc, unsigned *insert );
49
50 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
51         const char *fname, int lineno,
52         int argc, char **argv ));
53
54 void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva ));
55 void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb ));
56 void bdb_attr_index_free LDAP_P(( struct bdb_info *bdb,
57         AttributeDescription *ad ));
58
59 void bdb_attr_info_free( AttrInfo *ai );
60
61 /*
62  * config.c
63  */
64
65 #define bdb_back_init_cf                                BDB_SYMBOL(back_init_cf)
66
67 int bdb_back_init_cf( BackendInfo *bi );
68
69 /*
70  * dbcache.c
71  */
72 #define bdb_db_cache                            BDB_SYMBOL(db_cache)
73
74 int
75 bdb_db_cache(
76     Backend     *be,
77     const char *name,
78         DB **db );
79
80 /*
81  * dn2entry.c
82  */
83 #define bdb_dn2entry                            BDB_SYMBOL(dn2entry)
84
85 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
86         struct berval *dn, EntryInfo **e, int matched,
87         u_int32_t locker, DB_LOCK *lock ));
88
89 /*
90  * dn2id.c
91  */
92 #define bdb_dn2id                                       BDB_SYMBOL(dn2id)
93 #define bdb_dn2id_add                           BDB_SYMBOL(dn2id_add)
94 #define bdb_dn2id_delete                        BDB_SYMBOL(dn2id_delete)
95 #define bdb_dn2id_children                      BDB_SYMBOL(dn2id_children)
96 #define bdb_dn2idl                                      BDB_SYMBOL(dn2idl)
97
98 int bdb_dn2id(
99         Operation *op,
100         DB_TXN *tid,
101         struct berval *dn,
102         EntryInfo *ei );
103
104 int bdb_dn2id_add(
105         Operation *op,
106         DB_TXN *tid,
107         EntryInfo *eip,
108         Entry *e );
109
110 int bdb_dn2id_delete(
111         Operation *op,
112         DB_TXN *tid,
113         EntryInfo *eip,
114         Entry *e );
115
116 int bdb_dn2id_children(
117         Operation *op,
118         DB_TXN *tid,
119         Entry *e );
120
121 int bdb_dn2idl(
122         Operation *op,
123         Entry *e,
124         ID *ids,
125         ID *stack );
126
127 #ifdef BDB_HIER
128 #define bdb_dn2id_parent                        BDB_SYMBOL(dn2id_parent)
129 #define bdb_fix_dn                                      BDB_SYMBOL(fix_dn)
130
131 int bdb_dn2id_parent(
132         Operation *op,
133         DB_TXN *txn,
134         u_int32_t locker,
135         EntryInfo *ei,
136         ID *idp );
137
138 int bdb_fix_dn( Entry *e, int checkit );
139 #endif
140
141
142 /*
143  * error.c
144  */
145 #define bdb_errcall                                     BDB_SYMBOL(errcall)
146
147 #if DB_VERSION_FULL < 0x04030000
148 void bdb_errcall( const char *pfx, char * msg );
149 #else
150 #define bdb_msgcall                                     BDB_SYMBOL(msgcall)
151 void bdb_errcall( const DB_ENV *env, const char *pfx, const char * msg );
152 void bdb_msgcall( const DB_ENV *env, const char * msg );
153 #endif
154
155 #ifdef HAVE_EBCDIC
156 #define ebcdic_dberror                          BDB_SYMBOL(ebcdic_dberror)
157
158 char *ebcdic_dberror( int rc );
159 #define db_strerror(x)  ebcdic_dberror(x)
160 #endif
161
162 /*
163  * filterentry.c
164  */
165 #define bdb_filter_candidates           BDB_SYMBOL(filter_candidates)
166
167 int bdb_filter_candidates(
168         Operation *op,
169         Filter  *f,
170         ID *ids,
171         ID *tmp,
172         ID *stack );
173
174 /*
175  * id2entry.c
176  */
177 #define bdb_id2entry                            BDB_SYMBOL(id2entry)
178 #define bdb_id2entry_add                        BDB_SYMBOL(id2entry_add)
179 #define bdb_id2entry_update                     BDB_SYMBOL(id2entry_update)
180 #define bdb_id2entry_delete                     BDB_SYMBOL(id2entry_delete)
181
182 int bdb_id2entry_add(
183         BackendDB *be,
184         DB_TXN *tid,
185         Entry *e );
186
187 int bdb_id2entry_update(
188         BackendDB *be,
189         DB_TXN *tid,
190         Entry *e );
191
192 int bdb_id2entry_delete(
193         BackendDB *be,
194         DB_TXN *tid,
195         Entry *e);
196
197 #ifdef SLAP_ZONE_ALLOC
198 #else
199 int bdb_id2entry(
200         BackendDB *be,
201         DB_TXN *tid,
202         u_int32_t locker,
203         ID id,
204         Entry **e);
205 #endif
206
207 #define bdb_entry_free                          BDB_SYMBOL(entry_free)
208 #define bdb_entry_return                        BDB_SYMBOL(entry_return)
209 #define bdb_entry_release                       BDB_SYMBOL(entry_release)
210 #define bdb_entry_get                           BDB_SYMBOL(entry_get)
211
212 void bdb_entry_free ( Entry *e );
213 #ifdef SLAP_ZONE_ALLOC
214 int bdb_entry_return( struct bdb_info *bdb, Entry *e, int seqno );
215 #else
216 int bdb_entry_return( Entry *e );
217 #endif
218 BI_entry_release_rw bdb_entry_release;
219 BI_entry_get_rw bdb_entry_get;
220
221
222 /*
223  * idl.c
224  */
225
226 #define bdb_idl_cache_get                       BDB_SYMBOL(idl_cache_get)
227 #define bdb_idl_cache_put                       BDB_SYMBOL(idl_cache_put)
228 #define bdb_idl_cache_del                       BDB_SYMBOL(idl_cache_del)
229 #define bdb_idl_cache_add_id            BDB_SYMBOL(idl_cache_add_id)
230 #define bdb_idl_cache_del_id            BDB_SYMBOL(idl_cache_del_id)
231
232 int bdb_idl_cache_get(
233         struct bdb_info *bdb,
234         DB *db,
235         DBT *key,
236         ID *ids );
237
238 void
239 bdb_idl_cache_put(
240         struct bdb_info *bdb,
241         DB              *db,
242         DBT             *key,
243         ID              *ids,
244         int             rc );
245
246 void
247 bdb_idl_cache_del(
248         struct bdb_info *bdb,
249         DB              *db,
250         DBT             *key );
251
252 void
253 bdb_idl_cache_add_id(
254         struct bdb_info *bdb,
255         DB              *db,
256         DBT             *key,
257         ID              id );
258
259 void
260 bdb_idl_cache_del_id(
261         struct bdb_info *bdb,
262         DB              *db,
263         DBT             *key,
264         ID              id );
265
266 #define bdb_idl_first                           BDB_SYMBOL(idl_first)
267 #define bdb_idl_next                            BDB_SYMBOL(idl_next)
268 #define bdb_idl_search                          BDB_SYMBOL(idl_search)
269 #define bdb_idl_insert                          BDB_SYMBOL(idl_insert)
270 #define bdb_idl_intersection            BDB_SYMBOL(idl_intersection)
271 #define bdb_idl_union                           BDB_SYMBOL(idl_union)
272 #define bdb_idl_sort                            BDB_SYMBOL(idl_sort)
273 #define bdb_idl_append                          BDB_SYMBOL(idl_append)
274 #define bdb_idl_append_one                      BDB_SYMBOL(idl_append_one)
275
276 #define bdb_idl_fetch_key                       BDB_SYMBOL(idl_fetch_key)
277 #define bdb_idl_insert_key                      BDB_SYMBOL(idl_insert_key)
278 #define bdb_idl_delete_key                      BDB_SYMBOL(idl_delete_key)
279
280 unsigned bdb_idl_search( ID *ids, ID id );
281
282 int bdb_idl_fetch_key(
283         BackendDB       *be,
284         DB                      *db,
285         DB_TXN          *tid,
286         DBT                     *key,
287         ID                      *ids,
288         DBC                     **saved_cursor,
289         int                     get_flag );
290
291 int bdb_idl_insert( ID *ids, ID id );
292
293 int bdb_idl_insert_key(
294         BackendDB *be,
295         DB *db,
296         DB_TXN *txn,
297         DBT *key,
298         ID id );
299
300 int bdb_idl_delete_key(
301         BackendDB *be,
302         DB *db,
303         DB_TXN *txn,
304         DBT *key,
305         ID id );
306
307 int
308 bdb_idl_intersection(
309         ID *a,
310         ID *b );
311
312 int
313 bdb_idl_union(
314         ID *a,
315         ID *b );
316
317 ID bdb_idl_first( ID *ids, ID *cursor );
318 ID bdb_idl_next( ID *ids, ID *cursor );
319
320 void bdb_idl_sort( ID *ids, ID *tmp );
321 int bdb_idl_append( ID *a, ID *b );
322 int bdb_idl_append_one( ID *ids, ID id );
323
324
325 /*
326  * index.c
327  */
328 #define bdb_index_is_indexed            BDB_SYMBOL(index_is_indexed)
329 #define bdb_index_param                         BDB_SYMBOL(index_param)
330 #define bdb_index_values                        BDB_SYMBOL(index_values)
331 #define bdb_index_entry                         BDB_SYMBOL(index_entry)
332 #define bdb_index_recset                        BDB_SYMBOL(index_recset)
333 #define bdb_index_recrun                        BDB_SYMBOL(index_recrun)
334
335 extern int
336 bdb_index_is_indexed LDAP_P((
337         Backend *be,
338         AttributeDescription *desc ));
339
340 extern int
341 bdb_index_param LDAP_P((
342         Backend *be,
343         AttributeDescription *desc,
344         int ftype,
345         DB **db,
346         slap_mask_t *mask,
347         struct berval *prefix ));
348
349 extern int
350 bdb_index_values LDAP_P((
351         Operation *op,
352         DB_TXN *txn,
353         AttributeDescription *desc,
354         BerVarray vals,
355         ID id,
356         int opid ));
357
358 extern int
359 bdb_index_recset LDAP_P((
360         struct bdb_info *bdb,
361         Attribute *a,
362         AttributeType *type,
363         struct berval *tags,
364         IndexRec *ir ));
365
366 extern int
367 bdb_index_recrun LDAP_P((
368         Operation *op,
369         struct bdb_info *bdb,
370         IndexRec *ir,
371         ID id,
372         int base ));
373
374 int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e ));
375
376 #define bdb_index_entry_add(op,t,e) \
377         bdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e))
378 #define bdb_index_entry_del(op,t,e) \
379         bdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e))
380
381 /*
382  * key.c
383  */
384 #define bdb_key_read                            BDB_SYMBOL(key_read)
385 #define bdb_key_change                          BDB_SYMBOL(key_change)
386
387 extern int
388 bdb_key_read(
389     Backend     *be,
390         DB *db,
391         DB_TXN *txn,
392     struct berval *k,
393         ID *ids,
394     DBC **saved_cursor,
395         int get_flags );
396
397 extern int
398 bdb_key_change(
399     Backend      *be,
400     DB *db,
401         DB_TXN *txn,
402     struct berval *k,
403     ID id,
404     int op );
405         
406 /*
407  * nextid.c
408  */
409 #define bdb_next_id                                     BDB_SYMBOL(next_id)
410 #define bdb_last_id                                     BDB_SYMBOL(last_id)
411
412 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id );
413 int bdb_last_id( BackendDB *be, DB_TXN *tid );
414
415 /*
416  * modify.c
417  */
418 #define bdb_modify_internal                     BDB_SYMBOL(modify_internal)
419
420 int bdb_modify_internal(
421         Operation *op,
422         DB_TXN *tid,
423         Modifications *modlist,
424         Entry *e,
425         const char **text,
426         char *textbuf,
427         size_t textlen );
428
429
430 /*
431  * cache.c
432  */
433 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
434
435 #define bdb_cache_entryinfo_lock(e) \
436         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
437 #define bdb_cache_entryinfo_unlock(e) \
438         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
439
440 /* What a mess. Hopefully the current cache scheme will stabilize
441  * and we can trim out all of this stuff.
442  */
443 #if 0
444 void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e,
445         int rw, DB_LOCK *lock );
446 #else
447 #define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \
448         bdb_cache_entry_db_unlock( env, lock )
449 #define bdb_cache_return_entry( env, lock ) \
450         bdb_cache_entry_db_unlock( env, lock )
451 #endif
452 #define bdb_cache_return_entry_r(env, c, e, l) \
453         bdb_cache_return_entry_rw((env), (c), (e), 0, (l))
454 #define bdb_cache_return_entry_w(env, c, e, l) \
455         bdb_cache_return_entry_rw((env), (c), (e), 1, (l))
456 #if 0
457 void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw );
458 #else
459 #define bdb_unlocked_cache_return_entry_rw( a, b, c )   ((void)0)
460 #endif
461 #define bdb_unlocked_cache_return_entry_r( c, e ) \
462         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
463 #define bdb_unlocked_cache_return_entry_w( c, e ) \
464         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
465
466 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
467 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
468 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
469 #define bdb_cache_delete_cleanup        BDB_SYMBOL(cache_delete_cleanup)
470 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
471 #define bdb_cache_find_info                     BDB_SYMBOL(cache_find_info)
472 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
473 #define bdb_cache_find_parent           BDB_SYMBOL(cache_find_parent)
474 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
475 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
476 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
477 #define bdb_cache_delete_entry          BDB_SYMBOL(cache_delete_entry)
478
479 int bdb_cache_children(
480         Operation *op,
481         DB_TXN *txn,
482         Entry *e
483 );
484 int bdb_cache_add(
485         struct bdb_info *bdb,
486         EntryInfo *pei,
487         Entry   *e,
488         struct berval *nrdn,
489         u_int32_t locker
490 );
491 int bdb_cache_modrdn(
492         struct bdb_info *bdb,
493         Entry   *e,
494         struct berval *nrdn,
495         Entry   *new,
496         EntryInfo *ein,
497         u_int32_t locker,
498         DB_LOCK *lock
499 );
500 int bdb_cache_modify(
501         Entry *e,
502         Attribute *newAttrs,
503         DB_ENV *env,
504         u_int32_t locker,
505         DB_LOCK *lock
506 );
507 int bdb_cache_find_ndn(
508         Operation *op,
509         DB_TXN  *txn,
510         struct berval   *ndn,
511         EntryInfo       **res
512 );
513 EntryInfo * bdb_cache_find_info(
514         struct bdb_info *bdb,
515         ID id
516 );
517 int bdb_cache_find_id(
518         Operation *op,
519         DB_TXN  *tid,
520         ID              id,
521         EntryInfo **eip,
522         int     islocked,
523         u_int32_t       locker,
524         DB_LOCK         *lock
525 );
526 int
527 bdb_cache_find_parent(
528         Operation *op,
529         DB_TXN *txn,
530         u_int32_t       locker,
531         ID id,
532         EntryInfo **res
533 );
534 int bdb_cache_delete(
535         Cache   *cache,
536         Entry   *e,
537         DB_ENV  *env,
538         u_int32_t locker,
539         DB_LOCK *lock
540 );
541 void bdb_cache_delete_cleanup(
542         Cache   *cache,
543         EntryInfo *ei
544 );
545 void bdb_cache_release_all( Cache *cache );
546 void bdb_cache_delete_entry(
547         struct bdb_info *bdb,
548         EntryInfo *ei,
549         u_int32_t locker,
550         DB_LOCK *lock
551 );
552
553 #ifdef BDB_HIER
554 int hdb_cache_load(
555         struct bdb_info *bdb,
556         EntryInfo *ei,
557         EntryInfo **res
558 );
559 #endif
560
561 #define bdb_cache_entry_db_relock               BDB_SYMBOL(cache_entry_db_relock)
562 int bdb_cache_entry_db_relock(
563         DB_ENV *env,
564         u_int32_t locker,
565         EntryInfo *ei,
566         int rw,
567         int tryOnly,
568         DB_LOCK *lock );
569
570 int bdb_cache_entry_db_unlock(
571         DB_ENV *env,
572         DB_LOCK *lock );
573
574 #ifdef BDB_REUSE_LOCKERS
575
576 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
577 int bdb_locker_id( Operation *op, DB_ENV *env, u_int32_t *locker );
578
579 #define LOCK_ID_FREE(env, locker)       ((void)0)
580 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
581
582 #else
583
584 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
585 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
586
587 #endif
588
589 /*
590  * trans.c
591  */
592 #define bdb_trans_backoff                       BDB_SYMBOL(trans_backoff)
593
594 void
595 bdb_trans_backoff( int num_retries );
596
597 /*
598  * former external.h
599  */
600
601 #define bdb_back_initialize             BDB_SYMBOL(back_initialize)
602 #define bdb_db_config                   BDB_SYMBOL(db_config)
603 #define bdb_add                         BDB_SYMBOL(add)
604 #define bdb_bind                        BDB_SYMBOL(bind)
605 #define bdb_compare                     BDB_SYMBOL(compare)
606 #define bdb_delete                      BDB_SYMBOL(delete)
607 #define bdb_modify                      BDB_SYMBOL(modify)
608 #define bdb_modrdn                      BDB_SYMBOL(modrdn)
609 #define bdb_search                      BDB_SYMBOL(search)
610 #define bdb_extended                    BDB_SYMBOL(extended)
611 #define bdb_referrals                   BDB_SYMBOL(referrals)
612 #define bdb_operational                 BDB_SYMBOL(operational)
613 #define bdb_hasSubordinates             BDB_SYMBOL(hasSubordinates)
614 #define bdb_tool_entry_open             BDB_SYMBOL(tool_entry_open)
615 #define bdb_tool_entry_close            BDB_SYMBOL(tool_entry_close)
616 #define bdb_tool_entry_next             BDB_SYMBOL(tool_entry_next)
617 #define bdb_tool_entry_get              BDB_SYMBOL(tool_entry_get)
618 #define bdb_tool_entry_put              BDB_SYMBOL(tool_entry_put)
619 #define bdb_tool_entry_reindex          BDB_SYMBOL(tool_entry_reindex)
620 #define bdb_tool_dn2id_get              BDB_SYMBOL(tool_dn2id_get)
621 #define bdb_tool_id2entry_get           BDB_SYMBOL(tool_id2entry_get)
622 #define bdb_tool_entry_modify           BDB_SYMBOL(tool_entry_modify)
623 #define bdb_tool_idl_add                BDB_SYMBOL(tool_idl_add)
624
625 extern BI_init                          bdb_back_initialize;
626
627 extern BI_db_config                     bdb_db_config;
628
629 extern BI_op_add                        bdb_add;
630 extern BI_op_bind                       bdb_bind;
631 extern BI_op_compare                    bdb_compare;
632 extern BI_op_delete                     bdb_delete;
633 extern BI_op_modify                     bdb_modify;
634 extern BI_op_modrdn                     bdb_modrdn;
635 extern BI_op_search                     bdb_search;
636 extern BI_op_extended                   bdb_extended;
637
638 extern BI_chk_referrals                 bdb_referrals;
639
640 extern BI_operational                   bdb_operational;
641
642 extern BI_has_subordinates              bdb_hasSubordinates;
643
644 /* tools.c */
645 extern BI_tool_entry_open               bdb_tool_entry_open;
646 extern BI_tool_entry_close              bdb_tool_entry_close;
647 extern BI_tool_entry_next               bdb_tool_entry_next;
648 extern BI_tool_entry_get                bdb_tool_entry_get;
649 extern BI_tool_entry_put                bdb_tool_entry_put;
650 extern BI_tool_entry_reindex            bdb_tool_entry_reindex;
651 extern BI_tool_dn2id_get                bdb_tool_dn2id_get;
652 extern BI_tool_id2entry_get             bdb_tool_id2entry_get;
653 extern BI_tool_entry_modify             bdb_tool_entry_modify;
654
655 int bdb_tool_idl_add( BackendDB *be, DB *db, DB_TXN *txn, DBT *key, ID id );
656
657 LDAP_END_DECL
658
659 #endif /* _PROTO_BDB_H */