/* * kvs_cursor_remove -- * WT_CURSOR::remove method. */ static int kvs_cursor_remove(WT_CURSOR *wt_cursor) { CURSOR *cursor; WT_SESSION *session; int ret; cursor = (CURSOR *)wt_cursor; session = cursor->session; ret = 0; /* * WiredTiger's "remove" of a bitfield is really an update with a value * of a single byte of zero. */ if (cursor->config_bitfield) { wt_cursor->value.size = 1; wt_cursor->value.data = "\0"; return (kvs_cursor_update(wt_cursor)); } if ((ret = copyin_key(wt_cursor)) != 0) return (ret); if ((ret = kvs_del(cursor->data_source->kvs, &cursor->record)) == 0) return (0); if (ret == KVS_E_KEY_NOT_FOUND) return (WT_NOTFOUND); ERET(session, WT_ERROR, "kvs_del: %s", kvs_strerror(ret)); }
int kvs_helper_cursor_del(KVS_cursor *const cursor, unsigned const flags) { if(!cursor) return KVS_EINVAL; if(flags) return KVS_ENOTSUP; KVS_txn *txn = NULL; KVS_val key[1]; int rc = kvs_cursor_txn(cursor, &txn); if(rc < 0) return rc; rc = kvs_cursor_current(cursor, key, NULL); if(rc < 0) return rc; rc = kvs_del(txn, key, flags); if(rc < 0) return rc; kvs_cursor_clear(cursor); return rc; }
int kvs_helper_delr(KVS_txn *const txn, KVS_range const *const range, uint64_t *const out) { KVS_val key[1]; uint64_t n = 0; KVS_cursor *cursor = NULL; int rc = kvs_cursor_open(txn, &cursor); if(rc < 0) goto cleanup; rc = kvs_cursor_firstr(cursor, range, key, NULL, +1); for(; rc >= 0; rc = kvs_cursor_nextr(cursor, range, key, NULL, +1)) { rc = kvs_del(txn, key, 0); if(rc < 0) goto cleanup; n++; } if(KVS_NOTFOUND == rc) rc = 0; if(rc < 0) goto cleanup; if(out) *out = n; cleanup: kvs_cursor_close(cursor); cursor = NULL; return rc; }