]> git.sur5r.net Git - openldap/commitdiff
Added index_delete_values() in preparation for changes that will keep
authorJuan Gomez <gomez@openldap.org>
Mon, 14 Jun 1999 18:16:05 +0000 (18:16 +0000)
committerJuan Gomez <gomez@openldap.org>
Mon, 14 Jun 1999 18:16:05 +0000 (18:16 +0000)
index files clean.

servers/slapd/back-ldbm/index.c
servers/slapd/back-ldbm/modify.c
servers/slapd/back-ldbm/proto-back-ldbm.h

index 6a13c124bdf3b8452c09fc3bbab3a20fb917e943..7dc4f57f96d57f5581dc9e8d526f003f4b4c0971 100644 (file)
@@ -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,
index 756ceaeadad79baa87639341284f6576561d5405..99048ce61c6d7b4857be2dc969eed9a9a297a31e 100644 (file)
@@ -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 ) {
index 548ace4fce519ff8d3434b2a54bfef1b5b7dd0f5..8c01f5827520c06f051c5cd813e27420e98af545 100644 (file)
@@ -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