mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 08:38:27 -05:00
Hash: API to get value string len by field name.
This commit is contained in:
parent
c95507881a
commit
d8f8b0575f
24
src/t_hash.c
24
src/t_hash.c
@ -130,7 +130,6 @@ robj *hashTypeGetObject(robj *o, robj *field) {
|
|||||||
value = createStringObjectFromLongLong(vll);
|
value = createStringObjectFromLongLong(vll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (o->encoding == REDIS_ENCODING_HT) {
|
} else if (o->encoding == REDIS_ENCODING_HT) {
|
||||||
robj *aux;
|
robj *aux;
|
||||||
|
|
||||||
@ -144,6 +143,29 @@ robj *hashTypeGetObject(robj *o, robj *field) {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Higher level function using hashTypeGet*() to return the length of the
|
||||||
|
* object associated with the requested field, or 0 if the field does not
|
||||||
|
* exist. */
|
||||||
|
size_t hashTypeGetValueLength(robj *o, robj *field) {
|
||||||
|
size_t len = 0;
|
||||||
|
if (o->encoding == REDIS_ENCODING_ZIPLIST) {
|
||||||
|
unsigned char *vstr = NULL;
|
||||||
|
unsigned int vlen = UINT_MAX;
|
||||||
|
long long vll = LLONG_MAX;
|
||||||
|
|
||||||
|
if (hashTypeGetFromZiplist(o, field, &vstr, &vlen, &vll) == 0)
|
||||||
|
len = vstr ? vlen : sdigits10(vll);
|
||||||
|
} else if (o->encoding == REDIS_ENCODING_HT) {
|
||||||
|
robj *aux;
|
||||||
|
|
||||||
|
if (hashTypeGetFromHashTable(o, field, &aux) == 0)
|
||||||
|
len = sdslen(aux->ptr);
|
||||||
|
} else {
|
||||||
|
redisPanic("Unknown hash encoding");
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
/* Test if the specified field exists in the given hash. Returns 1 if the field
|
/* Test if the specified field exists in the given hash. Returns 1 if the field
|
||||||
* exists, and 0 when it doesn't. */
|
* exists, and 0 when it doesn't. */
|
||||||
int hashTypeExists(robj *o, robj *field) {
|
int hashTypeExists(robj *o, robj *field) {
|
||||||
|
Loading…
Reference in New Issue
Block a user