| 
<?php
 namespace queasy\db\query;
 
 use PDO;
 
 use queasy\db\Db;
 
 class CustomQuery extends Query
 {
 private $config;
 
 public function __construct(PDO $pdo, $config)
 {
 $this->config = $config;
 
 parent::__construct($pdo, $config['sql']);
 }
 
 /**
 * Executes SQL query and returns all selected rows.
 *
 * @param array $params Query parameters
 *
 * @return array Returned data depends on query, usually it is an array (or affected rows count for queries like INSERT, DELETE or UPDATE)
 *
 * @throws DbException On error
 */
 public function run(array $params = array(), array $options = array())
 {
 $config = $this->config;
 if (is_object($config) && method_exists($config, 'toArray')) {
 $config = $config->toArray();
 }
 
 $options = $options + (isset($config['options'])? $config['options']: array());
 
 $statement = parent::run($params, $options);
 
 $returns = isset($this->config['returns'])? $this->config['returns']: null;
 
 if ($returns) {
 $fetchMode = isset($this->config['fetchMode'])? $this->config['fetchMode']: null;
 $fetchArg = isset($this->config['fetchArg'])? $this->config['fetchArg']: null;
 switch ($returns) {
 case Db::RETURN_ONE:
 return (Db::FETCH_CLASS === $fetchMode)
 ? $statement->fetchObject($fetchArg? $fetchArg: 'stdClass')
 : $statement->fetch($fetchMode);
 
 case Db::RETURN_ALL:
 return (Db::FETCH_CLASS === $fetchMode)
 ? $statement->fetchAll($fetchMode, $fetchArg)
 : $statement->fetchAll($fetchMode);
 
 case Db::RETURN_VALUE:
 $row = $statement->fetch();
 $value = array_shift($row);
 return $value;
 
 default:
 return $statement;
 }
 }
 
 return $statement;
 }
 }
 
 
 |