Removed redundant dn_normalization(strdup(ndn)) from dn2id codes.

Added initial DN_INDICES code behind #ifdef DN_INDICES.
  Generates only equality index.  Will add parent and subtree indices next.
This commit is contained in:
Kurt Zeilenga 1999-08-11 02:57:07 +00:00
parent d143a65cac
commit 82ac9547c9
3 changed files with 49 additions and 16 deletions

View 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 */

View 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 );

View 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 )