Skip to content

Commit

Permalink
Fix on FetchMode getting lost between instances (#183)
Browse files Browse the repository at this point in the history
Fix on FetchMode getting lost between instances, closes #183 #185
  • Loading branch information
vikkio88 authored and TCB13 committed Apr 11, 2018
1 parent 0894e3a commit 220b920
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 22 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ Library on [Packagist](https://packagist.org/packages/usmanhalalit/pixie).
- [Connection](#connection)
- [Alias](#alias)
- [Multiple Connection](#alias)
- [SQLite and PostgreSQL Config Sample](sqlite-and-postgresql-config-sample)
- [SQLite and PostgreSQL Config Sample](#sqlite-and-postgresql-config-sample)
- [Query](#query)
- [**Select**](#select)
- [Get Easily](#get-easily)
Expand Down
53 changes: 33 additions & 20 deletions src/Pixie/QueryBuilder/QueryBuilderHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class QueryBuilderHandler
protected $statements = array();

/**
* @var \PDO
* @var PDO
*/
protected $pdo;

Expand All @@ -47,14 +47,15 @@ class QueryBuilderHandler
*
* @var array
*/
protected $fetchParameters = array(\PDO::FETCH_OBJ);
protected $fetchParameters = array(PDO::FETCH_OBJ);

/**
* @param null|\Pixie\Connection $connection
*
* @throws \Pixie\Exception
* @param int $fetchMode
* @throws Exception
*/
public function __construct(Connection $connection = null)
public function __construct(Connection $connection = null, $fetchMode = PDO::FETCH_OBJ)
{
if (is_null($connection)) {
if (!$connection = Connection::getStoredConnection()) {
Expand All @@ -68,6 +69,8 @@ public function __construct(Connection $connection = null)
$this->adapter = $this->connection->getAdapter();
$this->adapterConfig = $this->connection->getAdapterConfig();

$this->setFetchMode($fetchMode);

if (isset($this->adapterConfig['prefix'])) {
$this->tablePrefix = $this->adapterConfig['prefix'];
}
Expand Down Expand Up @@ -102,21 +105,21 @@ public function setFetchMode($mode)
*/
public function asObject($className, $constructorArgs = array())
{
return $this->setFetchMode(\PDO::FETCH_CLASS, $className, $constructorArgs);
return $this->setFetchMode(PDO::FETCH_CLASS, $className, $constructorArgs);
}

/**
* @param null|\Pixie\Connection $connection
*
* @return static
* @return QueryBuilderHandler
* @throws Exception
*/
public function newQuery(Connection $connection = null)
{
if (is_null($connection)) {
$connection = $this->connection;
}

return new static($connection);
return new static($connection, $this->getFetchMode());
}

/**
Expand Down Expand Up @@ -156,7 +159,8 @@ public function statement($sql, $bindings = array())
/**
* Get all rows
*
* @return \stdClass|null
* @return \stdClass|array
* @throws Exception
*/
public function get()
{
Expand Down Expand Up @@ -259,17 +263,17 @@ protected function aggregate($type)
}

if (is_array($row[0])) {
return (int) $row[0]['field'];
return (int)$row[0]['field'];
} elseif (is_object($row[0])) {
return (int) $row[0]->field;
return (int)$row[0]->field;
}

return 0;
}

/**
* @param string $type
* @param array $dataToBePassed
* @param array $dataToBePassed
*
* @return mixed
* @throws Exception
Expand All @@ -291,7 +295,7 @@ public function getQuery($type = 'select', $dataToBePassed = array())

/**
* @param QueryBuilderHandler $queryBuilder
* @param null $alias
* @param null $alias
*
* @return Raw
*/
Expand Down Expand Up @@ -440,10 +444,10 @@ public function delete()
}

/**
* @param $tables Single table or multiple tables as an array or as
* multiple parameters
* @param string|array $tables Single table or array of tables
*
* @return static
* @return QueryBuilderHandler
* @throws Exception
*/
public function table($tables)
{
Expand All @@ -453,7 +457,7 @@ public function table($tables)
$tables = func_get_args();
}

$instance = new static($this->connection);
$instance = new static($this->connection, $this->getFetchMode());
$tables = $this->addTablePrefix($tables, false);
$instance->addStatement('tables', $tables);
return $instance;
Expand Down Expand Up @@ -791,7 +795,7 @@ public function join($table, $key, $operator = null, $value = null, $type = 'inn
// Build a new JoinBuilder class, keep it by reference so any changes made
// in the closure should reflect here
$joinBuilder = $this->container->build('\\Pixie\\QueryBuilder\\JoinBuilder', array($this->connection));
$joinBuilder = & $joinBuilder;
$joinBuilder = &$joinBuilder;
// Call the closure with our new joinBuilder object
$key($joinBuilder);
$table = $this->addTablePrefix($table, false);
Expand Down Expand Up @@ -1012,7 +1016,7 @@ public function getEvent($event, $table = ':any')

/**
* @param $event
* @param string $table
* @param string $table
* @param callable $action
*
* @return void
Expand All @@ -1030,7 +1034,7 @@ public function registerEvent($event, $table, \Closure $action)

/**
* @param $event
* @param string $table
* @param string $table
*
* @return void
*/
Expand Down Expand Up @@ -1061,4 +1065,13 @@ public function getStatements()
{
return $this->statements;
}

/**
* @return int will return PDO Fetch mode
*/
public function getFetchMode()
{
return !empty($this->fetchParameters) ?
current($this->fetchParameters) : PDO::FETCH_OBJ;
}
}
17 changes: 16 additions & 1 deletion tests/Pixie/QueryBuilderBehaviorTest.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php namespace Pixie;

use Mockery as m;
use Pixie\QueryBuilder\QueryBuilderHandler;

class QueryBuilderTest extends TestCase
{
Expand Down Expand Up @@ -302,4 +302,19 @@ public function testIsPossibleToUseSubqueryInWhereNotClause()
$query->getQuery()->getRawSql()
);
}

public function testYouCanSetFetchModeFromConstructorAsOptionalParameter()
{
$selectedFetchMode = \PDO::FETCH_ASSOC;
$builder = new QueryBuilderHandler($this->mockConnection, $selectedFetchMode);
$this->assertEquals($selectedFetchMode, $builder->getFetchMode());
}

public function testFetchModeSelectedWillBeMaintainedBetweenInstances(){
$selectedFetchMode = \PDO::FETCH_ASSOC;
$builder = new QueryBuilderHandler($this->mockConnection, $selectedFetchMode);
$newBuilder = $builder->table('stuff');

$this->assertEquals($selectedFetchMode, $newBuilder->getFetchMode());
}
}

0 comments on commit 220b920

Please # to comment.