]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/filterindex.c
More for -q tool mode
[openldap] / servers / slapd / back-bdb / filterindex.c
index e88395f784277f0733963635dd86f22f48a0ae82..d5a3108d8f59fea2622560960f26aea141c732b4 100644 (file)
 
 static int presence_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeDescription *desc,
        ID *ids );
 
 static int equality_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp );
 static int inequality_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp,
        int gtorlt );
 static int approx_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp );
 static int substring_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        SubstringsAssertion *sub,
        ID *ids,
        ID *tmp );
 
 static int list_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        Filter *flist,
        int ftype,
        ID *ids,
@@ -69,7 +69,7 @@ static int list_candidates(
 static int
 ext_candidates(
         Operation *op,
-               u_int32_t locker,
+               BDB_LOCKER locker,
         MatchingRuleAssertion *mra,
         ID *ids,
         ID *tmp,
@@ -79,7 +79,7 @@ ext_candidates(
 static int
 comp_candidates (
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        MatchingRuleAssertion *mra,
        ComponentFilter *f,
        ID *ids,
@@ -89,7 +89,7 @@ comp_candidates (
 static int
 ava_comp_candidates (
                Operation *op,
-               u_int32_t locker,
+               BDB_LOCKER locker,
                AttributeAssertion *ava,
                AttributeAliasing *aa,
                ID *ids,
@@ -100,7 +100,7 @@ ava_comp_candidates (
 int
 bdb_filter_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        Filter  *f,
        ID *ids,
        ID *tmp,
@@ -231,7 +231,7 @@ out:
 static int
 comp_list_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        MatchingRuleAssertion* mra,
        ComponentFilter *flist,
        int     ftype,
@@ -296,7 +296,7 @@ comp_list_candidates(
 static int
 comp_equality_candidates (
         Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
         MatchingRuleAssertion *mra,
        ComponentAssertion *ca,
         ID *ids,
@@ -344,9 +344,6 @@ comp_equality_candidates (
         if( rc != LDAP_SUCCESS ) {
                 return 0;
         }
-        if ( db == NULL ) {
-                return 0;
-        }
 
         if( !mr ) {
                 return 0;
@@ -410,7 +407,7 @@ comp_equality_candidates (
 static int
 ava_comp_candidates (
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        AttributeAliasing *aa,
        ID *ids,
@@ -434,7 +431,7 @@ ava_comp_candidates (
 static int
 comp_candidates (
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        MatchingRuleAssertion *mra,
        ComponentFilter *f,
        ID *ids,
@@ -483,7 +480,7 @@ comp_candidates (
 static int
 ext_candidates(
         Operation *op,
-               u_int32_t locker,
+               BDB_LOCKER locker,
         MatchingRuleAssertion *mra,
         ID *ids,
         ID *tmp,
@@ -507,7 +504,7 @@ ext_candidates(
                BDB_IDL_ZERO( ids );
                if ( mra->ma_rule == slap_schema.si_mr_distinguishedNameMatch ) {
                        ei = NULL;
-                       rc = bdb_cache_find_ndn( op, NULL, &mra->ma_value, &ei );
+                       rc = bdb_cache_find_ndn( op, locker, &mra->ma_value, &ei );
                        if ( rc == LDAP_SUCCESS )
                                bdb_idl_insert( ids, ei->bei_id );
                        if ( ei )
@@ -521,7 +518,7 @@ ext_candidates(
                                struct berval pdn;
                                ei = NULL;
                                dnParent( &mra->ma_value, &pdn );
-                               bdb_cache_find_ndn( op, NULL, &pdn, &ei );
+                               bdb_cache_find_ndn( op, locker, &pdn, &ei );
                                if ( ei ) {
                                        bdb_cache_entryinfo_unlock( ei );
                                        while ( ei && ei->bei_id ) {
@@ -541,7 +538,7 @@ ext_candidates(
                                scope = LDAP_SCOPE_BASE;
                        if ( scope > LDAP_SCOPE_BASE ) {
                                ei = NULL;
-                               rc = bdb_cache_find_ndn( op, NULL, &mra->ma_value, &ei );
+                               rc = bdb_cache_find_ndn( op, locker, &mra->ma_value, &ei );
                                if ( ei )
                                        bdb_cache_entryinfo_unlock( ei );
                                if ( rc == LDAP_SUCCESS ) {
@@ -549,6 +546,7 @@ ext_candidates(
                                        op->ors_scope = scope;
                                        rc = bdb_dn2idl( op, locker, &mra->ma_value, ei, ids,
                                                stack );
+                                       op->ors_scope = sc;
                                }
                                return 0;
                        }
@@ -562,7 +560,7 @@ ext_candidates(
 static int
 list_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        Filter  *flist,
        int             ftype,
        ID *ids,
@@ -628,7 +626,7 @@ list_candidates(
 static int
 presence_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeDescription *desc,
        ID *ids )
 {
@@ -650,19 +648,19 @@ presence_candidates(
        rc = bdb_index_param( op->o_bd, desc, LDAP_FILTER_PRESENT,
                &db, &mask, &prefix );
 
-       if( rc != LDAP_SUCCESS ) {
+       if( rc == LDAP_INAPPROPRIATE_MATCHING ) {
+               /* not indexed */
                Debug( LDAP_DEBUG_TRACE,
-                       "<= bdb_presence_candidates: (%s) index_param "
-                       "returned=%d\n",
-                       desc->ad_cname.bv_val, rc, 0 );
+                       "<= bdb_presence_candidates: (%s) not indexed\n",
+                       desc->ad_cname.bv_val, 0, 0 );
                return 0;
        }
 
-       if( db == NULL ) {
-               /* not indexed */
+       if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_TRACE,
-                       "<= bdb_presence_candidates: (%s) not indexed\n",
-                       desc->ad_cname.bv_val, 0, 0 );
+                       "<= bdb_presence_candidates: (%s) index_param "
+                       "returned=%d\n",
+                       desc->ad_cname.bv_val, rc, 0 );
                return 0;
        }
 
@@ -699,7 +697,7 @@ done:
 static int
 equality_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp )
@@ -721,18 +719,18 @@ equality_candidates(
        rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_EQUALITY,
                &db, &mask, &prefix );
 
-       if( rc != LDAP_SUCCESS ) {
+       if ( rc == LDAP_INAPPROPRIATE_MATCHING ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_equality_candidates: (%s) "
-                       "index_param failed (%d)\n",
-                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
+                       "<= bdb_equality_candidates: (%s) not indexed\n", 
+                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
                return 0;
        }
 
-       if ( db == NULL ) {
+       if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_equality_candidates: (%s) not indexed\n", 
-                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
+                       "<= bdb_equality_candidates: (%s) "
+                       "index_param failed (%d)\n",
+                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
                return 0;
        }
 
@@ -816,7 +814,7 @@ equality_candidates(
 static int
 approx_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp )
@@ -838,18 +836,18 @@ approx_candidates(
        rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_APPROX,
                &db, &mask, &prefix );
 
-       if( rc != LDAP_SUCCESS ) {
+       if ( rc == LDAP_INAPPROPRIATE_MATCHING ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_approx_candidates: (%s) "
-                       "index_param failed (%d)\n",
-                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
+                       "<= bdb_approx_candidates: (%s) not indexed\n",
+                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
                return 0;
        }
 
-       if ( db == NULL ) {
+       if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_approx_candidates: (%s) not indexed\n",
-                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
+                       "<= bdb_approx_candidates: (%s) "
+                       "index_param failed (%d)\n",
+                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
                return 0;
        }
 
@@ -936,7 +934,7 @@ approx_candidates(
 static int
 substring_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        SubstringsAssertion     *sub,
        ID *ids,
        ID *tmp )
@@ -958,18 +956,18 @@ substring_candidates(
        rc = bdb_index_param( op->o_bd, sub->sa_desc, LDAP_FILTER_SUBSTRINGS,
                &db, &mask, &prefix );
 
-       if( rc != LDAP_SUCCESS ) {
+       if ( rc == LDAP_INAPPROPRIATE_MATCHING ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_substring_candidates: (%s) "
-                       "index_param failed (%d)\n",
-                       sub->sa_desc->ad_cname.bv_val, rc, 0 );
+                       "<= bdb_substring_candidates: (%s) not indexed\n",
+                       sub->sa_desc->ad_cname.bv_val, 0, 0 );
                return 0;
        }
 
-       if ( db == NULL ) {
+       if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_substring_candidates: (%s) not indexed\n",
-                       sub->sa_desc->ad_cname.bv_val, 0, 0 );
+                       "<= bdb_substring_candidates: (%s) "
+                       "index_param failed (%d)\n",
+                       sub->sa_desc->ad_cname.bv_val, rc, 0 );
                return 0;
        }
 
@@ -1052,7 +1050,7 @@ substring_candidates(
 static int
 inequality_candidates(
        Operation *op,
-       u_int32_t locker,
+       BDB_LOCKER locker,
        AttributeAssertion *ava,
        ID *ids,
        ID *tmp,
@@ -1075,18 +1073,18 @@ inequality_candidates(
        rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_EQUALITY,
                &db, &mask, &prefix );
 
-       if( rc != LDAP_SUCCESS ) {
+       if ( rc == LDAP_INAPPROPRIATE_MATCHING ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_inequality_candidates: (%s) "
-                       "index_param failed (%d)\n",
-                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
+                       "<= bdb_inequality_candidates: (%s) not indexed\n", 
+                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
                return 0;
        }
 
-       if ( db == NULL ) {
+       if( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
-                       "<= bdb_inequality_candidates: (%s) not indexed\n", 
-                       ava->aa_desc->ad_cname.bv_val, 0, 0 );
+                       "<= bdb_inequality_candidates: (%s) "
+                       "index_param failed (%d)\n",
+                       ava->aa_desc->ad_cname.bv_val, rc, 0 );
                return 0;
        }