diff --git a/lib/Predis.php b/lib/Predis.php index 9fba7877..8bd75cc3 100644 --- a/lib/Predis.php +++ b/lib/Predis.php @@ -285,6 +285,7 @@ class Response { const NEWLINE = "\r\n"; const OK = 'OK'; const ERROR = 'ERR'; + const QUEUED = 'QUEUED'; const NULL = 'nil'; private static $_prefixHandlers; @@ -294,7 +295,13 @@ class Response { // status '+' => function($socket) { $status = rtrim(fgets($socket), Response::NEWLINE); - return $status === Response::OK ? true : $status; + if ($status === Response::OK) { + return true; + } + else if ($status === Response::QUEUED) { + return new ResponseQueued(); + } + return $status; }, // error @@ -377,6 +384,14 @@ class Response { } } +class ResponseQueued { + public $queued = true; + + public function __toString() { + return Response::QUEUED; + } +} + class CommandPipeline { private $_redisClient, $_pipelineBuffer, $_returnValues, $_running; @@ -469,12 +484,12 @@ class MultiExecBlock { public function __call($method, $arguments) { $this->initialize(); $command = $this->_redisClient->createCommand($method, $arguments); - if ($this->_redisClient->executeCommand($command) === 'QUEUED') { + if (isset($this->_redisClient->executeCommand($command)->queued)) { $this->_commands[] = $command; } else { // TODO: ... - throw ClientException('Unexpected condition'); + throw new ClientException('Unexpected condition'); } } @@ -631,7 +646,7 @@ class Connection implements IConnection { $socket = $this->getSocket(); $handler = Response::getPrefixHandler(fgetc($socket)); $response = $handler($socket); - return $response !== 'QUEUED' ? $command->parseResponse($response) : $response; + return isset($response->queued) ? $response : $command->parseResponse($response); } public function rawCommand($rawCommandData, $closesConnection = false) {