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…
Reference in New Issue
Block a user