| /** | |
| * Zend Framework | |
| * | |
| * LICENSE | |
| * | |
| * This source file is subject to the new BSD license that is bundled | |
| * with this package in the file LICENSE.txt. | |
| * It is also available through the world-wide-web at this URL: | |
| * http://framework.zend.com/license/new-bsd | |
| * If you did not receive a copy of the license and are unable to | |
| * obtain it through the world-wide-web, please send an email | |
| * to license@zend.com so we can send you a copy immediately. | |
| * | |
| * @category Zend | |
| * @package Zend_Db | |
| * @subpackage Profiler | |
| * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) | |
| * @license http://framework.zend.com/license/new-bsd New BSD License | |
| * @version $Id: Query.php 23775 2011-03-01 17:25:24Z ralph $ | |
| */ | |
| /** | |
| * @category Zend | |
| * @package Zend_Db | |
| * @subpackage Profiler | |
| * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) | |
| * @license http://framework.zend.com/license/new-bsd New BSD License | |
| */ | |
| class Zend_Db_Profiler_Query | |
| { | |
| /** | |
| * SQL query string or user comment, set by $query argument in constructor. | |
| * | |
| * @var string | |
| */ | |
| protected $_query = ''; | |
| /** | |
| * One of the Zend_Db_Profiler constants for query type, set by $queryType argument in constructor. | |
| * | |
| * @var integer | |
| */ | |
| protected $_queryType = 0; | |
| /** | |
| * Unix timestamp with microseconds when instantiated. | |
| * | |
| * @var float | |
| */ | |
| protected $_startedMicrotime = null; | |
| /** | |
| * Unix timestamp with microseconds when self::queryEnd() was called. | |
| * | |
| * @var integer | |
| */ | |
| protected $_endedMicrotime = null; | |
| /** | |
| * @var array | |
| */ | |
| protected $_boundParams = array(); | |
| /** | |
| * @var array | |
| */ | |
| /** | |
| * Class constructor. A query is about to be started, save the query text ($query) and its | |
| * type (one of the Zend_Db_Profiler::* constants). | |
| * | |
| * @param string $query | |
| * @param integer $queryType | |
| * @return void | |
| */ | |
| public function __construct($query, $queryType) | |
| { | |
| $this->_query = $query; | |
| $this->_queryType = $queryType; | |
| // by default, and for backward-compatibility, start the click ticking | |
| $this->start(); | |
| } | |
| /** | |
| * Clone handler for the query object. | |
| * @return void | |
| */ | |
| public function __clone() | |
| { | |
| $this->_boundParams = array(); | |
| $this->_endedMicrotime = null; | |
| $this->start(); | |
| } | |
| /** | |
| * Starts the elapsed time click ticking. | |
| * This can be called subsequent to object creation, | |
| * to restart the clock. For instance, this is useful | |
| * right before executing a prepared query. | |
| * | |
| * @return void | |
| */ | |
| public function start() | |
| { | |
| $this->_startedMicrotime = microtime(true); | |
| } | |
| /** | |
| * Ends the query and records the time so that the elapsed time can be determined later. | |
| * | |
| * @return void | |
| */ | |
| public function end() | |
| { | |
| $this->_endedMicrotime = microtime(true); | |
| } | |
| /** | |
| * Returns true if and only if the query has ended. | |
| * | |
| * @return boolean | |
| */ | |
| public function hasEnded() | |
| { | |
| return $this->_endedMicrotime !== null; | |
| } | |
| /** | |
| * Get the original SQL text of the query. | |
| * | |
| * @return string | |
| */ | |
| public function getQuery() | |
| { | |
| return $this->_query; | |
| } | |
| /** | |
| * Get the type of this query (one of the Zend_Db_Profiler::* constants) | |
| * | |
| * @return integer | |
| */ | |
| public function getQueryType() | |
| { | |
| return $this->_queryType; | |
| } | |
| /** | |
| * @param string $param | |
| * @param mixed $variable | |
| * @return void | |
| */ | |
| public function bindParam($param, $variable) | |
| { | |
| $this->_boundParams[$param] = $variable; | |
| } | |
| /** | |
| * @param array $param | |
| * @return void | |
| */ | |
| public function bindParams(array $params) | |
| { | |
| if (array_key_exists(0, $params)) { | |
| array_unshift($params, null); | |
| unset($params[0]); | |
| } | |
| foreach ($params as $param => $value) { | |
| $this->bindParam($param, $value); | |
| } | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getQueryParams() | |
| { | |
| return $this->_boundParams; | |
| } | |
| /** | |
| * Get the elapsed time (in seconds) that the query ran. | |
| * If the query has not yet ended, false is returned. | |
| * | |
| * @return float|false | |
| */ | |
| public function getElapsedSecs() | |
| { | |
| if (null === $this->_endedMicrotime) { | |
| return false; | |
| } | |
| return $this->_endedMicrotime - $this->_startedMicrotime; | |
| } | |
| /** | |
| * Get the time (in seconds) when the profiler started running. | |
| * | |
| * @return bool|float | |
| */ | |
| public function getStartedMicrotime() | |
| { | |
| if(null === $this->_startedMicrotime) { | |
| return false; | |
| } | |
| return $this->_startedMicrotime; | |
| } | |
| } | |