HINCRBYFLOAT implemented
This commit is contained in:
parent
d4a3cfed9c
commit
68bfe993c8
@ -157,6 +157,7 @@ struct redisCommand redisCommandTable[] = {
|
||||
{"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
|
||||
{"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0},
|
||||
{"hincrby",hincrbyCommand,4,"wm",0,NULL,1,1,1,0,0},
|
||||
{"hincrbyfloat",hincrbyfloatCommand,4,"wm",0,NULL,1,1,1,0,0},
|
||||
{"hdel",hdelCommand,-3,"w",0,NULL,1,1,1,0,0},
|
||||
{"hlen",hlenCommand,2,"r",0,NULL,1,1,1,0,0},
|
||||
{"hkeys",hkeysCommand,2,"r",0,NULL,1,1,1,0,0},
|
||||
|
@ -1104,6 +1104,7 @@ void hgetallCommand(redisClient *c);
|
||||
void hexistsCommand(redisClient *c);
|
||||
void configCommand(redisClient *c);
|
||||
void hincrbyCommand(redisClient *c);
|
||||
void hincrbyfloatCommand(redisClient *c);
|
||||
void subscribeCommand(redisClient *c);
|
||||
void unsubscribeCommand(redisClient *c);
|
||||
void psubscribeCommand(redisClient *c);
|
||||
|
27
src/t_hash.c
27
src/t_hash.c
@ -346,6 +346,33 @@ void hincrbyCommand(redisClient *c) {
|
||||
server.dirty++;
|
||||
}
|
||||
|
||||
void hincrbyfloatCommand(redisClient *c) {
|
||||
double long value, incr;
|
||||
robj *o, *current, *new;
|
||||
|
||||
if (getLongDoubleFromObjectOrReply(c,c->argv[3],&incr,NULL) != REDIS_OK) return;
|
||||
if ((o = hashTypeLookupWriteOrCreate(c,c->argv[1])) == NULL) return;
|
||||
if ((current = hashTypeGetObject(o,c->argv[2])) != NULL) {
|
||||
if (getLongDoubleFromObjectOrReply(c,current,&value,
|
||||
"hash value is not a valid float") != REDIS_OK) {
|
||||
decrRefCount(current);
|
||||
return;
|
||||
}
|
||||
decrRefCount(current);
|
||||
} else {
|
||||
value = 0;
|
||||
}
|
||||
|
||||
value += incr;
|
||||
new = createStringObjectFromLongDouble(value);
|
||||
hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
|
||||
hashTypeSet(o,c->argv[2],new);
|
||||
addReplyBulk(c,new);
|
||||
decrRefCount(new);
|
||||
signalModifiedKey(c->db,c->argv[1]);
|
||||
server.dirty++;
|
||||
}
|
||||
|
||||
void hgetCommand(redisClient *c) {
|
||||
robj *o, *value;
|
||||
unsigned char *v;
|
||||
|
Loading…
x
Reference in New Issue
Block a user