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