From 2e8a98e3a1f7393f56e52ee1ab4f049ffe01ef1f Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Mon, 14 Jan 2002 10:37:08 +0000 Subject: [PATCH] Fix subtype indexing. Really really made it the default. --- servers/slapd/back-bdb/index.c | 15 ++++----------- servers/slapd/back-ldbm/index.c | 16 +++++----------- servers/slapd/index.c | 2 -- servers/slapd/slap.h | 1 - 4 files changed, 9 insertions(+), 25 deletions(-) diff --git a/servers/slapd/back-bdb/index.c b/servers/slapd/back-bdb/index.c index bca4444eb4..eff91a3255 100644 --- a/servers/slapd/back-bdb/index.c +++ b/servers/slapd/back-bdb/index.c @@ -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 ) { diff --git a/servers/slapd/back-ldbm/index.c b/servers/slapd/back-ldbm/index.c index 71ac158411..65347d8e77 100644 --- a/servers/slapd/back-ldbm/index.c +++ b/servers/slapd/back-ldbm/index.c @@ -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 ) { diff --git a/servers/slapd/index.c b/servers/slapd/index.c index 786ccb388a..6d68292906 100644 --- a/servers/slapd/index.c +++ b/servers/slapd/index.c @@ -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; } diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index 68f8606419..cda6b28613 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -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 -- 2.39.5