diff --git a/redis.c b/redis.c index ad9ad81e4..38aad0a81 100644 --- a/redis.c +++ b/redis.c @@ -3058,7 +3058,7 @@ static robj *getDecodedObject(robj *o) { dec = createStringObject(buf,strlen(buf)); return dec; } else { - redisAssert(1 != 1); + redisPanic("Unknown encoding type"); } } @@ -6626,9 +6626,8 @@ static int sortCompare(const void *s1, const void *s2) { cmp = strcoll(so1->u.cmpobj->ptr,so2->u.cmpobj->ptr); } } else { - /* Compare elements directly. Note that these objects already - * need to be non-encoded (see sortCommand). */ - cmp = strcoll(so1->obj->ptr,so2->obj->ptr); + /* Compare elements directly. */ + cmp = compareStringObjects(so1->obj,so2->obj); } } return server.sort_desc ? -cmp : cmp; @@ -6766,7 +6765,7 @@ static void sortCommand(redisClient *c) { } if (alpha) { - vector[j].u.cmpobj = getDecodedObject(byval); + if (sortby) vector[j].u.cmpobj = getDecodedObject(byval); } else { if (byval->encoding == REDIS_ENCODING_RAW) { vector[j].u.score = strtod(byval->ptr,NULL); diff --git a/test-redis.tcl b/test-redis.tcl index bac5350ac..7f4ce9c72 100644 --- a/test-redis.tcl +++ b/test-redis.tcl @@ -935,6 +935,15 @@ proc main {} { lsort [array names myset] } {a b c} + test {SORT ALPHA against integer encoded strings} { + $r del mylist + $r lpush mylist 2 + $r lpush mylist 1 + $r lpush mylist 3 + $r lpush mylist 10 + $r sort mylist alpha + } {1 10 2 3} + test {Create a random list and a random set} { set tosort {} array set seenrand {}