diff options
author | git-hulk <hulk.website@gmail.com> | 2024-01-27 22:21:54 +0800 |
---|---|---|
committer | Michael Grunder <michael.grunder@gmail.com> | 2024-01-31 12:08:52 -0800 |
commit | 5b253d89c7cc9593723334e0a45077bd4008d3db (patch) | |
tree | 5538a775daf676538f02829e3d521ab39bc5fa77 /read.c | |
parent | 2706c3e16d57c9babd24bfd83ade2efcdb13a7b8 (diff) |
Add support of RESP3 attribute type
Currently, Redis DEBUG PROTOCOL 'attrib' command will return an
attribute type, but hiredis doesn't support it yet. So it got the
protocol type error:
```
127.0.0.1:6379> DEBUG PROTOCOL attrib
Error: Protocol error, got "|" as reply type byte
```
After apply this PR, it should reply:
```
127.0.0.1:6379> DEBUG PROTOCOL attrib
1# "key-popularity"
1# 1) "key:123"
2) (integer) 90
```
Diffstat (limited to 'read.c')
-rw-r--r-- | read.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -250,6 +250,7 @@ static void moveToNextTask(redisReader *r) { prv = r->task[r->ridx-1]; assert(prv->type == REDIS_REPLY_ARRAY || prv->type == REDIS_REPLY_MAP || + prv->type == REDIS_REPLY_ATTR || prv->type == REDIS_REPLY_SET || prv->type == REDIS_REPLY_PUSH); if (cur->idx == prv->elements-1) { @@ -534,7 +535,7 @@ static int processAggregateItem(redisReader *r) { moveToNextTask(r); } else { - if (cur->type == REDIS_REPLY_MAP) elements *= 2; + if (cur->type == REDIS_REPLY_MAP || cur->type == REDIS_REPLY_ATTR) elements *= 2; if (r->fn && r->fn->createArray) obj = r->fn->createArray(cur,elements); @@ -602,6 +603,9 @@ static int processItem(redisReader *r) { case '%': cur->type = REDIS_REPLY_MAP; break; + case '|': + cur->type = REDIS_REPLY_ATTR; + break; case '~': cur->type = REDIS_REPLY_SET; break; @@ -642,6 +646,7 @@ static int processItem(redisReader *r) { return processBulkItem(r); case REDIS_REPLY_ARRAY: case REDIS_REPLY_MAP: + case REDIS_REPLY_ATTR: case REDIS_REPLY_SET: case REDIS_REPLY_PUSH: return processAggregateItem(r); |