mirror of
https://git.openldap.org/openldap/openldap.git
synced 2026-01-16 20:06:06 -05:00
Added index_delete_values() in preparation for changes that will keep
index files clean.
This commit is contained in:
parent
24ec5ded59
commit
499b8fdc04
3 changed files with 41 additions and 2 deletions
|
|
@ -69,13 +69,19 @@ index_add_mods(
|
|||
LDAPMod *mod = &ml->ml_mod;
|
||||
|
||||
switch ( mod->mod_op & ~LDAP_MOD_BVALUES ) {
|
||||
case LDAP_MOD_ADD:
|
||||
case LDAP_MOD_REPLACE:
|
||||
/* XXX: Delete old index data==>problem when this
|
||||
* gets called we lost values already!
|
||||
*/
|
||||
case LDAP_MOD_ADD:
|
||||
rc = index_add_values( be, mod->mod_type,
|
||||
mod->mod_bvalues, id );
|
||||
break;
|
||||
case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
|
||||
case LDAP_MOD_DELETE:
|
||||
rc = index_delete_values( be, mod->mod_type,
|
||||
mod->mod_bvalues, id );
|
||||
break;
|
||||
case LDAP_MOD_SOFTADD: /* SOFTADD means index was there */
|
||||
rc = 0;
|
||||
break;
|
||||
}
|
||||
|
|
@ -220,6 +226,21 @@ add_value(
|
|||
return( rc );
|
||||
}
|
||||
|
||||
/* Remove entries from index files */
|
||||
|
||||
int
|
||||
index_delete_values(
|
||||
Backend *be,
|
||||
char *type,
|
||||
struct berval **vals,
|
||||
ID id
|
||||
)
|
||||
{
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
int
|
||||
index_add_values(
|
||||
Backend *be,
|
||||
|
|
|
|||
|
|
@ -109,6 +109,7 @@ int ldbm_modify_internal(
|
|||
int err;
|
||||
LDAPMod *mod;
|
||||
LDAPModList *ml;
|
||||
Attribute *a;
|
||||
|
||||
if ( ((be->be_lastmod == ON)
|
||||
|| ((be->be_lastmod == UNDEFINED)&&(global_lastmod == ON)))
|
||||
|
|
@ -142,6 +143,17 @@ int ldbm_modify_internal(
|
|||
break;
|
||||
|
||||
case LDAP_MOD_REPLACE:
|
||||
/* Need to remove all values from indexes before they
|
||||
* are lost.
|
||||
*/
|
||||
if( e->e_attrs
|
||||
&& ((a = attr_find( e->e_attrs, mod->mod_type ))
|
||||
!= NULL) ) {
|
||||
|
||||
(void) index_delete_values( be, mod->mod_type,
|
||||
a->a_vals, e->e_id );
|
||||
}
|
||||
|
||||
err = replace_values( e, mod, op->o_ndn );
|
||||
break;
|
||||
|
||||
|
|
@ -339,6 +351,11 @@ replace_values(
|
|||
char *dn
|
||||
)
|
||||
{
|
||||
|
||||
/* XXX: BEFORE YOU GET RID OF PREVIOUS VALUES REMOVE FROM INDEX
|
||||
* FILES
|
||||
*/
|
||||
|
||||
(void) attr_delete( &e->e_attrs, mod->mod_type );
|
||||
|
||||
if ( attr_merge( e, mod->mod_type, mod->mod_bvalues ) != 0 ) {
|
||||
|
|
|
|||
|
|
@ -130,6 +130,7 @@ int index_add_entry LDAP_P(( Backend *be, Entry *e ));
|
|||
int index_add_mods LDAP_P(( Backend *be, LDAPModList *ml, ID id ));
|
||||
ID_BLOCK * index_read LDAP_P(( Backend *be, char *type, int indextype, char *val ));
|
||||
int index_add_values LDAP_P(( Backend *be, char *type, struct berval **vals, ID id ));
|
||||
int index_delete_values LDAP_P(( Backend *be, char *type, struct berval **vals, ID id ));
|
||||
|
||||
/*
|
||||
* kerberos.c
|
||||
|
|
|
|||
Loading…
Reference in a new issue