]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/key.c
f5b877e5a21ee6d9ca5a85d2bbf03e30bcf6de54
[openldap] / servers / slapd / back-bdb / key.c
1 /* index.c - routines for dealing with attribute indexes */
2 /* $OpenLDAP$ */
3 /*
4  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
5  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
6  */
7
8 #include "portable.h"
9
10 #include <stdio.h>
11
12 #include <ac/string.h>
13 #include <ac/socket.h>
14
15 #include "slap.h"
16 #include "back-bdb.h"
17
18 #ifdef BDB_FILTER_INDICES
19 /* read a key */
20 int
21 bdb_key_read(
22     Backend     *be,
23         DB *db,
24         DB_TXN *txn,
25     struct berval *k,
26         ID *ids
27 )
28 {
29         DBT             key;
30
31 #ifdef NEW_LOGGING
32         LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
33                 "key_read: enter\n" ));
34 #else
35         Debug( LDAP_DEBUG_TRACE, "=> key_read\n", 0, 0, 0 );
36 #endif
37
38         DBzero( &key );
39         key.data = k->bv_val;
40         key.size = k->bv_len;
41
42         rc = bdb_idl_fetch_key( be, db, txn, key, ids );
43
44         if( rc != LDAP_SUCCESS ) {
45 #ifdef NEW_LOGGING
46                 LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
47                         "bdb_key_read: failed (%d)\n",
48                         rc ));
49 #else
50                 Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read: failed (%d)\n",
51                         rc, 0, 0 );
52 #endif
53         } else {
54 #ifdef NEW_LOGGING
55                 LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
56                         "bdb_key_read: %ld candidates\n",
57                         idl ? ID_BLOCK_NIDS(idl) : 0 ));
58 #else
59                 Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read %ld candidates\n",
60                 idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
61 #endif
62         }
63
64         return rc;
65 }
66 #endif
67
68 #ifdef BDB_INDEX
69 /* Add or remove stuff from index files */
70 int
71 bdb_key_change(
72     Backend *be,
73     DB *db,
74         DB_TXN *txn,
75     struct berval *k,
76     ID id,
77     int op
78 )
79 {
80         int     rc;
81         DBT     key;
82
83 #ifdef NEW_LOGGING
84         LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
85                 "key_change: %s ID %lx\n",
86                 op == SLAP_INDEX_ADD_OP ? "Add" : "Delete", (long)id ));
87 #else
88         Debug( LDAP_DEBUG_TRACE, "=> key_change(%s,%lx)\n",
89                 op == SLAP_INDEX_ADD_OP ? "ADD":"DELETE", (long) id, 0 );
90 #endif
91
92         DBTzero( &key );
93         key.data = k->bv_val;
94         key.size = k->bv_len;
95
96         if (op == SLAP_INDEX_ADD_OP) {
97             /* Add values */
98             rc = bdb_idl_insert_key( be, db, txn, &key, id );
99
100         } else {
101             /* Delete values */
102             rc = bdb_idl_delete_key( be, db, txn, &key, id );
103         }
104
105 #ifdef NEW_LOGGING
106         LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
107                 "key_change: return %d\n", rc ));
108 #else
109         Debug( LDAP_DEBUG_TRACE, "<= key_change %d\n", rc, 0, 0 );
110 #endif
111
112         return rc;
113 }
114 #endif