if (mdb_row_delete(tbl, old, 0,0) < 0 ||
mdb_log_change(tbl, txdepth, mdb_log_update,cmask,old,row) < 0)
{
+ /* errno is either EEXIST or ENOMEM set by mdb_hash_add */
return -1;
}
}
else { /* duplicate insertion is an error. keep the original row */
mdb_row_delete(tbl, row, 0, 1);
+ /* errno is either EEXIST or ENOMEM set by mdb_hash_add */
return -1;
}
mdb_index_delete(tbl, row);
cmod = 0;
- for (cmask = i = 0; (cidx = (source_dsc = cds + i)->cindex) >= 0; i++){
+ for (cmask = i = 0; (cidx = (source_dsc = cds + i)->cindex) >= 0; i++) {
cmask |= (((mqi_bitfld_t)1) << cidx);
cmod |= mdb_column_write(columns + cidx, row->data, source_dsc, data);
}
- if (index_update)
- mdb_index_insert(tbl, row, cmask, 0);
+ if (index_update) {
+ if (mdb_index_insert(tbl, row, cmask, 0) < 0) {
+ if (cmask_ret)
+ *cmask_ret = 0;
+ return -1;
+ }
+ }
if (cmask_ret)
*cmask_ret = cmask;
uint32_t txdepth = mdb_transaction_get_depth();
mdb_row_delete(tbl, row, index_update, !txdepth);
- mdb_log_change(tbl, txdepth, mdb_log_delete, 0, row, NULL);
+
+ if (txdepth)
+ mdb_log_change(tbl, txdepth, mdb_log_delete, 0, row, NULL);
return 0;
}