]> git.sur5r.net Git - openldap/commitdiff
Update substr indexing macros to better separate
authorKurt Zeilenga <kurt@openldap.org>
Tue, 4 May 2004 22:31:57 +0000 (22:31 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Tue, 4 May 2004 22:31:57 +0000 (22:31 +0000)
initial/final string settings from any string settings.

servers/slapd/schema_init.c
servers/slapd/slap.h

index ae59168b88f34fc879819333043735e27367f4d6..963cc69c958c35b122089ebf7ebcde64ae36457d 100644 (file)
@@ -405,31 +405,27 @@ octetStringSubstringsIndexer(
 
        for( i=0; values[i].bv_val != NULL; i++ ) {
                /* count number of indices to generate */
-               if( values[i].bv_len < SLAP_INDEX_SUBSTR_MINLEN ) {
-                       continue;
-               }
-
                if( flags & SLAP_INDEX_SUBSTR_INITIAL ) {
-                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_MAXLEN ) {
-                               nkeys += SLAP_INDEX_SUBSTR_MAXLEN -
-                                       (SLAP_INDEX_SUBSTR_MINLEN - 1);
-                       } else {
-                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_MINLEN - 1);
+                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_IF_MAXLEN ) {
+                               nkeys += SLAP_INDEX_SUBSTR_IF_MAXLEN -
+                                       (SLAP_INDEX_SUBSTR_IF_MINLEN - 1);
+                       } else if( values[i].bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN ) {
+                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_IF_MINLEN - 1);
                        }
                }
 
                if( flags & SLAP_INDEX_SUBSTR_ANY ) {
-                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_MAXLEN ) {
-                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_MAXLEN - 1);
+                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_ANY_LEN ) {
+                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_ANY_LEN - 1);
                        }
                }
 
                if( flags & SLAP_INDEX_SUBSTR_FINAL ) {
-                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_MAXLEN ) {
-                               nkeys += SLAP_INDEX_SUBSTR_MAXLEN -
-                                       ( SLAP_INDEX_SUBSTR_MINLEN - 1);
-                       } else {
-                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_MINLEN - 1);
+                       if( values[i].bv_len >= SLAP_INDEX_SUBSTR_IF_MAXLEN ) {
+                               nkeys += SLAP_INDEX_SUBSTR_IF_MAXLEN -
+                                       ( SLAP_INDEX_SUBSTR_IF_MINLEN - 1);
+                       } else if( values[i].bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN ) {
+                               nkeys += values[i].bv_len - (SLAP_INDEX_SUBSTR_IF_MINLEN - 1);
                        }
                }
        }
@@ -449,13 +445,11 @@ octetStringSubstringsIndexer(
        for( i=0; values[i].bv_val != NULL; i++ ) {
                ber_len_t j,max;
 
-               if( values[i].bv_len < SLAP_INDEX_SUBSTR_MINLEN ) continue;
-
                if( ( flags & SLAP_INDEX_SUBSTR_ANY ) &&
-                       ( values[i].bv_len >= SLAP_INDEX_SUBSTR_MAXLEN ) )
+                       ( values[i].bv_len >= SLAP_INDEX_SUBSTR_ANY_LEN ) )
                {
                        char pre = SLAP_INDEX_SUBSTR_PREFIX;
-                       max = values[i].bv_len - (SLAP_INDEX_SUBSTR_MAXLEN - 1);
+                       max = values[i].bv_len - (SLAP_INDEX_SUBSTR_ANY_LEN - 1);
 
                        for( j=0; j<max; j++ ) {
                                HASH_Init( &HASHcontext );
@@ -472,17 +466,20 @@ octetStringSubstringsIndexer(
                                        (unsigned char *)mr->smr_oid, mlen );
                                HASH_Update( &HASHcontext,
                                        (unsigned char *)&values[i].bv_val[j],
-                                       SLAP_INDEX_SUBSTR_MAXLEN );
+                                       SLAP_INDEX_SUBSTR_ANY_LEN );
                                HASH_Final( HASHdigest, &HASHcontext );
 
                                ber_dupbv_x( &keys[nkeys++], &digest, ctx );
                        }
                }
 
-               max = SLAP_INDEX_SUBSTR_MAXLEN < values[i].bv_len
-                       ? SLAP_INDEX_SUBSTR_MAXLEN : values[i].bv_len;
+               /* skip if too short */ 
+               if( values[i].bv_len < SLAP_INDEX_SUBSTR_IF_MINLEN ) continue;
+
+               max = SLAP_INDEX_SUBSTR_IF_MAXLEN < values[i].bv_len
+                       ? SLAP_INDEX_SUBSTR_IF_MAXLEN : values[i].bv_len;
 
-               for( j=SLAP_INDEX_SUBSTR_MINLEN; j<=max; j++ ) {
+               for( j=SLAP_INDEX_SUBSTR_IF_MINLEN; j<=max; j++ ) {
                        char pre;
 
                        if( flags & SLAP_INDEX_SUBSTR_INITIAL ) {
@@ -526,7 +523,6 @@ octetStringSubstringsIndexer(
                        }
 
                }
-
        }
 
        if( nkeys > 0 ) {
@@ -563,8 +559,9 @@ octetStringSubstringsFilter (
 
        sa = (SubstringsAssertion *) assertedValue;
 
-       if( flags & SLAP_INDEX_SUBSTR_INITIAL && sa->sa_initial.bv_val != NULL
-               && sa->sa_initial.bv_len >= SLAP_INDEX_SUBSTR_MINLEN )
+       if( flags & SLAP_INDEX_SUBSTR_INITIAL &&
+               sa->sa_initial.bv_val != NULL &&
+               sa->sa_initial.bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN )
        {
                nkeys++;
        }
@@ -572,16 +569,17 @@ octetStringSubstringsFilter (
        if( flags & SLAP_INDEX_SUBSTR_ANY && sa->sa_any != NULL ) {
                ber_len_t i;
                for( i=0; sa->sa_any[i].bv_val != NULL; i++ ) {
-                       if( sa->sa_any[i].bv_len >= SLAP_INDEX_SUBSTR_MAXLEN ) {
-                               /* don't bother accounting for stepping */
+                       if( sa->sa_any[i].bv_len >= SLAP_INDEX_SUBSTR_ANY_LEN ) {
+                               /* don't bother accounting with stepping */
                                nkeys += sa->sa_any[i].bv_len -
-                                       ( SLAP_INDEX_SUBSTR_MAXLEN - 1 );
+                                       ( SLAP_INDEX_SUBSTR_ANY_LEN - 1 );
                        }
                }
        }
 
-       if( flags & SLAP_INDEX_SUBSTR_FINAL && sa->sa_final.bv_val != NULL &&
-               sa->sa_final.bv_len >= SLAP_INDEX_SUBSTR_MINLEN )
+       if( flags & SLAP_INDEX_SUBSTR_FINAL &&
+               sa->sa_final.bv_val != NULL &&
+               sa->sa_final.bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN )
        {
                nkeys++;
        }
@@ -600,14 +598,15 @@ octetStringSubstringsFilter (
        keys = slap_sl_malloc( sizeof( struct berval ) * (nkeys+1), ctx );
        nkeys = 0;
 
-       if( flags & SLAP_INDEX_SUBSTR_INITIAL && sa->sa_initial.bv_val != NULL &&
-               sa->sa_initial.bv_len >= SLAP_INDEX_SUBSTR_MINLEN )
+       if( flags & SLAP_INDEX_SUBSTR_INITIAL &&
+               sa->sa_initial.bv_val != NULL &&
+               sa->sa_initial.bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN )
        {
                pre = SLAP_INDEX_SUBSTR_INITIAL_PREFIX;
                value = &sa->sa_initial;
 
-               klen = SLAP_INDEX_SUBSTR_MAXLEN < value->bv_len
-                       ? SLAP_INDEX_SUBSTR_MAXLEN : value->bv_len;
+               klen = SLAP_INDEX_SUBSTR_IF_MAXLEN < value->bv_len
+                       ? SLAP_INDEX_SUBSTR_IF_MAXLEN : value->bv_len;
 
                HASH_Init( &HASHcontext );
                if( prefix != NULL && prefix->bv_len > 0 ) {
@@ -630,18 +629,18 @@ octetStringSubstringsFilter (
        if( flags & SLAP_INDEX_SUBSTR_ANY && sa->sa_any != NULL ) {
                ber_len_t i, j;
                pre = SLAP_INDEX_SUBSTR_PREFIX;
-               klen = SLAP_INDEX_SUBSTR_MAXLEN;
+               klen = SLAP_INDEX_SUBSTR_ANY_LEN;
 
                for( i=0; sa->sa_any[i].bv_val != NULL; i++ ) {
-                       if( sa->sa_any[i].bv_len < SLAP_INDEX_SUBSTR_MAXLEN ) {
+                       if( sa->sa_any[i].bv_len < SLAP_INDEX_SUBSTR_ANY_LEN ) {
                                continue;
                        }
 
                        value = &sa->sa_any[i];
 
                        for(j=0;
-                               j <= value->bv_len - SLAP_INDEX_SUBSTR_MAXLEN;
-                               j += SLAP_INDEX_SUBSTR_STEP )
+                               j <= value->bv_len - SLAP_INDEX_SUBSTR_ANY_LEN;
+                               j += SLAP_INDEX_SUBSTR_ANY_STEP )
                        {
                                HASH_Init( &HASHcontext );
                                if( prefix != NULL && prefix->bv_len > 0 ) {
@@ -663,14 +662,15 @@ octetStringSubstringsFilter (
                }
        }
 
-       if( flags & SLAP_INDEX_SUBSTR_FINAL && sa->sa_final.bv_val != NULL &&
-               sa->sa_final.bv_len >= SLAP_INDEX_SUBSTR_MINLEN )
+       if( flags & SLAP_INDEX_SUBSTR_FINAL &&
+               sa->sa_final.bv_val != NULL &&
+               sa->sa_final.bv_len >= SLAP_INDEX_SUBSTR_IF_MINLEN )
        {
                pre = SLAP_INDEX_SUBSTR_FINAL_PREFIX;
                value = &sa->sa_final;
 
-               klen = SLAP_INDEX_SUBSTR_MAXLEN < value->bv_len
-                       ? SLAP_INDEX_SUBSTR_MAXLEN : value->bv_len;
+               klen = SLAP_INDEX_SUBSTR_IF_MAXLEN < value->bv_len
+                       ? SLAP_INDEX_SUBSTR_IF_MAXLEN : value->bv_len;
 
                HASH_Init( &HASHcontext );
                if( prefix != NULL && prefix->bv_len > 0 ) {
index 1c0bf3175c5170716db96bdede840b3e0714aebb..3ea9dc2462ad6192888300e833f2e64c2d21b820 100644 (file)
@@ -225,9 +225,21 @@ typedef struct slap_ssf_set {
        | SLAP_INDEX_SUBSTR_ANY \
        | SLAP_INDEX_SUBSTR_FINAL )
 
-#define SLAP_INDEX_SUBSTR_MINLEN       2
-#define SLAP_INDEX_SUBSTR_MAXLEN       4
-#define SLAP_INDEX_SUBSTR_STEP 2
+/* constants for initial/final substrings indices */
+#ifndef SLAP_INDEX_SUBSTR_IF_MINLEN
+# define SLAP_INDEX_SUBSTR_IF_MINLEN   2
+#endif
+#ifndef SLAP_INDEX_SUBSTR_IF_MAXLEN
+# define SLAP_INDEX_SUBSTR_IF_MAXLEN   4
+#endif
+
+/* constants for any substrings indices */
+#ifndef SLAP_INDEX_SUBSTR_ANY_LEN
+# define SLAP_INDEX_SUBSTR_ANY_LEN     4
+#endif
+#ifndef SLAP_INDEX_SUBSTR_ANY_STEP
+# define SLAP_INDEX_SUBSTR_ANY_STEP    2
+#endif
 
 #define SLAP_INDEX_FLAGS         0xF000UL
 #define SLAP_INDEX_NOSUBTYPES    0x1000UL /* don't use index w/ subtypes */