. */ /** * Doctrine_Db_Profiler_Query * * @author Konsta Vesterinen * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @package Doctrine * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ */ class Doctrine_Db_Profiler_Query { /** * @var string SQL query string or user comment, set by $query argument in constructor. */ protected $query =''; /** * @var integer One of the Zend_Db_Profiler constants for query type, set by $queryType argument in constructor. */ protected $queryType = 0; protected $prepareTime; /** * @var float|null Unix timestamp with microseconds when instantiated. */ protected $startedMicrotime; /** * Unix timestamp with microseconds when self::queryEnd() was called. * * @var null|integer */ protected $endedMicrotime; /** * 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 int $queryType */ public function __construct($query, $prepareTime = null) { $this->query = $query; if ($prepareTime !== null) { $this->prepareTime = $prepareTime; } else { $this->startedMicrotime = microtime(true); } } public function start() { $this->startedMicrotime = microtime(true); } /** * The query has ended. Record the time so that the elapsed time can be determined later. * * @return bool */ public function end() { $this->endedMicrotime = microtime(true); return true; } public function getPrepareTime() { return $this->prepareTime; } /** * Has this query ended? * * @return bool */ 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 int */ public function getQueryType() { return $this->queryType; } /** * Get the elapsed time (in seconds) that the query ran. If the query has * not yet ended, return false. * * @return mixed */ public function getElapsedSecs() { if (is_null($this->endedMicrotime) && ! $this->prepareTime) { return false; } return ($this->prepareTime + ($this->endedMicrotime - $this->startedMicrotime)); } }