mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-23 00:28:26 -05:00
HMSET and MSET implementations unified. HSET now variadic.
This is the first step towards getting rid of HMSET which is a command that does not make much sense once HSET is variadic, and has a saner return value.
This commit is contained in:
parent
634c64dd18
commit
01a4b9892d
@ -144,7 +144,7 @@ struct redisCommand redisCommandTable[] = {
|
||||
{"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
|
||||
{"incr",incrCommand,2,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"decr",decrCommand,2,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0},
|
||||
{"mget",mgetCommand,-2,"rF",0,NULL,1,-1,1,0,0},
|
||||
{"rpush",rpushCommand,-3,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"lpush",lpushCommand,-3,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"rpushx",rpushxCommand,-3,"wmF",0,NULL,1,1,1,0,0},
|
||||
@ -198,11 +198,11 @@ struct redisCommand redisCommandTable[] = {
|
||||
{"zrank",zrankCommand,3,"rF",0,NULL,1,1,1,0,0},
|
||||
{"zrevrank",zrevrankCommand,3,"rF",0,NULL,1,1,1,0,0},
|
||||
{"zscan",zscanCommand,-3,"rR",0,NULL,1,1,1,0,0},
|
||||
{"hset",hsetCommand,4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hset",hsetCommand,-4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hsetnx",hsetnxCommand,4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hget",hgetCommand,3,"rF",0,NULL,1,1,1,0,0},
|
||||
{"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
|
||||
{"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0},
|
||||
{"hmset",hsetCommand,-4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hmget",hmgetCommand,-3,"rF",0,NULL,1,1,1,0,0},
|
||||
{"hincrby",hincrbyCommand,4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hincrbyfloat",hincrbyfloatCommand,4,"wmF",0,NULL,1,1,1,0,0},
|
||||
{"hdel",hdelCommand,-3,"wF",0,NULL,1,1,1,0,0},
|
||||
|
32
src/t_hash.c
32
src/t_hash.c
@ -511,19 +511,6 @@ void hashTypeConvert(robj *o, int enc) {
|
||||
* Hash type commands
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
void hsetCommand(client *c) {
|
||||
int update;
|
||||
robj *o;
|
||||
|
||||
if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
|
||||
hashTypeTryConversion(o,c->argv,2,3);
|
||||
update = hashTypeSet(o,c->argv[2]->ptr,c->argv[3]->ptr,HASH_SET_COPY);
|
||||
addReply(c, update ? shared.czero : shared.cone);
|
||||
signalModifiedKey(c->db,c->argv[1]);
|
||||
notifyKeyspaceEvent(NOTIFY_HASH,"hset",c->argv[1],c->db->id);
|
||||
server.dirty++;
|
||||
}
|
||||
|
||||
void hsetnxCommand(client *c) {
|
||||
robj *o;
|
||||
if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
|
||||
@ -540,8 +527,8 @@ void hsetnxCommand(client *c) {
|
||||
}
|
||||
}
|
||||
|
||||
void hmsetCommand(client *c) {
|
||||
int i;
|
||||
void hsetCommand(client *c) {
|
||||
int i, created = 0;
|
||||
robj *o;
|
||||
|
||||
if ((c->argc % 2) == 1) {
|
||||
@ -551,10 +538,19 @@ void hmsetCommand(client *c) {
|
||||
|
||||
if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
|
||||
hashTypeTryConversion(o,c->argv,2,c->argc-1);
|
||||
for (i = 2; i < c->argc; i += 2) {
|
||||
hashTypeSet(o,c->argv[i]->ptr,c->argv[i+1]->ptr,HASH_SET_COPY);
|
||||
|
||||
for (i = 2; i < c->argc; i += 2)
|
||||
created += !hashTypeSet(o,c->argv[i]->ptr,c->argv[i+1]->ptr,HASH_SET_COPY);
|
||||
|
||||
/* HMSET (deprecated) and HSET return value is different. */
|
||||
char *cmdname = c->argv[0]->ptr;
|
||||
if (cmdname[1] == 's' || cmdname[1] == 'S') {
|
||||
/* HSET */
|
||||
addReplyLongLong(c, created);
|
||||
} else {
|
||||
/* HMSET */
|
||||
addReply(c, shared.ok);
|
||||
}
|
||||
addReply(c, shared.ok);
|
||||
signalModifiedKey(c->db,c->argv[1]);
|
||||
notifyKeyspaceEvent(NOTIFY_HASH,"hset",c->argv[1],c->db->id);
|
||||
server.dirty++;
|
||||
|
Loading…
Reference in New Issue
Block a user