diff options
author | antirez <antirez@gmail.com> | 2016-04-25 10:39:02 +0200 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2016-05-10 06:40:09 +0200 |
commit | 5bf5fd24c6054ccecb068f2a74c9c84aa2f2d79f (patch) | |
tree | 54beab02bcfaf410cdf0fc63b85565303562369a /src | |
parent | 33e1231e533168915f006f2b39751b7013247a2d (diff) | |
download | redis-5bf5fd24c6054ccecb068f2a74c9c84aa2f2d79f.tar.gz |
Modules: a few fixes for the zset iterator.
Diffstat (limited to 'src')
-rw-r--r-- | src/module.c | 4 | ||||
-rw-r--r-- | src/modules/helloworld.c | 15 |
2 files changed, 13 insertions, 6 deletions
diff --git a/src/module.c b/src/module.c index 2965e5d11..9e7b73696 100644 --- a/src/module.c +++ b/src/module.c @@ -1366,7 +1366,7 @@ int RM_ZsetRangeNext(RedisModuleKey *key) { return 0; } next = saved_next; - } else if (key->ztype == REDISMODULE_ZSET_RANGE_SCORE) { + } else if (key->ztype == REDISMODULE_ZSET_RANGE_LEX) { if (!zzlLexValueLteMax(next,&key->zlrs)) { key->zer = 1; return 0; @@ -1429,7 +1429,7 @@ int RM_ZsetRangePrev(RedisModuleKey *key) { return 0; } prev = saved_prev; - } else if (key->ztype == REDISMODULE_ZSET_RANGE_SCORE) { + } else if (key->ztype == REDISMODULE_ZSET_RANGE_LEX) { if (!zzlLexValueGteMin(prev,&key->zlrs)) { key->zer = 1; return 0; diff --git a/src/modules/helloworld.c b/src/modules/helloworld.c index 785d401b2..31a078b0a 100644 --- a/src/modules/helloworld.c +++ b/src/modules/helloworld.c @@ -387,7 +387,7 @@ int HelloZsumRange_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, i * The command will return all the sorted set items that are lexicographically * between the specified range (using the same format as ZRANGEBYLEX) * and having an age between min_age and max_age. */ -int HelloZsumRange_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { +int HelloLexRange_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); /* Use automatic memory management. */ if (argc != 6) return RedisModule_WrongArity(ctx); @@ -398,9 +398,12 @@ int HelloZsumRange_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, i return RedisModule_ReplyWithError(ctx,REDISMODULE_ERRORMSG_WRONGTYPE); } - RedisModule_ReplyWithArray(ctx,REDISMODULE_POSTPONED_ARRAY_LEN); - RedisModule_ZsetFirstInLexRange(key,argv[2],argv[3]); + if (RedisModule_ZsetFirstInLexRange(key,argv[2],argv[3]) != REDISMODULE_OK) { + return RedisModule_ReplyWithError(ctx,"invalid range"); + } + int arraylen = 0; + RedisModule_ReplyWithArray(ctx,REDISMODULE_POSTPONED_ARRAY_LEN); while(!RedisModule_ZsetRangeEndReached(key)) { double score; RedisModuleString *ele = RedisModule_ZsetRangeCurrentElement(key,&score); @@ -410,7 +413,7 @@ int HelloZsumRange_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, i arraylen++; } RedisModule_ZsetRangeStop(key); - RedisModule_SetArrayLength(ctx,arraylen); + RedisModule_ReplySetArrayLength(ctx,arraylen); RedisModule_CloseKey(key); return REDISMODULE_OK; } @@ -473,5 +476,9 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx) { HelloZsumRange_RedisCommand) == REDISMODULE_ERR) return REDISMODULE_ERR; + if (RedisModule_CreateCommand(ctx,"hello.lexrange", + HelloLexRange_RedisCommand) == REDISMODULE_ERR) + return REDISMODULE_ERR; + return REDISMODULE_OK; } |