/** * @param DataStream $stream * @return mixed */ public static function readFromStream(DataStream $stream) { $data = ['type' => $stream->readShort()]; switch ($data['type']) { case DataTypeEnum::CUSTOM: $data['name'] = $stream->readString(); break; case DataTypeEnum::COLLECTION_LIST: case DataTypeEnum::COLLECTION_SET: $data['value'] = self::readFromStream($stream); break; case DataTypeEnum::COLLECTION_MAP: $data['key'] = self::readFromStream($stream); $data['value'] = self::readFromStream($stream); break; } return $data; }
/** * Return metadata * @return array */ private function getMetadata() { $flags = $this->dataStream->readInt(); $columnCount = $this->dataStream->readInt(); $globalTableSpec = $flags & 0x1; if ($globalTableSpec) { $keyspace = $this->dataStream->readString(); $tableName = $this->dataStream->readString(); } $columns = []; for ($i = 0; $i < $columnCount; ++$i) { if (isset($keyspace, $tableName)) { $columnData = ['keyspace' => $keyspace, 'tableName' => $tableName, 'name' => $this->dataStream->readString(), 'type' => TypeReader::readFromStream($this->dataStream)]; } else { $columnData = ['keyspace' => $this->dataStream->readString(), 'tableName' => $this->dataStream->readString(), 'name' => $this->dataStream->readString(), 'type' => TypeReader::readFromStream($this->dataStream)]; } $columns[] = $columnData; } return ['columnCount' => $columnCount, 'columns' => $columns]; }