]> git.sur5r.net Git - openldap/commitdiff
Fix subtype indexing. Really really made it the default.
authorHoward Chu <hyc@openldap.org>
Mon, 14 Jan 2002 10:37:08 +0000 (10:37 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 14 Jan 2002 10:37:08 +0000 (10:37 +0000)
servers/slapd/back-bdb/index.c
servers/slapd/back-ldbm/index.c
servers/slapd/index.c
servers/slapd/slap.h

index bca4444eb4f14a7818875338d207efd590d3e906..eff91a3255278f15365ebea091f8064a0f819878 100644 (file)
@@ -43,7 +43,7 @@ static slap_mask_t index_mask(
                /* has language tag */
                bdb_attr_mask( be->be_private, desc->ad_type->sat_ad, &mask );
 
-               if (! ( mask & SLAP_INDEX_NOLANG ) ) {
+               if ( mask && ( mask ^ SLAP_INDEX_NOLANG ) ) {
                        *atname = desc->ad_type->sat_cname;
                        *dbname = desc->ad_type->sat_cname.bv_val;
                        return mask;
@@ -57,19 +57,11 @@ static slap_mask_t index_mask(
 
                bdb_attr_mask( be->be_private, at->sat_ad, &mask );
 
-               if( mask & SLAP_INDEX_AUTO_SUBTYPES ) {
+               if ( mask && ( mask ^ SLAP_INDEX_NOSUBTYPES ) ) {
                        *atname = desc->ad_type->sat_cname;
                        *dbname = at->sat_cname.bv_val;
                        return mask;
                }
-
-               if( !( mask & SLAP_INDEX_NOSUBTYPES ) ) {
-                       *atname = at->sat_cname;
-                       *dbname = at->sat_cname.bv_val;
-                       return mask;
-               }
-
-               if( mask ) break;
        }
 
        return 0;
@@ -299,7 +291,7 @@ static int index_at_values(
 
        if( mask ) {
                *dbnamep = type->sat_cname.bv_val;
-       } else if ( !( tmpmask & SLAP_INDEX_AUTO_SUBTYPES ) ) {
+       } else if ( tmpmask ^ SLAP_INDEX_NOSUBTYPES ) {
                mask = tmpmask;
        }
 
@@ -310,6 +302,7 @@ static int index_at_values(
                        mask );
 
                if( rc ) return rc;
+               *maskp = mask;
        }
 
        if( lang->bv_len ) {
index 71ac1584115a2666f9fa1206e9d43b721d6a001f..65347d8e776ae9c593f979b43278012aaf471fdb 100644 (file)
@@ -39,7 +39,7 @@ static slap_mask_t index_mask(
                /* has language tag */
                attr_mask( be->be_private, desc->ad_type->sat_ad, &mask );
 
-               if( !( mask & SLAP_INDEX_NOLANG ) ) {
+               if( mask && ( mask ^ SLAP_INDEX_NOLANG ) ) {
                        *atname = desc->ad_type->sat_cname;
                        *dbname = desc->ad_type->sat_cname.bv_val;
                        return mask;
@@ -47,25 +47,18 @@ static slap_mask_t index_mask(
        }
 
        /* see if supertype defined mask for its subtypes */
-       for( at = desc->ad_type; at != NULL ; at = at->sat_sup ) {
+       for( at = desc->ad_type->sat_sup; at != NULL ; at = at->sat_sup ) {
                /* If no AD, we've never indexed this type */
                if (!at->sat_ad)
                        continue;
                
                attr_mask( be->be_private, at->sat_ad, &mask );
 
-               if( mask & SLAP_INDEX_AUTO_SUBTYPES ) {
+               if( mask && ( mask ^ SLAP_INDEX_NOSUBTYPES ) ) {
                        *atname = desc->ad_type->sat_cname;
                        *dbname = at->sat_cname.bv_val;
                        return mask;
                }
-               if( !( mask & SLAP_INDEX_NOSUBTYPES ) ) {
-                       *atname = at->sat_cname;
-                       *dbname = at->sat_cname.bv_val;
-                       return mask;
-               }
-
-               if( mask ) break;
        }
 
        return 0;
@@ -264,7 +257,7 @@ static int index_at_values(
 
        if( mask ) {
                *dbnamep = type->sat_cname.bv_val;
-       } else if ( tmpmask & SLAP_INDEX_AUTO_SUBTYPES ) {
+       } else if ( tmpmask ^ SLAP_INDEX_NOSUBTYPES ) {
                mask = tmpmask;
        }
 
@@ -273,6 +266,7 @@ static int index_at_values(
                        &type->sat_cname,
                        vals, id, op,
                        mask );
+               *maskp = mask;
        }
 
        if( lang->bv_len ) {
index 786ccb388a1fa7b66420e58633ad7745253918b1..6d68292906e29bb4a6d02f2bef8dd0cd985cc907 100644 (file)
@@ -56,8 +56,6 @@ int slap_str2index( const char *str, slap_mask_t *idx )
                *idx = SLAP_INDEX_NOLANG;
        } else if ( strcasecmp( str, "nosubtypes" ) == 0 ) {
                *idx = SLAP_INDEX_NOSUBTYPES;
-       } else if ( strcasecmp( str, "autosubtypes" ) == 0 ) {
-               *idx = SLAP_INDEX_AUTO_SUBTYPES;
        } else {
                return LDAP_OTHER;
        }
index 68f86064198d26a776c4312ac5a0cc1d23f50b09..cda6b28613db2bad9fd74914f2b427d7797f9e1b 100644 (file)
@@ -196,7 +196,6 @@ typedef struct slap_ssf_set {
 #define SLAP_INDEX_FLAGS         0xF000UL
 #define SLAP_INDEX_NOSUBTYPES    0x1000UL /* don't use index w/ subtypes */
 #define SLAP_INDEX_NOLANG        0x2000UL /* don't use index w/ lang */
-#define SLAP_INDEX_AUTO_SUBTYPES 0x4000UL /* use mask with lang subtypes */
 
 /*
  * there is a single index for each attribute.  these prefixes ensure