فهرست منبع

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

Daniele Alessandri 14 سال پیش
والد
کامیت
897c217fe3
3فایلهای تغییر یافته به همراه30 افزوده شده و 6 حذف شده
  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;
     }