BER_BVNULL
};
+#define CHECK_ADD 1
+#define CHECK_DEL 2
+
static void
mdb_modify_idxflags(
Operation *op,
AttributeDescription *desc,
- int got_delete,
+ int ixcheck,
Attribute *newattrs,
Attribute *oldattrs )
{
* but not in case of NOOP... */
ai = mdb_index_mask( op->o_bd, desc, &ix_at );
if ( ai ) {
- if ( got_delete ) {
+ if ( ixcheck & CHECK_DEL ) {
Attribute *ap;
struct berval ix2;
}
}
- } else {
+ }
+ if ( ixcheck & CHECK_ADD ) {
Attribute *ap;
ap = attr_find( newattrs, desc );
Attribute *ap, *aold, *anew;
int glue_attr_delete = 0;
int softop, chkpresent;
- int got_delete;
+ int ixcheck;
int a_flags;
MDB_cursor *mvc = NULL;
for ( ml = modlist; ml != NULL; ml = ml->sml_next ) {
mod = &ml->sml_mod;
- got_delete = 0;
+ ixcheck = 0;
aold = attr_find( e->e_attrs, mod->sm_desc );
if (aold)
if ( err )
goto mval_fail;
}
+ ixcheck |= CHECK_ADD;
}
break;
err, *text );
} else {
if (softop != 2)
- got_delete = 1;
+ ixcheck |= CHECK_DEL;
/* check for big multivalued attrs */
if (a_flags & SLAP_ATTR_BIG_MULTI) {
Attribute a_dummy;
err, *text );
} else {
unsigned hi;
- got_delete = 1;
+ ixcheck = CHECK_DEL;
+ if ( mod->sm_numvals )
+ ixcheck |= CHECK_ADD;
if (a_flags & SLAP_ATTR_BIG_MULTI) {
Attribute a_dummy;
if (!mvc) {
"mdb_modify_internal: %d %s\n",
err, *text );
} else {
- got_delete = 1;
+ ixcheck = CHECK_ADD|CHECK_DEL;
}
break;
/* check if modified attribute was indexed
* but not in case of NOOP... */
if ( !op->o_noop ) {
- mdb_modify_idxflags( op, mod->sm_desc, got_delete, e->e_attrs, save_attrs );
+ mdb_modify_idxflags( op, mod->sm_desc, ixcheck, e->e_attrs, save_attrs );
}
}
assert( ap->a_desc == slap_schema.si_ad_structuralObjectClass );
if ( !op->o_noop ) {
mdb_modify_idxflags( op, slap_schema.si_ad_structuralObjectClass,
- 1, e->e_attrs, save_attrs );
+ CHECK_ADD|CHECK_DEL, e->e_attrs, save_attrs );
}
}