<?php /** * 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 [email protected] so we can send you a copy immediately. * * @category Zend * @package Zend_Db * @subpackage Profiler * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id$ */ /** * @category Zend * @package Zend_Db * @subpackage Profiler * @copyright Copyright (c) 2005-2014 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; } }