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},
|
{"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
|
||||||
{"hmget",hmgetCommand,-3,"r",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},
|
{"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},
|
{"hdel",hdelCommand,-3,"w",0,NULL,1,1,1,0,0},
|
||||||
{"hlen",hlenCommand,2,"r",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},
|
{"hkeys",hkeysCommand,2,"r",0,NULL,1,1,1,0,0},
|
||||||
|
@ -1104,6 +1104,7 @@ void hgetallCommand(redisClient *c);
|
|||||||
void hexistsCommand(redisClient *c);
|
void hexistsCommand(redisClient *c);
|
||||||
void configCommand(redisClient *c);
|
void configCommand(redisClient *c);
|
||||||
void hincrbyCommand(redisClient *c);
|
void hincrbyCommand(redisClient *c);
|
||||||
|
void hincrbyfloatCommand(redisClient *c);
|
||||||
void subscribeCommand(redisClient *c);
|
void subscribeCommand(redisClient *c);
|
||||||
void unsubscribeCommand(redisClient *c);
|
void unsubscribeCommand(redisClient *c);
|
||||||
void psubscribeCommand(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++;
|
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) {
|
void hgetCommand(redisClient *c) {
|
||||||
robj *o, *value;
|
robj *o, *value;
|
||||||
unsigned char *v;
|
unsigned char *v;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user