Skip to content

Commit

Permalink
Feature: new parameters switching for dibi/nette/pdo (idea by @felix,…
Browse files Browse the repository at this point in the history
… trolling by @Crempa)
  • Loading branch information
f3l1x committed Jun 27, 2016
1 parent eabc69d commit a2218de
Show file tree
Hide file tree
Showing 15 changed files with 279 additions and 162 deletions.
21 changes: 12 additions & 9 deletions src/Bridges/Dibi/DataSources/DibiDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,17 +46,20 @@ public function compile(Parameters $parameters)
$sql = $this->getRealSql($parameters);

try {
if ($this->isPure()) {
// Expand parameters
$expander = $parameters->createExpander();
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->nativeQuery($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute dibi query
$args = array_values($parameters->toArray());
$resultset = $this->connection->query($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute dibi query
$resultset = $this->connection->query($sql, $args);
} catch (DibiException $e) {
throw new SqlException($sql, NULL, $e);
}
Expand Down
23 changes: 13 additions & 10 deletions src/Bridges/Dibi/DataSources/DibiWrapperDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
use DibiException;
use Tlapnet\Report\DataSources\AbstractDatabaseDataSource;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\Result;

class DibiWrapperDataSource extends AbstractDatabaseDataSource
{
Expand Down Expand Up @@ -43,17 +43,20 @@ public function compile(Parameters $parameters)
$sql = $this->getRealSql($parameters);

try {
if ($this->isPure()) {
// Expand parameters
$expander = $parameters->createExpander();
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->nativeQuery($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute dibi query
$args = array_values($parameters->toArray());
$resultset = $this->connection->query($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute dibi query
$resultset = $this->connection->query($sql, $args);
} catch (DibiException $e) {
throw new SqlException($sql, NULL, $e);
}
Expand Down
25 changes: 13 additions & 12 deletions src/Bridges/Dibi/DataSources/MultiDibiWrapperDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
use DibiConnection;
use Tlapnet\Report\DataSources\AbstractMultiDataSource;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\MultiResult;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;

class MultiDibiWrapperDataSource extends AbstractMultiDataSource
{
Expand All @@ -34,27 +34,28 @@ public function __construct(DibiConnection $connection)
*/
public function compile(Parameters $parameters)
{
$expander = $parameters->createExpander();
$params = $parameters->toArray();

// Create result
$result = new MultiResult();

foreach ($this->rows as $row) {
// Get sql from row
$sql = $row->sql;

if ($this->isPure()) {
// Expand parameters
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->nativeQuery($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute nette database query
$args = array_values($params);
$resultset = $this->connection->query($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute nette database query
$resultset = $this->connection->query($sql, $args);

// Fetch single data
$single = $resultset->fetchSingle();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
use Nette\Database\Connection;
use Tlapnet\Report\DataSources\AbstractMultiDataSource;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\MultiResult;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;

class MultiNetteDatabaseWrapperDataSource extends AbstractMultiDataSource
{
Expand All @@ -34,27 +34,28 @@ public function __construct(Connection $connection)
*/
public function compile(Parameters $parameters)
{
$expander = $parameters->createExpander();
$params = $parameters->toArray();

// Create result
$result = new MultiResult();

foreach ($this->rows as $row) {
// Get sql from row
$sql = $row->sql;

if ($this->isPure()) {
// Expand parameters
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->query($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute nette database query
$args = array_values($params);
$resultset = $this->connection->queryArgs($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute nette database query
$resultset = $this->connection->queryArgs($sql, $args);

// Fetch single data
$single = $resultset->fetchField();

Expand Down
23 changes: 13 additions & 10 deletions src/Bridges/Nette/Database/DataSources/NetteDatabaseDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use Nette\Database\Helpers;
use Tlapnet\Report\DataSources\AbstractDatabaseConnectionDataSource;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\Result;
use Tracy\Debugger;

class NetteDatabaseDataSource extends AbstractDatabaseConnectionDataSource
Expand Down Expand Up @@ -81,17 +81,20 @@ public function compile(Parameters $parameters)
$sql = $this->getRealSql($parameters);

try {
if ($this->isPure()) {
// Expand parameters
$expander = $parameters->createExpander();
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->query($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute nette database query
$args = array_values($parameters->toArray());
$resultset = $this->connection->queryArgs($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute nette database query
$resultset = $this->connection->queryArgs($sql, $args);
} catch (DriverException $e) {
throw new SqlException($sql, NULL, $e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
use Nette\Database\Helpers;
use Tlapnet\Report\DataSources\AbstractDatabaseDataSource;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\Result;
use Tracy\Debugger;

class NetteDatabaseWrapperDataSource extends AbstractDatabaseDataSource
Expand Down Expand Up @@ -60,17 +60,20 @@ public function compile(Parameters $parameters)
$sql = $this->getRealSql($parameters);

try {
if ($this->isPure()) {
// Expand parameters
$expander = $parameters->createExpander();
$sql = $expander->expand($sql);
// Execute native query
$resultset = $this->connection->query($sql);
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Execute nette database query
$args = array_values($parameters->toArray());
$resultset = $this->connection->queryArgs($sql, $args);
// Keep empty arguments
$args = [];
}

// Execute nette database query
$resultset = $this->connection->queryArgs($sql, $args);
} catch (DriverException $e) {
throw new SqlException($sql, NULL, $e);
}
Expand Down
16 changes: 0 additions & 16 deletions src/DataSources/AbstractDatabaseDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,22 +49,6 @@ public function setDefaultSql($sql)
$this->defaultSql = (string)$sql;
}

/**
* @return boolean
*/
public function isPure()
{
return $this->pure;
}

/**
* @param boolean $pure
*/
public function setPure($pure)
{
$this->pure = (bool)$pure;
}

/**
* @param Parameters $parameters
* @return string
Expand Down
19 changes: 0 additions & 19 deletions src/DataSources/AbstractMultiDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@ abstract class AbstractMultiDataSource implements DataSource
/** @var array */
protected $rows = [];

/** @var bool */
protected $pure = TRUE;

/**
* @param string $sql
*/
Expand All @@ -22,20 +19,4 @@ public function addRow($title, $sql)
];
}

/**
* @return boolean
*/
public function isPure()
{
return $this->pure;
}

/**
* @param boolean $pure
*/
public function setPure($pure)
{
$this->pure = (bool)$pure;
}

}
27 changes: 17 additions & 10 deletions src/DataSources/PdoDataSource.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@

use PDO;
use Tlapnet\Report\Exceptions\Runtime\DataSource\SqlException;
use Tlapnet\Report\Model\Result\Result;
use Tlapnet\Report\Model\Parameters\Parameters;
use Tlapnet\Report\Model\Result\Result;

class PdoDataSource extends AbstractDatabaseConnectionDataSource
{
Expand Down Expand Up @@ -38,20 +38,27 @@ public function compile(Parameters $parameters)
// Connect to DB
if (!$this->pdo) $this->connect();

// Expand parameters
$expander = $parameters->createExpander();

// Get SQL
$sql = $this->getRealSql($parameters);

// Replace placeholders
$query = $expander->expand($sql);

try {
$statement = $this->pdo->prepare($query);
$statement->execute();
// Prepare parameters
if (!$parameters->isEmpty()) {
$switch = $parameters->createSwitcher();
$switch->setPlaceholder('?');
// Replace named parameters for ? and return
// accurate sequenced array of arguments
list ($sql, $args) = $switch->execute($sql);
} else {
// Keep empty arguments
$args = [];
}

// Execute native pdo query
$statement = $this->pdo->prepare($sql);
$statement->execute($args);
} catch (\PDOException $e) {
throw new SqlException($query, NULL, $e);
throw new SqlException($sql, NULL, $e);
}

$result = new Result($statement->fetchAll());
Expand Down
9 changes: 9 additions & 0 deletions src/Model/Parameters/Parameters.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
use Tlapnet\Report\Model\Subreport\Attachable;
use Tlapnet\Report\Utils\Expander;
use Tlapnet\Report\Utils\Suggestions;
use Tlapnet\Report\Utils\Switcher;

class Parameters implements Attachable
{
Expand Down Expand Up @@ -125,4 +126,12 @@ public function createExpander()
return new Expander($this->toArray());
}

/**
* @return Switcher
*/
public function createSwitcher()
{
return new Switcher($this->toArray());
}

}
Loading

0 comments on commit a2218de

Please sign in to comment.