Пример #1
0
/*
 * 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));
}
Пример #2
0
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;
}
Пример #3
0
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;
}