]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/proto-bdb.h
happy new year
[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-2007 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  * monitor.c
431  */
432
433 #define bdb_monitor_db_init     BDB_SYMBOL(monitor_db_init)
434 #define bdb_monitor_db_open     BDB_SYMBOL(monitor_db_open)
435 #define bdb_monitor_db_close    BDB_SYMBOL(monitor_db_close)
436 #define bdb_monitor_db_destroy  BDB_SYMBOL(monitor_db_destroy)
437
438 int bdb_monitor_db_init( BackendDB *be );
439 int bdb_monitor_db_open( BackendDB *be );
440 int bdb_monitor_db_close( BackendDB *be );
441 int bdb_monitor_db_destroy( BackendDB *be );
442
443 /*
444  * cache.c
445  */
446 #define bdb_cache_entry_db_unlock       BDB_SYMBOL(cache_entry_db_unlock)
447
448 #define bdb_cache_entryinfo_lock(e) \
449         ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex )
450 #define bdb_cache_entryinfo_unlock(e) \
451         ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex )
452
453 /* What a mess. Hopefully the current cache scheme will stabilize
454  * and we can trim out all of this stuff.
455  */
456 #if 0
457 void bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e,
458         int rw, DB_LOCK *lock );
459 #else
460 #define bdb_cache_return_entry_rw( bdb, e, rw, lock ) \
461         bdb_cache_entry_db_unlock( bdb, lock )
462 #define bdb_cache_return_entry( bdb, lock ) \
463         bdb_cache_entry_db_unlock( bdb, lock )
464 #endif
465 #define bdb_cache_return_entry_r(bdb, e, l) \
466         bdb_cache_return_entry_rw((bdb), (e), 0, (l))
467 #define bdb_cache_return_entry_w(bdb, e, l) \
468         bdb_cache_return_entry_rw((bdb), (e), 1, (l))
469 #if 0
470 void bdb_unlocked_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, int rw );
471 #else
472 #define bdb_unlocked_cache_return_entry_rw( a, b, c )   ((void)0)
473 #endif
474 #define bdb_unlocked_cache_return_entry_r( c, e ) \
475         bdb_unlocked_cache_return_entry_rw((c), (e), 0)
476 #define bdb_unlocked_cache_return_entry_w( c, e ) \
477         bdb_unlocked_cache_return_entry_rw((c), (e), 1)
478
479 #define bdb_cache_add                           BDB_SYMBOL(cache_add)
480 #define bdb_cache_children                      BDB_SYMBOL(cache_children)
481 #define bdb_cache_delete                        BDB_SYMBOL(cache_delete)
482 #define bdb_cache_delete_cleanup        BDB_SYMBOL(cache_delete_cleanup)
483 #define bdb_cache_find_id                       BDB_SYMBOL(cache_find_id)
484 #define bdb_cache_find_info                     BDB_SYMBOL(cache_find_info)
485 #define bdb_cache_find_ndn                      BDB_SYMBOL(cache_find_ndn)
486 #define bdb_cache_find_parent           BDB_SYMBOL(cache_find_parent)
487 #define bdb_cache_modify                        BDB_SYMBOL(cache_modify)
488 #define bdb_cache_modrdn                        BDB_SYMBOL(cache_modrdn)
489 #define bdb_cache_release_all           BDB_SYMBOL(cache_release_all)
490 #define bdb_cache_delete_entry          BDB_SYMBOL(cache_delete_entry)
491
492 int bdb_cache_children(
493         Operation *op,
494         DB_TXN *txn,
495         Entry *e
496 );
497 int bdb_cache_add(
498         struct bdb_info *bdb,
499         EntryInfo *pei,
500         Entry   *e,
501         struct berval *nrdn,
502         u_int32_t locker,
503         DB_LOCK *lock
504 );
505 int bdb_cache_modrdn(
506         struct bdb_info *bdb,
507         Entry   *e,
508         struct berval *nrdn,
509         Entry   *new,
510         EntryInfo *ein,
511         u_int32_t locker,
512         DB_LOCK *lock
513 );
514 int bdb_cache_modify(
515         struct bdb_info *bdb,
516         Entry *e,
517         Attribute *newAttrs,
518         u_int32_t locker,
519         DB_LOCK *lock
520 );
521 int bdb_cache_find_ndn(
522         Operation *op,
523         DB_TXN  *txn,
524         struct berval   *ndn,
525         EntryInfo       **res
526 );
527 EntryInfo * bdb_cache_find_info(
528         struct bdb_info *bdb,
529         ID id
530 );
531 int bdb_cache_find_id(
532         Operation *op,
533         DB_TXN  *tid,
534         ID              id,
535         EntryInfo **eip,
536         int     islocked,
537         u_int32_t       locker,
538         DB_LOCK         *lock
539 );
540 int
541 bdb_cache_find_parent(
542         Operation *op,
543         DB_TXN *txn,
544         u_int32_t       locker,
545         ID id,
546         EntryInfo **res
547 );
548 int bdb_cache_delete(
549         struct bdb_info *bdb,
550         Entry   *e,
551         u_int32_t locker,
552         DB_LOCK *lock
553 );
554 void bdb_cache_delete_cleanup(
555         Cache   *cache,
556         EntryInfo *ei
557 );
558 void bdb_cache_release_all( Cache *cache );
559
560 #ifdef BDB_HIER
561 int hdb_cache_load(
562         struct bdb_info *bdb,
563         EntryInfo *ei,
564         EntryInfo **res
565 );
566 #endif
567
568 #define bdb_cache_entry_db_relock               BDB_SYMBOL(cache_entry_db_relock)
569 int bdb_cache_entry_db_relock(
570         struct bdb_info *bdb,
571         u_int32_t locker,
572         EntryInfo *ei,
573         int rw,
574         int tryOnly,
575         DB_LOCK *lock );
576
577 int bdb_cache_entry_db_unlock(
578         struct bdb_info *bdb,
579         DB_LOCK *lock );
580
581 #ifdef BDB_REUSE_LOCKERS
582
583 #define bdb_locker_id                           BDB_SYMBOL(locker_id)
584 int bdb_locker_id( Operation *op, DB_ENV *env, u_int32_t *locker );
585
586 #define LOCK_ID_FREE(env, locker)       ((void)0)
587 #define LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
588
589 #else
590
591 #define LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
592 #define LOCK_ID(env, locker)            XLOCK_ID(env, locker)
593
594 #endif
595
596 /*
597  * trans.c
598  */
599 #define bdb_trans_backoff                       BDB_SYMBOL(trans_backoff)
600
601 void
602 bdb_trans_backoff( int num_retries );
603
604 /*
605  * former external.h
606  */
607
608 #define bdb_back_initialize             BDB_SYMBOL(back_initialize)
609 #define bdb_db_config                   BDB_SYMBOL(db_config)
610 #define bdb_add                         BDB_SYMBOL(add)
611 #define bdb_bind                        BDB_SYMBOL(bind)
612 #define bdb_compare                     BDB_SYMBOL(compare)
613 #define bdb_delete                      BDB_SYMBOL(delete)
614 #define bdb_modify                      BDB_SYMBOL(modify)
615 #define bdb_modrdn                      BDB_SYMBOL(modrdn)
616 #define bdb_search                      BDB_SYMBOL(search)
617 #define bdb_extended                    BDB_SYMBOL(extended)
618 #define bdb_referrals                   BDB_SYMBOL(referrals)
619 #define bdb_operational                 BDB_SYMBOL(operational)
620 #define bdb_hasSubordinates             BDB_SYMBOL(hasSubordinates)
621 #define bdb_tool_entry_open             BDB_SYMBOL(tool_entry_open)
622 #define bdb_tool_entry_close            BDB_SYMBOL(tool_entry_close)
623 #define bdb_tool_entry_next             BDB_SYMBOL(tool_entry_next)
624 #define bdb_tool_entry_get              BDB_SYMBOL(tool_entry_get)
625 #define bdb_tool_entry_put              BDB_SYMBOL(tool_entry_put)
626 #define bdb_tool_entry_reindex          BDB_SYMBOL(tool_entry_reindex)
627 #define bdb_tool_dn2id_get              BDB_SYMBOL(tool_dn2id_get)
628 #define bdb_tool_id2entry_get           BDB_SYMBOL(tool_id2entry_get)
629 #define bdb_tool_entry_modify           BDB_SYMBOL(tool_entry_modify)
630 #define bdb_tool_idl_add                BDB_SYMBOL(tool_idl_add)
631
632 extern BI_init                          bdb_back_initialize;
633
634 extern BI_db_config                     bdb_db_config;
635
636 extern BI_op_add                        bdb_add;
637 extern BI_op_bind                       bdb_bind;
638 extern BI_op_compare                    bdb_compare;
639 extern BI_op_delete                     bdb_delete;
640 extern BI_op_modify                     bdb_modify;
641 extern BI_op_modrdn                     bdb_modrdn;
642 extern BI_op_search                     bdb_search;
643 extern BI_op_extended                   bdb_extended;
644
645 extern BI_chk_referrals                 bdb_referrals;
646
647 extern BI_operational                   bdb_operational;
648
649 extern BI_has_subordinates              bdb_hasSubordinates;
650
651 /* tools.c */
652 extern BI_tool_entry_open               bdb_tool_entry_open;
653 extern BI_tool_entry_close              bdb_tool_entry_close;
654 extern BI_tool_entry_next               bdb_tool_entry_next;
655 extern BI_tool_entry_get                bdb_tool_entry_get;
656 extern BI_tool_entry_put                bdb_tool_entry_put;
657 extern BI_tool_entry_reindex            bdb_tool_entry_reindex;
658 extern BI_tool_dn2id_get                bdb_tool_dn2id_get;
659 extern BI_tool_id2entry_get             bdb_tool_id2entry_get;
660 extern BI_tool_entry_modify             bdb_tool_entry_modify;
661
662 int bdb_tool_idl_add( BackendDB *be, DB *db, DB_TXN *txn, DBT *key, ID id );
663
664 LDAP_END_DECL
665
666 #endif /* _PROTO_BDB_H */