]> git.saurik.com Git - redis.git/commitdiff
Fix for a SORT bug introduced with commit 16fa22f1, regression test added
authorantirez <antirez@gmail.com>
Sun, 18 Apr 2010 15:51:15 +0000 (17:51 +0200)
committerantirez <antirez@gmail.com>
Sun, 18 Apr 2010 15:51:15 +0000 (17:51 +0200)
redis.c
test-redis.tcl

diff --git a/redis.c b/redis.c
index ad9ad81e401dea7a3ad041e67236981e15909761..38aad0a81f77fd25fdc39d2b4aae98d9f3f6b556 100644 (file)
--- 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);
index bac5350ac2eb855b9fc5f75c3b013ee65b8d841a..7f4ce9c72db5157915bc127736407dc0834a4b6c 100644 (file)
@@ -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 {}