mirror of
https://github.com/isar/libmdbx.git
synced 2025-03-04 05:08:14 +08:00
mdbx: добавление keysize_min() и valsize_min() в API.
This commit is contained in:
parent
00c4e2636e
commit
826441741d
12
mdbx.h
12
mdbx.h
@ -3369,6 +3369,12 @@ mdbx_limits_dbsize_max(intptr_t pagesize);
|
|||||||
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
||||||
mdbx_limits_keysize_max(intptr_t pagesize, MDBX_db_flags_t flags);
|
mdbx_limits_keysize_max(intptr_t pagesize, MDBX_db_flags_t flags);
|
||||||
|
|
||||||
|
/** \brief Returns minimal key size in bytes for given database flags.
|
||||||
|
* \ingroup c_statinfo
|
||||||
|
* \see db_flags */
|
||||||
|
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
||||||
|
mdbx_limits_keysize_min(MDBX_db_flags_t flags);
|
||||||
|
|
||||||
/** \brief Returns maximal data size in bytes for given page size
|
/** \brief Returns maximal data size in bytes for given page size
|
||||||
* and database flags, or -1 if pagesize is invalid.
|
* and database flags, or -1 if pagesize is invalid.
|
||||||
* \ingroup c_statinfo
|
* \ingroup c_statinfo
|
||||||
@ -3376,6 +3382,12 @@ mdbx_limits_keysize_max(intptr_t pagesize, MDBX_db_flags_t flags);
|
|||||||
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
||||||
mdbx_limits_valsize_max(intptr_t pagesize, MDBX_db_flags_t flags);
|
mdbx_limits_valsize_max(intptr_t pagesize, MDBX_db_flags_t flags);
|
||||||
|
|
||||||
|
/** \brief Returns minimal data size in bytes for given database flags.
|
||||||
|
* \ingroup c_statinfo
|
||||||
|
* \see db_flags */
|
||||||
|
MDBX_NOTHROW_CONST_FUNCTION LIBMDBX_API intptr_t
|
||||||
|
mdbx_limits_valsize_min(MDBX_db_flags_t flags);
|
||||||
|
|
||||||
/** \brief Returns maximal size of key-value pair to fit in a single page with
|
/** \brief Returns maximal size of key-value pair to fit in a single page with
|
||||||
* the given size and database flags, or -1 if pagesize is invalid.
|
* the given size and database flags, or -1 if pagesize is invalid.
|
||||||
* \ingroup c_statinfo
|
* \ingroup c_statinfo
|
||||||
|
28
src/core.c
28
src/core.c
@ -458,6 +458,19 @@ static __inline size_t keysize_max(size_t pagesize, MDBX_db_flags_t flags) {
|
|||||||
return max_branch_key;
|
return max_branch_key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline size_t keysize_min(MDBX_db_flags_t flags) {
|
||||||
|
return (flags & MDBX_INTEGERKEY) ? 4 /* sizeof(uint32_t) */ : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline size_t valsize_min(MDBX_db_flags_t flags) {
|
||||||
|
if (flags & MDBX_INTEGERDUP)
|
||||||
|
return 4 /* sizeof(uint32_t) */;
|
||||||
|
else if (flags & MDBX_DUPFIXED)
|
||||||
|
return sizeof(indx_t);
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static __inline size_t valsize_max(size_t pagesize, MDBX_db_flags_t flags) {
|
static __inline size_t valsize_max(size_t pagesize, MDBX_db_flags_t flags) {
|
||||||
assert(pagesize >= MIN_PAGESIZE && pagesize <= MAX_PAGESIZE &&
|
assert(pagesize >= MIN_PAGESIZE && pagesize <= MAX_PAGESIZE &&
|
||||||
is_powerof2(pagesize));
|
is_powerof2(pagesize));
|
||||||
@ -510,6 +523,10 @@ __cold intptr_t mdbx_limits_keysize_max(intptr_t pagesize,
|
|||||||
return keysize_max(pagesize, flags);
|
return keysize_max(pagesize, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__cold intptr_t mdbx_limits_keysize_min(MDBX_db_flags_t flags) {
|
||||||
|
return keysize_min(flags);
|
||||||
|
}
|
||||||
|
|
||||||
__cold int mdbx_env_get_maxvalsize_ex(const MDBX_env *env,
|
__cold int mdbx_env_get_maxvalsize_ex(const MDBX_env *env,
|
||||||
MDBX_db_flags_t flags) {
|
MDBX_db_flags_t flags) {
|
||||||
if (unlikely(!env || env->me_signature.weak != MDBX_ME_SIGNATURE))
|
if (unlikely(!env || env->me_signature.weak != MDBX_ME_SIGNATURE))
|
||||||
@ -530,6 +547,10 @@ __cold intptr_t mdbx_limits_valsize_max(intptr_t pagesize,
|
|||||||
return valsize_max(pagesize, flags);
|
return valsize_max(pagesize, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__cold intptr_t mdbx_limits_valsize_min(MDBX_db_flags_t flags) {
|
||||||
|
return valsize_min(flags);
|
||||||
|
}
|
||||||
|
|
||||||
__cold intptr_t mdbx_limits_pairsize4page_max(intptr_t pagesize,
|
__cold intptr_t mdbx_limits_pairsize4page_max(intptr_t pagesize,
|
||||||
MDBX_db_flags_t flags) {
|
MDBX_db_flags_t flags) {
|
||||||
if (pagesize < 1)
|
if (pagesize < 1)
|
||||||
@ -16289,14 +16310,11 @@ static int setup_dbx(MDBX_dbx *const dbx, const MDBX_db *const db,
|
|||||||
dbx->md_dcmp = get_default_datacmp(db->md_flags);
|
dbx->md_dcmp = get_default_datacmp(db->md_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbx->md_klen_min =
|
dbx->md_klen_min = keysize_min(db->md_flags);
|
||||||
(db->md_flags & MDBX_INTEGERKEY) ? 4 /* sizeof(uint32_t) */ : 0;
|
|
||||||
dbx->md_klen_max = keysize_max(pagesize, db->md_flags);
|
dbx->md_klen_max = keysize_max(pagesize, db->md_flags);
|
||||||
assert(dbx->md_klen_max != (unsigned)-1);
|
assert(dbx->md_klen_max != (unsigned)-1);
|
||||||
|
|
||||||
dbx->md_vlen_min = (db->md_flags & MDBX_INTEGERDUP)
|
dbx->md_vlen_min = valsize_min(db->md_flags);
|
||||||
? 4 /* sizeof(uint32_t) */
|
|
||||||
: ((db->md_flags & MDBX_DUPFIXED) ? sizeof(indx_t) : 0);
|
|
||||||
dbx->md_vlen_max = valsize_max(pagesize, db->md_flags);
|
dbx->md_vlen_max = valsize_max(pagesize, db->md_flags);
|
||||||
assert(dbx->md_vlen_max != (size_t)-1);
|
assert(dbx->md_vlen_max != (size_t)-1);
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ bool actor_config::deserialize(const char *str, actor_config &config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned actor_params::mdbx_keylen_min() const {
|
unsigned actor_params::mdbx_keylen_min() const {
|
||||||
return (table_flags & MDBX_INTEGERKEY) ? 4 : 0;
|
return unsigned(mdbx_limits_keysize_min(table_flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned actor_params::mdbx_keylen_max() const {
|
unsigned actor_params::mdbx_keylen_max() const {
|
||||||
@ -701,7 +701,7 @@ unsigned actor_params::mdbx_keylen_max() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unsigned actor_params::mdbx_datalen_min() const {
|
unsigned actor_params::mdbx_datalen_min() const {
|
||||||
return (table_flags & MDBX_INTEGERDUP) ? 4 : 0;
|
return unsigned(mdbx_limits_valsize_min(table_flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned actor_params::mdbx_datalen_max() const {
|
unsigned actor_params::mdbx_datalen_max() const {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user