Added resulset Cursor

This commit is contained in:
César D. Rodas 2013-11-12 15:16:18 -03:00
parent 73ac9315e7
commit 41e60fbeff
4 changed files with 115 additions and 3 deletions

View File

@ -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
View 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);
}
}

View File

@ -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)

View File

@ -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();
}
}