mdbx: drop obsolete Nexenta attributes API.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev)
2022-08-17 21:19:14 +03:00
parent 345c3d433f
commit 9b3faee630
2 changed files with 0 additions and 297 deletions

View File

@@ -23018,132 +23018,6 @@ __cold int mdbx_env_get_option(const MDBX_env *env, const MDBX_option_t option,
return MDBX_SUCCESS;
}
/*** Attribute support functions for Nexenta **********************************/
#ifdef MDBX_NEXENTA_ATTRS
static __inline int mdbx_attr_peek(MDBX_val *data, mdbx_attr_t *attrptr) {
if (unlikely(data->iov_len < sizeof(mdbx_attr_t)))
return MDBX_INCOMPATIBLE;
if (likely(attrptr != NULL))
*attrptr = *(mdbx_attr_t *)data->iov_base;
data->iov_len -= sizeof(mdbx_attr_t);
data->iov_base =
likely(data->iov_len > 0) ? ((mdbx_attr_t *)data->iov_base) + 1 : NULL;
return MDBX_SUCCESS;
}
static __inline int mdbx_attr_poke(MDBX_val *reserved, MDBX_val *data,
mdbx_attr_t attr, MDBX_put_flags_t flags) {
mdbx_attr_t *space = reserved->iov_base;
if (flags & MDBX_RESERVE) {
if (likely(data != NULL)) {
data->iov_base = data->iov_len ? space + 1 : NULL;
}
} else {
*space = attr;
if (likely(data != NULL)) {
memcpy(space + 1, data->iov_base, data->iov_len);
}
}
return MDBX_SUCCESS;
}
int mdbx_cursor_get_attr(MDBX_cursor *mc, MDBX_val *key, MDBX_val *data,
mdbx_attr_t *attrptr, MDBX_cursor_op op) {
int rc = mdbx_cursor_get(mc, key, data, op);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
return mdbx_attr_peek(data, attrptr);
}
int mdbx_get_attr(MDBX_txn *txn, MDBX_dbi dbi, MDBX_val *key, MDBX_val *data,
uint64_t *attrptr) {
int rc = mdbx_get(txn, dbi, key, data);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
return mdbx_attr_peek(data, attrptr);
}
int mdbx_put_attr(MDBX_txn *txn, MDBX_dbi dbi, MDBX_val *key, MDBX_val *data,
mdbx_attr_t attr, MDBX_put_flags_t flags) {
MDBX_val reserve;
reserve.iov_base = NULL;
reserve.iov_len = (data ? data->iov_len : 0) + sizeof(mdbx_attr_t);
int rc = mdbx_put(txn, dbi, key, &reserve, flags | MDBX_RESERVE);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
return mdbx_attr_poke(&reserve, data, attr, flags);
}
int mdbx_cursor_put_attr(MDBX_cursor *cursor, MDBX_val *key, MDBX_val *data,
mdbx_attr_t attr, MDBX_put_flags_t flags) {
MDBX_val reserve;
reserve.iov_base = NULL;
reserve.iov_len = (data ? data->iov_len : 0) + sizeof(mdbx_attr_t);
int rc = mdbx_cursor_put(cursor, key, &reserve, flags | MDBX_RESERVE);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
return mdbx_attr_poke(&reserve, data, attr, flags);
}
int mdbx_set_attr(MDBX_txn *txn, MDBX_dbi dbi, MDBX_val *key, MDBX_val *data,
mdbx_attr_t attr) {
if (unlikely(!key || !txn))
return MDBX_EINVAL;
if (unlikely(txn->mt_signature != MDBX_MT_SIGNATURE))
return MDBX_EBADSIGN;
if (unlikely(!check_dbi(txn, dbi, DB_USRVALID)))
return MDBX_BAD_DBI;
if (unlikely(txn->mt_flags & (MDBX_TXN_RDONLY | MDBX_TXN_BLOCKED)))
return (txn->mt_flags & MDBX_TXN_RDONLY) ? MDBX_EACCESS : MDBX_BAD_TXN;
MDBX_cursor_couple cx;
MDBX_val old_data;
int rc = cursor_init(&cx.outer, txn, dbi);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
rc = mdbx_cursor_set(&cx.outer, key, &old_data, MDBX_SET, NULL);
if (unlikely(rc != MDBX_SUCCESS)) {
if (rc == MDBX_NOTFOUND && data) {
cx.outer.mc_next = txn->mt_cursors[dbi];
txn->mt_cursors[dbi] = &cx.outer;
rc = mdbx_cursor_put_attr(&cx.outer, key, data, attr, 0);
txn->mt_cursors[dbi] = cx.outer.mc_next;
}
return rc;
}
mdbx_attr_t old_attr = 0;
rc = mdbx_attr_peek(&old_data, &old_attr);
if (unlikely(rc != MDBX_SUCCESS))
return rc;
if (old_attr == attr && (!data || (data->iov_len == old_data.iov_len &&
memcmp(data->iov_base, old_data.iov_base,
old_data.iov_len) == 0)))
return MDBX_SUCCESS;
cx.outer.mc_next = txn->mt_cursors[dbi];
txn->mt_cursors[dbi] = &cx.outer;
rc = mdbx_cursor_put_attr(&cx.outer, key, data ? data : &old_data, attr,
MDBX_CURRENT);
txn->mt_cursors[dbi] = cx.outer.mc_next;
return rc;
}
#endif /* MDBX_NEXENTA_ATTRS */
/******************************************************************************/
/* *INDENT-OFF* */
/* clang-format off */