]> git.sur5r.net Git - openldap/blob - servers/slapd/back-bdb/key.c
f2d0eed5869a5cd424b432b8d607ec43fc4b4b6a
[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         bv2DBT(k,&key);
40
41         rc = bdb_idl_fetch_key( be, db, txn, key, ids );
42
43         if( rc != LDAP_SUCCESS ) {
44 #ifdef NEW_LOGGING
45                 LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
46                         "bdb_key_read: failed (%d)\n",
47                         rc ));
48 #else
49                 Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read: failed (%d)\n",
50                         rc, 0, 0 );
51 #endif
52         } else {
53 #ifdef NEW_LOGGING
54                 LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
55                         "bdb_key_read: %ld candidates\n",
56                         idl ? ID_BLOCK_NIDS(idl) : 0 ));
57 #else
58                 Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read %ld candidates\n",
59                 idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 );
60 #endif
61         }
62
63         return rc;
64 }
65 #endif
66
67 #ifdef BDB_INDEX
68 /* Add or remove stuff from index files */
69 int
70 bdb_key_change(
71     Backend *be,
72     DB *db,
73         DB_TXN *txn,
74     struct berval *k,
75     ID id,
76     int op
77 )
78 {
79         int     rc;
80         DBT     key;
81
82 #ifdef NEW_LOGGING
83         LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
84                 "key_change: %s ID %lx\n",
85                 op == SLAP_INDEX_ADD_OP ? "Add" : "Delete", (long)id ));
86 #else
87         Debug( LDAP_DEBUG_TRACE, "=> key_change(%s,%lx)\n",
88                 op == SLAP_INDEX_ADD_OP ? "ADD":"DELETE", (long) id, 0 );
89 #endif
90
91         DBTzero( &key );
92         bv2DBT(k,&key);
93
94         if (op == SLAP_INDEX_ADD_OP) {
95             /* Add values */
96             rc = bdb_idl_insert_key( be, db, txn, &key, id );
97
98         } else {
99             /* Delete values */
100             rc = bdb_idl_delete_key( be, db, txn, &key, id );
101         }
102
103 #ifdef NEW_LOGGING
104         LDAP_LOG(( "index", LDAP_LEVEL_ENTRY,
105                 "key_change: return %d\n", rc ));
106 #else
107         Debug( LDAP_DEBUG_TRACE, "<= key_change %d\n", rc, 0, 0 );
108 #endif
109
110         return rc;
111 }
112 #endif