]> git.sur5r.net Git - openldap/commitdiff
Removed redundant dn_normalization(strdup(ndn)) from dn2id codes.
authorKurt Zeilenga <kurt@openldap.org>
Wed, 11 Aug 1999 02:57:07 +0000 (02:57 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 11 Aug 1999 02:57:07 +0000 (02:57 +0000)
Added initial DN_INDICES code behind #ifdef DN_INDICES.
  Generates only equality index.  Will add parent and subtree indices next.

servers/slapd/back-ldbm/back-ldbm.h
servers/slapd/back-ldbm/dn2id.c
servers/slapd/tools/ldif2id2children.c

index a65c622645b7e87f46b71e925269766abcc28510..bd2613d561f396f68d1898d0d2c27dda2cad084e 100644 (file)
@@ -24,6 +24,11 @@ LDAP_BEGIN_DECL
 
 #define SUBLEN                 3
 
+/* #define DN_INDICES 1 *//* generate dn eq, subtree, and parent indices */
+#define DN_EQ_PREFIX           '='
+#define DN_SUBTREE_PREFIX      '+'
+#define DN_PARENT_PREFIX       '-'
+
 /*
  * there is a single index for each attribute.  these prefixes ensure
  * that there is no collision among keys.
@@ -35,7 +40,8 @@ LDAP_BEGIN_DECL
 
 /* allow 3 characters per byte + PREFIX + EOS */
 #define CONT_SIZE ( sizeof(long)*3 + 1 + 1 )
-/* #define CONT_POSTFIX        1       *//* postfix original key */
+
+#undef CONT_POSTFIX    /* postfix original key */
 
 #define UNKNOWN_PREFIX '?'     /* prefix for unknown keys    */
 
index 04d219d1881f50beec41bb3d18ea123a56b3ee11..7bfb1078e22ab7e45fd1c87f4a17cc5b97f671cd 100644 (file)
@@ -39,11 +39,15 @@ dn2id_add(
                return( -1 );
        }
 
-       dn = ch_strdup( dn );
-       (void) dn_normalize_case( dn );
-
+#ifndef DN_INDICES
        key.dptr = dn;
-       key.dsize = strlen( dn ) + 1;
+       key.dsize = strlen( key.dptr ) + 1;
+#else
+       key.dsize = strlen( dn ) + 2;
+       key.dptr = ch_malloc( key.dsize );
+       sprintf( key.dptr, "%c%s", DN_EQ_PREFIX, dn );
+#endif
+
        data.dptr = (char *) &id;
        data.dsize = sizeof(ID);
 
@@ -52,9 +56,12 @@ dn2id_add(
 
        rc = ldbm_cache_store( db, key, data, flags );
 
-       free( dn );
        ldbm_cache_close( be, db );
 
+#ifdef DN_INDICES
+       free( key.dptr );
+#endif
+
        Debug( LDAP_DEBUG_TRACE, "<= dn2id_add %d\n", rc, 0, 0 );
        return( rc );
 }
@@ -73,13 +80,10 @@ dn2id(
        ldbm_datum_init( key );
        ldbm_datum_init( data );
 
-       dn = ch_strdup( dn );
        Debug( LDAP_DEBUG_TRACE, "=> dn2id( \"%s\" )\n", dn, 0, 0 );
-       (void) dn_normalize_case( dn );
 
        /* first check the cache */
        if ( (id = cache_find_entry_dn2id( be, &li->li_cache, dn )) != NOID ) {
-               free( dn );
                Debug( LDAP_DEBUG_TRACE, "<= dn2id %ld (in cache)\n", id,
                        0, 0 );
                return( id );
@@ -87,19 +91,27 @@ dn2id(
 
        if ( (db = ldbm_cache_open( be, "dn2id", LDBM_SUFFIX, LDBM_WRCREAT ))
                == NULL ) {
-               free( dn );
                Debug( LDAP_DEBUG_ANY, "<= dn2id could not open dn2id%s\n",
                        LDBM_SUFFIX, 0, 0 );
                return( NOID );
        }
 
+#ifndef DN_INDICES
        key.dptr = dn;
-       key.dsize = strlen( dn ) + 1;
+       key.dsize = strlen( key.dptr ) + 1;
+#else
+       key.dsize = strlen( dn ) + 2;
+       key.dptr = ch_malloc( key.dsize );
+       sprintf( key.dptr, "%c%s", DN_EQ_PREFIX, dn );
+#endif
 
        data = ldbm_cache_fetch( db, key );
 
        ldbm_cache_close( be, db );
-       free( dn );
+
+#ifdef DN_INDICES
+       free( key.dptr );
+#endif
 
        if ( data.dptr == NULL ) {
                Debug( LDAP_DEBUG_TRACE, "<= dn2id NOID\n", 0, 0, 0 );
@@ -136,14 +148,20 @@ dn2id_delete(
                return( -1 );
        }
 
-       dn = ch_strdup( dn );
-       (void) dn_normalize_case( dn );
+#ifndef DN_INDICES
        key.dptr = dn;
-       key.dsize = strlen( dn ) + 1;
+       key.dsize = strlen( key.dptr ) + 1;
+#else
+       key.dsize = strlen( dn ) + 2;
+       key.dptr = ch_malloc( key.dsize );
+       sprintf( key.dptr, "%c%s", DN_EQ_PREFIX, dn );
+#endif
 
        rc = ldbm_cache_delete( db, key );
 
-       free( dn );
+#ifdef DN_INDICES
+       free( key.dptr );
+#endif
 
        ldbm_cache_close( be, db );
 
index 3acbbcf74e7a58e6f9ff0c0d0d593a04484a61ce..4258a87aeab9c0fdabe6115095fdf7371b4e1dbd 100644 (file)
@@ -86,8 +86,14 @@ main( int argc, char **argv )
                                            id );
                                } else {
                                        (void) dn_normalize_case( val );
+#ifndef DN_INDICES
                                        key.dptr = val;
                                        key.dsize = strlen( val ) + 1;
+#else
+                                       key.dsize = strlen( val ) + 2;
+                                       key.dptr = ch_malloc( key.dsize );
+                                       sprintf( key.dptr, "%c%s", DN_EQ_PREFIX, val );
+#endif
                                        data.dptr = (char *) &id;
                                        data.dsize = sizeof(ID);
                                        if ( ldbm_store( db->dbc_db, key, data,
@@ -95,6 +101,9 @@ main( int argc, char **argv )
                                                perror( "dn2id ldbm_store" );
                                                exit( EXIT_FAILURE );
                                        }
+#ifdef DN_INDICES
+                                       free( val );
+#endif
                                }
        }
        if ( buf )