From b673aac642a54cf802de5b27fbcd71cb0fdbfb81 Mon Sep 17 00:00:00 2001 From: shen2 Date: Mon, 1 Sep 2014 00:22:38 +0800 Subject: [PATCH] support Register Request and Supported Response --- Cassandra/Request/Register.php | 14 +++++++++++++- Cassandra/Response/DataStream.php | 16 ++++++++++++++++ Cassandra/Response/Result.php | 12 ++++++------ Cassandra/Response/Supported.php | 2 +- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/Cassandra/Request/Register.php b/Cassandra/Request/Register.php index 5820eab..891350c 100644 --- a/Cassandra/Request/Register.php +++ b/Cassandra/Request/Register.php @@ -1,11 +1,18 @@ _events = $events; + } + + public function getBody(){ + return DataType::getList($this->_events, array('type' => DataType::TEXT)); } } diff --git a/Cassandra/Response/DataStream.php b/Cassandra/Response/DataStream.php index 78519cd..88a8c99 100644 --- a/Cassandra/Response/DataStream.php +++ b/Cassandra/Response/DataStream.php @@ -230,6 +230,22 @@ public function readDecimal() { $len = strlen($value); return substr($value, 0, $len - $scale) . '.' . substr($value, $len - $scale); } + + public function readStringMultimap(){ + $map = array(); + $count = $this->readShort(); + for($i = 0; $i < $count; $i++){ + $key = $this->readString(); + + $listLength = $this->readShort(); + $list = array(); + for($j = 0; $j < $listLength; $j++) + $list[] = $this->readString(); + + $map[$key] = $list; + } + return $map; + } /** * @param array $type diff --git a/Cassandra/Response/Result.php b/Cassandra/Response/Result.php index 92b94af..1b5f185 100644 --- a/Cassandra/Response/Result.php +++ b/Cassandra/Response/Result.php @@ -21,7 +21,7 @@ class Result extends DataStream{ * @param array $type * @return mixed */ - public function readByTypeFromStream(array $type){ + protected function _readByTypeFromStream(array $type){ $length = unpack('N', substr($this->data, $this->offset, 4))[1]; $this->offset += 4; @@ -108,7 +108,7 @@ public function getData() { $row = new \ArrayObject(); foreach ($columns as $column) - $row[$column['name']] = self::readByTypeFromStream($column['type']); + $row[$column['name']] = $this->_readByTypeFromStream($column['type']); $rows[$i] = $row; } @@ -225,7 +225,7 @@ public function fetchAll($rowClass = 'ArrayObject'){ $row = new $rowClass(); foreach ($columns as $column) - $row[$column['name']] = self::readByTypeFromStream($column['type']); + $row[$column['name']] = $this->_readByTypeFromStream($column['type']); $rows[$i] = $row; } @@ -251,7 +251,7 @@ public function fetchCol($index = 0){ for($i = 0; $i < $rowCount; ++$i){ for($j = 0; $j < $columnCount; ++$j){ - $value = self::readByTypeFromStream($columns[$j]['type']); + $value = $this->_readByTypeFromStream($columns[$j]['type']); if ($j == $index) $array[$i] = $row; @@ -279,7 +279,7 @@ public function fetchRow($rowClass = 'ArrayObject'){ $row = new $rowClass(); foreach ($columns as $column) - $row[$column['name']] = self::readByTypeFromStream($column['type']); + $row[$column['name']] = $this->_readByTypeFromStream($column['type']); return $row; } @@ -301,7 +301,7 @@ public function fetchOne(){ return null; foreach ($columns as $column) - return self::readByTypeFromStream($column['type']); + return $this->_readByTypeFromStream($column['type']); return null; } diff --git a/Cassandra/Response/Supported.php b/Cassandra/Response/Supported.php index 8b31b2b..4d86b5c 100644 --- a/Cassandra/Response/Supported.php +++ b/Cassandra/Response/Supported.php @@ -13,6 +13,6 @@ public function getData(){ * The body of a SUPPORTED message is a [string multimap]. This multimap gives * for each of the supported STARTUP options, the list of supported values. */ - return parent::readByType(['type' => DataType::COLLECTION_MAP]); + return $this->readStringMultimap(); } }