Skip to content

Commit

Permalink
Merge pull request #14 from readdle/fix/collection_calls
Browse files Browse the repository at this point in the history
- Fixes for functions that work with collections
  • Loading branch information
AndrianBdn committed Feb 5, 2016
2 parents 60a887a + 435c996 commit 4cec8ee
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 46 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
language: php
php:
- 5.5
- 5.4
- 7.0
- 5.6
- hhvm
install: composer install
script: ./vendor/bin/phpunit --configuration phpunit.xml --coverage-text
Expand Down
51 changes: 13 additions & 38 deletions src/Readdle/Database/FQDBQueryAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,50 +29,25 @@ private function _runQuery($query, $options)
* @param string $query
* @param array $options
* @param callable $fetcher
* @return array|false
* @return array
*/
private function queryArrayOrFalse($query, $options, $fetcher) {
private function queryArray($query, $options, $fetcher)
{
$statement = $this->_runQuery($query, $options);

$result = call_user_func($fetcher, $statement);

if (!is_array($result) || count($result) == 0) {
return false;
}
else {
return $result;
}
return is_array($result) ? $result : [];
}

/**
* executes SELECT or SHOW query and returns first result
* @param string $query
* @param array $options
* @param callable $fetcher
* @return mixed|false
*/
private function queryOrFalse($query, $options, $fetcher)
{
$result = $this->queryArrayOrFalse($query, $options, $fetcher);

if (false === $result) {
return false;
}

return reset($result);
}


/**
* executes SELECT or SHOW query and returns 1st returned element
* @param string $query
* @param array $options
* @return mixed
* @return string|false
*/
public function queryValue($query, $options = array())
{
return $this->queryOrFalse($query, $options,
function(\PDOStatement $statement) { return $statement->fetch(\PDO::FETCH_NUM); });
$statement = $this->_runQuery($query, $options);
return $statement->fetch(\PDO::FETCH_COLUMN);
}

/**
Expand Down Expand Up @@ -105,11 +80,11 @@ public function queryList($query, $options = array())
* executes SELECT or SHOW query and returns result as array
* @param string $query
* @param array $options
* @return array|false
* @return array
*/
public function queryVector($query, $options = array())
{
return $this->queryArrayOrFalse($query, $options,
return $this->queryArray($query, $options,
function(\PDOStatement $statement) { return $statement->fetchAll(\PDO::FETCH_COLUMN, 0); });

}
Expand All @@ -118,11 +93,11 @@ function(\PDOStatement $statement) { return $statement->fetchAll(\PDO::FETCH_COL
* executes SELECT or SHOW query and returns result as assoc array
* @param string $query
* @param array $options
* @return array|false
* @return array
*/
public function queryTable($query, $options = array())
{
return $this->queryArrayOrFalse($query, $options,
return $this->queryArray($query, $options,
function(\PDOStatement $statement) { return $statement->fetchAll(\PDO::FETCH_ASSOC); }
);
}
Expand All @@ -133,15 +108,15 @@ function(\PDOStatement $statement) { return $statement->fetchAll(\PDO::FETCH_ASS
* @param string $className
* @param array $options
* @param array $classConstructorArguments
* @return array|false
* @return array
*/
public function queryObjArray($query, $className, $options = array(), $classConstructorArguments = NULL)
{
if (!class_exists($className)) {
$this->_error(FQDBException::CLASS_NOT_EXIST, FQDBException::FQDB_CODE);
}

return $this->queryArrayOrFalse($query, $options,
return $this->queryArray($query, $options,
function(\PDOStatement $statement) use ($className, $classConstructorArguments) {
return $statement->fetchAll(\PDO::FETCH_CLASS | \PDO::FETCH_PROPS_LATE,
$className, $classConstructorArguments);
Expand Down
30 changes: 24 additions & 6 deletions tests/FQDBTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,12 @@ public function testQueryValue() {

$value = $this->fqdb->queryValue("SELECT id FROM test WHERE id=1");
$this->assertEquals('1', $value);

$value = $this->fqdb->queryValue("SELECT * FROM test WHERE id=1");
$this->assertEquals('1', $value);

$value = $this->fqdb->queryValue("SELECT data, content FROM test WHERE id=1");
$this->assertEquals('data', $value);
}

public function testQueryList() {
Expand All @@ -75,7 +81,7 @@ public function testQueryAssoc() {

public function testQueryVector() {
$noValues = $this->fqdb->queryVector("SELECT * FROM test WHERE id=100");
$this->assertFalse($noValues);
$this->assertCount(0, $noValues);

$count = intval($this->fqdb->queryValue("SELECT COUNT(*) FROM test"));
$values = $this->fqdb->queryVector("SELECT * FROM test");
Expand All @@ -85,7 +91,7 @@ public function testQueryVector() {

public function testQueryTable() {
$noValues = $this->fqdb->queryTable("SELECT * FROM test WHERE id=100");
$this->assertFalse($noValues);
$this->assertCount(0, $noValues);

$count = intval($this->fqdb->queryValue("SELECT COUNT(*) FROM test"));
$values = $this->fqdb->queryTable("SELECT * FROM test");
Expand All @@ -103,8 +109,20 @@ public function testQueryObj() {
}

public function testQueryTableCallbackOk() {
$noValues = $this->fqdb->queryTableCallback("SELECT * FROM test WHERE id=:id", [':id' => 1], function($row) {return $row;});
$this->assertTrue($noValues);
$sql = "SELECT * FROM test";
$sqlOptions = [];

$callbackResultArray = [];
$resultTrue = $this->fqdb->queryTableCallback($sql, $sqlOptions,
function($row) use (&$callbackResultArray) {
$callbackResultArray[]=$row;
return $row;
}
);
$this->assertTrue($resultTrue);

$resultArray = $this->fqdb->queryTable($sql, $sqlOptions);
$this->assertEquals($resultArray, $callbackResultArray);
}

/**
Expand All @@ -126,7 +144,7 @@ public function testQueryObjException() {

public function testQueryObjArray() {
$noValues = $this->fqdb->queryObjArray("SELECT * FROM test WHERE id=100", '\QueryObject');
$this->assertFalse($noValues);
$this->assertCount(0, $noValues);

$count = intval($this->fqdb->queryValue("SELECT COUNT(*) FROM test"));
$objects = $this->fqdb->queryObjArray("SELECT * FROM test", '\QueryObject');
Expand Down Expand Up @@ -398,7 +416,7 @@ public function testWhereInStatement() {
[':idArray' => new \Readdle\Database\SQLArgs(null)]
);

$this->assertEquals(1, count($result));
$this->assertEquals(0, count($result));
}

public function testBlobInsert() {
Expand Down

0 comments on commit 4cec8ee

Please sign in to comment.