Added resulset Cursor
This commit is contained in:
		
							parent
							
								
									73ac9315e7
								
							
						
					
					
						commit
						41e60fbeff
					
				@ -59,7 +59,8 @@ class Client extends BaseHTTP
 | 
			
		||||
 | 
			
		||||
    public function createDatabase($name)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->post('db', ['name' => $name]);
 | 
			
		||||
        $this->post('db', ['name' => $name]);
 | 
			
		||||
        return new DB($this, $name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getDatabases()
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										55
									
								
								lib/InfluxPHP/Cursor.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								lib/InfluxPHP/Cursor.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,55 @@
 | 
			
		||||
<?php
 | 
			
		||||
/*
 | 
			
		||||
  +---------------------------------------------------------------------------------+
 | 
			
		||||
  | Copyright (c) 2013 César Rodas                                                  |
 | 
			
		||||
  +---------------------------------------------------------------------------------+
 | 
			
		||||
  | Redistribution and use in source and binary forms, with or without              |
 | 
			
		||||
  | modification, are permitted provided that the following conditions are met:     |
 | 
			
		||||
  | 1. Redistributions of source code must retain the above copyright               |
 | 
			
		||||
  |    notice, this list of conditions and the following disclaimer.                |
 | 
			
		||||
  |                                                                                 |
 | 
			
		||||
  | 2. Redistributions in binary form must reproduce the above copyright            |
 | 
			
		||||
  |    notice, this list of conditions and the following disclaimer in the          |
 | 
			
		||||
  |    documentation and/or other materials provided with the distribution.         |
 | 
			
		||||
  |                                                                                 |
 | 
			
		||||
  | 3. All advertising materials mentioning features or use of this software        |
 | 
			
		||||
  |    must display the following acknowledgement:                                  |
 | 
			
		||||
  |    This product includes software developed by César D. Rodas.                  |
 | 
			
		||||
  |                                                                                 |
 | 
			
		||||
  | 4. Neither the name of the César D. Rodas nor the                               |
 | 
			
		||||
  |    names of its contributors may be used to endorse or promote products         |
 | 
			
		||||
  |    derived from this software without specific prior written permission.        |
 | 
			
		||||
  |                                                                                 |
 | 
			
		||||
  | THIS SOFTWARE IS PROVIDED BY CÉSAR D. RODAS ''AS IS'' AND ANY                   |
 | 
			
		||||
  | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED       |
 | 
			
		||||
  | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE          |
 | 
			
		||||
  | DISCLAIMED. IN NO EVENT SHALL CÉSAR D. RODAS BE LIABLE FOR ANY                  |
 | 
			
		||||
  | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES      |
 | 
			
		||||
  | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;    |
 | 
			
		||||
  | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND     |
 | 
			
		||||
  | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT      |
 | 
			
		||||
  | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS   |
 | 
			
		||||
  | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE                     |
 | 
			
		||||
  +---------------------------------------------------------------------------------+
 | 
			
		||||
  | Authors: César Rodas <crodas@php.net>                                           |
 | 
			
		||||
  +---------------------------------------------------------------------------------+
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace crodas\InfluxPHP;
 | 
			
		||||
 | 
			
		||||
use ArrayIterator;
 | 
			
		||||
 | 
			
		||||
class Cursor extends ArrayIterator
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(Array $resultset)
 | 
			
		||||
    {
 | 
			
		||||
        $rows = [];
 | 
			
		||||
        foreach ($resultset as $set) {
 | 
			
		||||
            foreach ($set['points'] as $row) {
 | 
			
		||||
                $row    = (object)array_combine($set['columns'], $row);
 | 
			
		||||
                $rows[] = $row;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        parent::__construct($rows);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -63,7 +63,11 @@ class DB extends BaseHTTP
 | 
			
		||||
    public function insert($name, Array $data)
 | 
			
		||||
    {
 | 
			
		||||
        $points = [];
 | 
			
		||||
        $columns = array_keys(current($data));
 | 
			
		||||
        $first  = current($data);
 | 
			
		||||
        if (!is_array($first)) {
 | 
			
		||||
            return $this->insert($name, [$data]);
 | 
			
		||||
        }
 | 
			
		||||
        $columns = array_keys($first);
 | 
			
		||||
        foreach ($data as $value) {
 | 
			
		||||
            $points[] = array_values($value);
 | 
			
		||||
        }
 | 
			
		||||
@ -71,9 +75,14 @@ class DB extends BaseHTTP
 | 
			
		||||
        return $this->post('series', [$body]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function first($sql)
 | 
			
		||||
    {
 | 
			
		||||
        return current($this->query($sql));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function query($sql)
 | 
			
		||||
    {
 | 
			
		||||
        return $this->get('series', ['q' => $sql]);
 | 
			
		||||
        return new Cursor($this->get('series', ['q' => $sql]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function createUser($username, $password)
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
<?php
 | 
			
		||||
use crodas\InfluxPHP\Client;
 | 
			
		||||
use crodas\InfluxPHP\DB;
 | 
			
		||||
 | 
			
		||||
class DBTest extends \phpunit_framework_testcase
 | 
			
		||||
{
 | 
			
		||||
@ -17,4 +18,50 @@ class DBTest extends \phpunit_framework_testcase
 | 
			
		||||
        $client = new Client;
 | 
			
		||||
        return $client->createDatabase("test_foobar");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  @dependsOn testCreateException
 | 
			
		||||
     */
 | 
			
		||||
    public function testDelete()
 | 
			
		||||
    {
 | 
			
		||||
        $client = new Client;
 | 
			
		||||
        return $client->deleteDatabase("test_foobar");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     *  @dependsOn testDelete
 | 
			
		||||
     *  @expectedException RuntimeException
 | 
			
		||||
     */
 | 
			
		||||
    public function testDeleteException()
 | 
			
		||||
    {
 | 
			
		||||
        $client = new Client;
 | 
			
		||||
        return $client->deleteDatabase("test_foobar");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testDBObject()
 | 
			
		||||
    {
 | 
			
		||||
        $client = new Client;
 | 
			
		||||
        $client->createDatabase("test_xxx");
 | 
			
		||||
        $this->assertTrue($client->test_xxx instanceof DB);
 | 
			
		||||
        $this->assertTrue($client->getDatabase("test_xxx") instanceof DB);
 | 
			
		||||
        $client->test_xxx->drop();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testQuery()
 | 
			
		||||
    {
 | 
			
		||||
        $client = new Client;
 | 
			
		||||
        $db = $client->createDatabase("test_" . uniqid(true));
 | 
			
		||||
        $db->createUser("root", "root");
 | 
			
		||||
 | 
			
		||||
        $db->insert("foobar", ['type' => '/foobar', 'karma' => 10]);
 | 
			
		||||
        $db->insert("foobar", ['type' => '/foobar', 'karma' => 20]);
 | 
			
		||||
        $db->insert("foobar", ['type' => '/barfoo', 'karma' => 30]);
 | 
			
		||||
 | 
			
		||||
        sleep(1);
 | 
			
		||||
        $this->assertEquals($db->first("SELECT max(karma) FROM foobar;")->max, 30);
 | 
			
		||||
        $this->assertEquals($db->first("SELECT min(karma) FROM foobar;")->min, 10);
 | 
			
		||||
        $this->assertEquals($db->first("SELECT mean(karma) FROM foobar;")->mean, 20);
 | 
			
		||||
 | 
			
		||||
        $db->drop();
 | 
			
		||||
    } 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user