Parcourir la source

Backported changes from the mainline library to the PHP 5.2 branch (up to commit ca422b0)

Daniele Alessandri il y a 14 ans
Parent
commit
897c217fe3
3 fichiers modifiés avec 30 ajouts et 6 suppressions
  1. 8 1
      CHANGELOG
  2. 1 1
      VERSION
  3. 21 4
      lib/Predis.php

+ 8 - 1
CHANGELOG

@@ -1,7 +1,14 @@
-v0.6.4 (2011-??-??)
+v0.6.4 (2011-02-12)
   * Various performance improvements (15% ~ 25%) especially when dealing with 
     long multibulk replies or when using clustered connections.
 
+  * Added the "on_retry" option to Predis_MultiExecBlock that can be used to 
+    specify an external callback (or any callable object) that gets invoked 
+    whenever a transaction is aborted by the server.
+
+  * Added inline (p)subscribtion via options when initializing an instance of 
+    Predis_PubSubContext.
+
 v0.6.3 (2011-01-01)
   * New commands available in the Redis v2.2 profile (dev):
       - Strings: SETRANGE, GETRANGE, SETBIT, GETBIT

+ 1 - 1
VERSION

@@ -1 +1 @@
-0.6.4-dev
+0.6.4

+ 21 - 4
lib/Predis.php

@@ -294,8 +294,8 @@ class Predis_Client {
         return $transBlock !== null ? $multi->execute($transBlock) : $multi;
     }
 
-    public function pubSubContext() {
-        return new Predis_PubSubContext($this);
+    public function pubSubContext(Array $options = null) {
+        return new Predis_PubSubContext($this, $options);
     }
 }
 
@@ -1060,12 +1060,16 @@ class Predis_PubSubContext implements Iterator {
     const STATUS_SUBSCRIBED  = 0x0010;
     const STATUS_PSUBSCRIBED = 0x0100;
 
-    private $_redisClient, $_position;
+    private $_redisClient, $_position, $_options;
 
-    public function __construct(Predis_Client $redisClient) {
+    public function __construct(Predis_Client $redisClient, Array $options = null) {
         $this->checkCapabilities($redisClient);
+        $this->_options = isset($options) ? $options : array();
         $this->_redisClient = $redisClient;
         $this->_statusFlags = self::STATUS_VALID;
+
+        $this->genericSubscribeInit('subscribe');
+        $this->genericSubscribeInit('psubscribe');
     }
 
     public function __destruct() {
@@ -1089,6 +1093,19 @@ class Predis_PubSubContext implements Iterator {
         }
     }
 
+    private function genericSubscribeInit($subscribeAction) {
+        if (isset($this->_options[$subscribeAction])) {
+            if (is_array($this->_options[$subscribeAction])) {
+                foreach ($this->_options[$subscribeAction] as $subscription) {
+                    $this->$subscribeAction($subscription);
+                }
+            }
+            else {
+                $this->$subscribeAction($this->_options[$subscribeAction]);
+            }
+        }
+    }
+
     private function isFlagSet($value) {
         return ($this->_statusFlags & $value) === $value;
     }