Explorar el Código

Merge branch 'github/pr/188'

Daniele Alessandri hace 10 años
padre
commit
dd29068845

+ 5 - 0
CHANGELOG.md

@@ -12,6 +12,11 @@ v1.0.0 (201x-xx-xx)
   values carrying the original payload, so one can do `$response == 'OK'` which
   values carrying the original payload, so one can do `$response == 'OK'` which
   is also more akin to how Redis replies to clients.
   is also more akin to how Redis replies to clients.
 
 
+- Commands `ZRANGE`, `ZRANGEBYSCORE`, `ZREVRANGE` and `ZREVRANGEBYSCORE` using
+  `WITHSCORE` return a named array of member => score instead of an array of
+  [member, score] elements. Insertion order is preserved anyway due to how PHP
+  works internally.
+
 - Invoking `Predis\Client::connect()` when the underlying connection has been
 - Invoking `Predis\Client::connect()` when the underlying connection has been
   already established does not throw any exception anymore, now the connection
   already established does not throw any exception anymore, now the connection
   simply does not attempt to perform any operation.
   simply does not attempt to perform any operation.

+ 1 - 1
lib/Predis/Command/ZSetRange.php

@@ -92,7 +92,7 @@ class ZSetRange extends Command
             $result = array();
             $result = array();
 
 
             for ($i = 0; $i < count($data); $i++) {
             for ($i = 0; $i < count($data); $i++) {
-                $result[] = array($data[$i], $data[++$i]);
+                $result[$data[$i]] = $data[++$i];
             }
             }
 
 
             return $result;
             return $result;

+ 6 - 6
tests/Predis/Command/ZSetIntersectionStoreTest.php

@@ -94,7 +94,7 @@ class ZSetIntersectionStoreTest extends PredisCommandTestCase
         $redis->zadd('letters:2nd', 1, 'b', 2, 'c', 3, 'd');
         $redis->zadd('letters:2nd', 1, 'b', 2, 'c', 3, 'd');
 
 
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd'));
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd'));
-        $this->assertSame(array(array('b', '3'), array('c', '5')), $redis->zrange('letters:out', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '3', 'c' => '5'), $redis->zrange('letters:out', 0, -1, 'withscores'));
 
 
         $this->assertSame(0, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:void'));
         $this->assertSame(0, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:void'));
         $this->assertSame(0, $redis->zinterstore('letters:out', 2, 'letters:void', 'letters:2nd'));
         $this->assertSame(0, $redis->zinterstore('letters:out', 2, 'letters:void', 'letters:2nd'));
@@ -113,15 +113,15 @@ class ZSetIntersectionStoreTest extends PredisCommandTestCase
 
 
         $options = array('aggregate' => 'min');
         $options = array('aggregate' => 'min');
         $this->assertSame(2, $redis->zinterstore('letters:min', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(2, $redis->zinterstore('letters:min', 2, 'letters:1st', 'letters:2nd', $options));
-        $this->assertSame(array(array('b', '1'), array('c', '2')), $redis->zrange('letters:min', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '1', 'c' => '2'), $redis->zrange('letters:min', 0, -1, 'withscores'));
 
 
         $options = array('aggregate' => 'max');
         $options = array('aggregate' => 'max');
         $this->assertSame(2, $redis->zinterstore('letters:max', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(2, $redis->zinterstore('letters:max', 2, 'letters:1st', 'letters:2nd', $options));
-        $this->assertSame(array(array('b', '2'), array('c', '3')), $redis->zrange('letters:max', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '2', 'c' => '3'), $redis->zrange('letters:max', 0, -1, 'withscores'));
 
 
         $options = array('aggregate' => 'sum');
         $options = array('aggregate' => 'sum');
         $this->assertSame(2, $redis->zinterstore('letters:sum', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(2, $redis->zinterstore('letters:sum', 2, 'letters:1st', 'letters:2nd', $options));
-        $this->assertSame(array(array('b', '3'), array('c', '5')), $redis->zrange('letters:sum', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '3', 'c' => '5'), $redis->zrange('letters:sum', 0, -1, 'withscores'));
     }
     }
 
 
     /**
     /**
@@ -136,7 +136,7 @@ class ZSetIntersectionStoreTest extends PredisCommandTestCase
 
 
         $options = array('weights' => array(2, 3));
         $options = array('weights' => array(2, 3));
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
-        $this->assertSame(array(array('b', '7'), array('c', '12')), $redis->zrange('letters:out', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '7', 'c' => '12'), $redis->zrange('letters:out', 0, -1, 'withscores'));
     }
     }
 
 
     /**
     /**
@@ -151,7 +151,7 @@ class ZSetIntersectionStoreTest extends PredisCommandTestCase
 
 
         $options = array('aggregate' => 'max', 'weights' => array(10, 15));
         $options = array('aggregate' => 'max', 'weights' => array(10, 15));
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(2, $redis->zinterstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
-        $this->assertSame(array(array('b', '20'), array('c', '30')), $redis->zrange('letters:out', 0, -1, 'withscores'));
+        $this->assertSame(array('b' => '20', 'c' => '30'), $redis->zrange('letters:out', 0, -1, 'withscores'));
     }
     }
 
 
     /**
     /**

+ 3 - 3
tests/Predis/Command/ZSetRangeByScoreTest.php

@@ -99,7 +99,7 @@ class ZSetRangeByScoreTest extends PredisCommandTestCase
     public function testParseResponseWithScores()
     public function testParseResponseWithScores()
     {
     {
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
-        $expected = array(array('element1', '1'), array('element2', '2'), array('element3', '3'));
+        $expected = array('element1' => '1', 'element2' => '2', 'element3' => '3');
 
 
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
 
 
@@ -177,7 +177,7 @@ class ZSetRangeByScoreTest extends PredisCommandTestCase
         $redis = $this->getClient();
         $redis = $this->getClient();
 
 
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
-        $expected = array(array('c', '10'), array('d', '20'), array('e', '20'));
+        $expected = array('c' => '10', 'd' => '20', 'e' => '20');
 
 
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, 'withscores'));
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, 'withscores'));
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, array('withscores' => true)));
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, array('withscores' => true)));
@@ -207,7 +207,7 @@ class ZSetRangeByScoreTest extends PredisCommandTestCase
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
 
 
         $options = array('limit' => array(1, 2), 'withscores' => true);
         $options = array('limit' => array(1, 2), 'withscores' => true);
-        $expected = array(array('d', '20'), array('e', '20'));
+        $expected = array('d' => '20', 'e' => '20');
 
 
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, $options));
         $this->assertSame($expected, $redis->zrangebyscore('letters', 10, 20, $options));
     }
     }

+ 2 - 2
tests/Predis/Command/ZSetRangeTest.php

@@ -80,7 +80,7 @@ class ZSetRangeTest extends PredisCommandTestCase
     public function testParseResponseWithScores()
     public function testParseResponseWithScores()
     {
     {
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
-        $expected = array(array('element1', '1'), array('element2', '2'), array('element3', '3'));
+        $expected = array('element1' => '1', 'element2' => '2', 'element3' => '3');
 
 
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
 
 
@@ -134,7 +134,7 @@ class ZSetRangeTest extends PredisCommandTestCase
         $redis = $this->getClient();
         $redis = $this->getClient();
 
 
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
-        $expected = array(array('c', '10'), array('d', '20'), array('e', '20'));
+        $expected = array('c' => '10', 'd' => '20', 'e' => '20');
 
 
         $this->assertSame($expected, $redis->zrange('letters', 2, 4, 'withscores'));
         $this->assertSame($expected, $redis->zrange('letters', 2, 4, 'withscores'));
         $this->assertSame($expected, $redis->zrange('letters', 2, 4, array('withscores' => true)));
         $this->assertSame($expected, $redis->zrange('letters', 2, 4, array('withscores' => true)));

+ 3 - 3
tests/Predis/Command/ZSetReverseRangeByScoreTest.php

@@ -99,7 +99,7 @@ class ZSetReverseRangeByScoreTest extends PredisCommandTestCase
     public function testParseResponseWithScores()
     public function testParseResponseWithScores()
     {
     {
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
-        $expected = array(array('element1', '1'), array('element2', '2'), array('element3', '3'));
+        $expected = array('element1' => '1', 'element2' => '2', 'element3' => '3');
 
 
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
 
 
@@ -177,7 +177,7 @@ class ZSetReverseRangeByScoreTest extends PredisCommandTestCase
         $redis = $this->getClient();
         $redis = $this->getClient();
 
 
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
-        $expected = array(array('e', '20'), array('d', '20'), array('c', '10'));
+        $expected = array('e' => '20', 'd' => '20', 'c' => '10');
 
 
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, 'withscores'));
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, 'withscores'));
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, array('withscores' => true)));
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, array('withscores' => true)));
@@ -207,7 +207,7 @@ class ZSetReverseRangeByScoreTest extends PredisCommandTestCase
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
 
 
         $options = array('limit' => array(1, 2), 'withscores' => true);
         $options = array('limit' => array(1, 2), 'withscores' => true);
-        $expected = array(array('d', '20'), array('c', '10'));
+        $expected = array('d' => '20', 'c' => '10');
 
 
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, $options));
         $this->assertSame($expected, $redis->zrevrangebyscore('letters', 20, 10, $options));
     }
     }

+ 2 - 2
tests/Predis/Command/ZSetReverseRangeTest.php

@@ -80,7 +80,7 @@ class ZSetReverseRangeTest extends PredisCommandTestCase
     public function testParseResponseWithScores()
     public function testParseResponseWithScores()
     {
     {
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
         $raw = array('element1', '1', 'element2', '2', 'element3', '3');
-        $expected = array(array('element1', '1'), array('element2', '2'), array('element3', '3'));
+        $expected = array('element1' => '1', 'element2' => '2', 'element3' => '3');
 
 
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
         $command = $this->getCommandWithArgumentsArray(array('zset', 0, 1, 'withscores'));
 
 
@@ -134,7 +134,7 @@ class ZSetReverseRangeTest extends PredisCommandTestCase
         $redis = $this->getClient();
         $redis = $this->getClient();
 
 
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
         $redis->zadd('letters', -10, 'a', 0, 'b', 10, 'c', 20, 'd', 20, 'e', 30, 'f');
-        $expected = array(array('d', '20'), array('c', '10'), array('b', '0'));
+        $expected = array('d' => '20', 'c' => '10', 'b' => '0');
 
 
         $this->assertSame($expected, $redis->zrevrange('letters', 2, 4, 'withscores'));
         $this->assertSame($expected, $redis->zrevrange('letters', 2, 4, 'withscores'));
         $this->assertSame($expected, $redis->zrevrange('letters', 2, 4, array('withscores' => true)));
         $this->assertSame($expected, $redis->zrevrange('letters', 2, 4, array('withscores' => true)));

+ 6 - 6
tests/Predis/Command/ZSetUnionStoreTest.php

@@ -95,7 +95,7 @@ class ZSetUnionStoreTest extends PredisCommandTestCase
 
 
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd'));
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd'));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '1'), array('b', '3'), array('d', '3'), array('c', '5')),
+            array('a' => '1', 'b' => '3', 'd' => '3', 'c' => '5'),
             $redis->zrange('letters:out', 0, -1, 'withscores')
             $redis->zrange('letters:out', 0, -1, 'withscores')
         );
         );
 
 
@@ -117,21 +117,21 @@ class ZSetUnionStoreTest extends PredisCommandTestCase
         $options = array('aggregate' => 'min');
         $options = array('aggregate' => 'min');
         $this->assertSame(4, $redis->zunionstore('letters:min', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(4, $redis->zunionstore('letters:min', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '1'), array('b', '1'), array('c', '2'), array('d', '3')),
+            array('a' => '1', 'b' => '1', 'c' => '2', 'd' => '3'),
             $redis->zrange('letters:min', 0, -1, 'withscores')
             $redis->zrange('letters:min', 0, -1, 'withscores')
         );
         );
 
 
         $options = array('aggregate' => 'max');
         $options = array('aggregate' => 'max');
         $this->assertSame(4, $redis->zunionstore('letters:max', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(4, $redis->zunionstore('letters:max', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '1'), array('b', '2'), array('c', '3'), array('d', '3')),
+            array('a' => '1', 'b' => '2', 'c' => '3', 'd' => '3'),
             $redis->zrange('letters:max', 0, -1, 'withscores')
             $redis->zrange('letters:max', 0, -1, 'withscores')
         );
         );
 
 
         $options = array('aggregate' => 'sum');
         $options = array('aggregate' => 'sum');
         $this->assertSame(4, $redis->zunionstore('letters:sum', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(4, $redis->zunionstore('letters:sum', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '1'), array('b', '3'), array('d', '3'), array('c', '5')),
+            array('a' => '1', 'b' => '3', 'd' => '3', 'c' => '5'),
             $redis->zrange('letters:sum', 0, -1, 'withscores')
             $redis->zrange('letters:sum', 0, -1, 'withscores')
         );
         );
     }
     }
@@ -149,7 +149,7 @@ class ZSetUnionStoreTest extends PredisCommandTestCase
         $options = array('weights' => array(2, 3));
         $options = array('weights' => array(2, 3));
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '2'), array('b', '7'), array('d', '9'), array('c', '12')),
+            array('a' => '2', 'b' => '7', 'd' => '9', 'c' => '12'),
             $redis->zrange('letters:out', 0, -1, 'withscores')
             $redis->zrange('letters:out', 0, -1, 'withscores')
         );
         );
     }
     }
@@ -167,7 +167,7 @@ class ZSetUnionStoreTest extends PredisCommandTestCase
         $options = array('aggregate' => 'max', 'weights' => array(10, 15));
         $options = array('aggregate' => 'max', 'weights' => array(10, 15));
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(4, $redis->zunionstore('letters:out', 2, 'letters:1st', 'letters:2nd', $options));
         $this->assertSame(
         $this->assertSame(
-            array(array('a', '10'), array('b', '20'), array('c', '30'), array('d', '45')),
+            array('a' => '10', 'b' => '20', 'c' => '30', 'd' => '45'),
             $redis->zrange('letters:out', 0, -1, 'withscores')
             $redis->zrange('letters:out', 0, -1, 'withscores')
         );
         );
     }
     }