Skip to content

Commit

Permalink
Database: move logic from Connection to Context
Browse files Browse the repository at this point in the history
  • Loading branch information
hrach authored and dg committed Nov 14, 2013
1 parent ffa9efe commit 8818410
Show file tree
Hide file tree
Showing 2 changed files with 175 additions and 78 deletions.
125 changes: 47 additions & 78 deletions src/Database/Connection.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
*/
class Connection extends Nette\Object
{
/** @var array of function(Connection $connection); Occurs after connection is established */
public $onConnect;

/** @var array of function(Connection $connection, ResultSet|Exception $result); Occurs after query is executed */
public $onQuery;

/** @var array */
private $params;

Expand All @@ -44,12 +50,6 @@ class Connection extends Nette\Object
/** @var PDO */
private $pdo;

/** @var array of function(Connection $connection); Occurs after connection is established */
public $onConnect;

/** @var array of function(Connection $connection, ResultSet|Exception $result); Occurs after query is executed */
public $onQuery;


public function __construct($dsn, $user = NULL, $password = NULL, array $options = NULL)
{
Expand All @@ -65,7 +65,7 @@ public function __construct($dsn, $user = NULL, $password = NULL, array $options
}


private function connect()
public function connect()
{
if ($this->pdo) {
return;
Expand Down Expand Up @@ -105,27 +105,6 @@ public function getSupplementalDriver()
}


/** @return void */
public function beginTransaction()
{
$this->queryArgs('::beginTransaction', array());
}


/** @return void */
public function commit()
{
$this->queryArgs('::commit', array());
}


/** @return void */
public function rollBack()
{
$this->queryArgs('::rollBack', array());
}


/**
* @param string sequence object
* @return string
Expand All @@ -147,25 +126,37 @@ public function quote($string, $type = PDO::PARAM_STR)
}


/**
* Generates and executes SQL query.
* @param string statement
* @param mixed [parameters, ...]
* @return ResultSet
*/
/** @deprecated */
function beginTransaction()
{
$this->queryArgs('::beginTransaction', array());
}


/** @deprecated */
function commit()
{
$this->queryArgs('::commit', array());
}


/** @deprecated */
public function rollBack()
{
$this->queryArgs('::rollBack', array());
}


/** @deprecated */
public function query($statement)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args);
}


/**
* @param string statement
* @param array
* @return ResultSet
*/
public function queryArgs($statement, array $params)
/** @deprecated */
function queryArgs($statement, array $params)
{
$this->connect();
if ($params) {
Expand All @@ -188,62 +179,40 @@ public function queryArgs($statement, array $params)
/********************* shortcuts ****************d*g**/


/**
* Shortcut for query()->fetch()
* @param string statement
* @param mixed [parameters, ...]
* @return Row
*/
public function fetch($args)
/** @deprecated */
function fetch($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetch();
}


/**
* Shortcut for query()->fetchField()
* @param string statement
* @param mixed [parameters, ...]
* @return mixed
*/
public function fetchField($args)
/** @deprecated */
function fetchField($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchField();
}


/**
* Shortcut for query()->fetchPairs()
* @param string statement
* @param mixed [parameters, ...]
* @return array
*/
public function fetchPairs($args)
/** @deprecated */
function fetchPairs($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchPairs(0, 1);
}


/**
* Shortcut for query()->fetchAll()
* @param string statement
* @param mixed [parameters, ...]
* @return array
*/
public function fetchAll($args)
/** @deprecated */
function fetchAll($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchAll();
}


/**
* @return SqlLiteral
*/
public static function literal($value)
/** @deprecated */
static function literal($value)
{
$args = func_get_args();
return new SqlLiteral(array_shift($args), $args);
Expand All @@ -254,7 +223,7 @@ public static function literal($value)


/** @deprecated */
public function table($table)
function table($table)
{
trigger_error(__METHOD__ . '() is deprecated; use Context::table() instead.', E_USER_DEPRECATED);
if (!$this->context) {
Expand All @@ -265,15 +234,15 @@ public function table($table)


/** @deprecated */
public function setContext(Context $context)
function setContext(Context $context)
{
$this->context = $context;
return $this;
}


/** @deprecated */
public function getContext()
function getContext()
{
return $this->context;
}
Expand All @@ -282,15 +251,15 @@ public function getContext()
/** @deprecated */
function setDatabaseReflection()
{
trigger_error(__METHOD__ . '() is deprecated; use setContext() instead.', E_USER_DEPRECATED);
trigger_error(__METHOD__ . '() is deprecated; use Database\Context instead.', E_USER_DEPRECATED);
return $this;
}


/** @deprecated */
function setCacheStorage()
{
trigger_error(__METHOD__ . '() is deprecated; use setContext() instead.', E_USER_DEPRECATED);
trigger_error(__METHOD__ . '() is deprecated; use Database\Context instead.', E_USER_DEPRECATED);
}


Expand All @@ -305,7 +274,7 @@ function lastInsertId($name = NULL)
/** @deprecated */
function exec($statement)
{
trigger_error(__METHOD__ . '() is deprecated; use query()->getRowCount() instead.', E_USER_DEPRECATED);
trigger_error(__METHOD__ . '() is deprecated; use Database\Context::query()->getRowCount() instead.', E_USER_DEPRECATED);
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->getRowCount();
}
Expand Down
128 changes: 128 additions & 0 deletions src/Database/Context.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,75 @@ class Context extends Nette\Object
/** @var Nette\Caching\IStorage */
private $cacheStorage;

/** @var SqlPreprocessor */
private $preprocessor;


public function __construct(Connection $connection, IReflection $reflection = NULL, Nette\Caching\IStorage $cacheStorage = NULL)
{
$this->connection = $connection;
$this->reflection = $reflection ?: new Reflection\ConventionalReflection;
$this->cacheStorage = $cacheStorage;
$this->preprocessor = new SqlPreprocessor($this->connection);
}


/** @return void */
public function beginTransaction()
{
$this->queryArgs('::beginTransaction', array());
}


/** @return void */
public function commit()
{
$this->queryArgs('::commit', array());
}


/** @return void */
public function rollBack()
{
$this->queryArgs('::rollBack', array());
}


/**
* Generates and executes SQL query.
* @param string statement
* @param mixed [parameters, ...]
* @return ResultSet
*/
public function query($statement)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args);
}


/**
* @param string statement
* @param array
* @return ResultSet
*/
public function queryArgs($statement, array $params)
{
$this->connection->connect();
if ($params) {
array_unshift($params, $statement);
list($statement, $params) = $this->preprocessor->process($params);
}

try {
$result = new ResultSet($this->connection, $statement, $params);
} catch (\PDOException $e) {
$e->queryString = $statement;
$this->connection->onQuery($this, $e);
throw $e;
}
$this->connection->onQuery($this, $result);
return $result;
}


Expand All @@ -59,4 +122,69 @@ public function getDatabaseReflection()
return $this->reflection;
}


/********************* shortcuts ****************d*g**/


/**
* Shortcut for query()->fetch()
* @param string statement
* @param mixed [parameters, ...]
* @return Row
*/
public function fetch($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetch();
}


/**
* Shortcut for query()->fetchField()
* @param string statement
* @param mixed [parameters, ...]
* @return mixed
*/
public function fetchField($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchField();
}


/**
* Shortcut for query()->fetchPairs()
* @param string statement
* @param mixed [parameters, ...]
* @return array
*/
public function fetchPairs($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchPairs(0, 1);
}


/**
* Shortcut for query()->fetchAll()
* @param string statement
* @param mixed [parameters, ...]
* @return array
*/
public function fetchAll($args)
{
$args = func_get_args();
return $this->queryArgs(array_shift($args), $args)->fetchAll();
}


/**
* @return SqlLiteral
*/
public static function literal($value)
{
$args = func_get_args();
return new SqlLiteral(array_shift($args), $args);
}

}

0 comments on commit 8818410

Please sign in to comment.