|
1 <?php |
|
2 /** |
|
3 * Zend Framework |
|
4 * |
|
5 * LICENSE |
|
6 * |
|
7 * This source file is subject to the new BSD license that is bundled |
|
8 * with this package in the file LICENSE.txt. |
|
9 * It is also available through the world-wide-web at this URL: |
|
10 * http://framework.zend.com/license/new-bsd |
|
11 * If you did not receive a copy of the license and are unable to |
|
12 * obtain it through the world-wide-web, please send an email |
|
13 * to license@zend.com so we can send you a copy immediately. |
|
14 * |
|
15 * @category Zend |
|
16 * @package Zend_Db |
|
17 * @subpackage Profiler |
|
18 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
|
19 * @license http://framework.zend.com/license/new-bsd New BSD License |
|
20 * @version $Id: Query.php 23382 2010-11-18 22:50:50Z bittarman $ |
|
21 */ |
|
22 |
|
23 |
|
24 /** |
|
25 * @category Zend |
|
26 * @package Zend_Db |
|
27 * @subpackage Profiler |
|
28 * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) |
|
29 * @license http://framework.zend.com/license/new-bsd New BSD License |
|
30 */ |
|
31 class Zend_Db_Profiler_Query |
|
32 { |
|
33 |
|
34 /** |
|
35 * SQL query string or user comment, set by $query argument in constructor. |
|
36 * |
|
37 * @var string |
|
38 */ |
|
39 protected $_query = ''; |
|
40 |
|
41 /** |
|
42 * One of the Zend_Db_Profiler constants for query type, set by $queryType argument in constructor. |
|
43 * |
|
44 * @var integer |
|
45 */ |
|
46 protected $_queryType = 0; |
|
47 |
|
48 /** |
|
49 * Unix timestamp with microseconds when instantiated. |
|
50 * |
|
51 * @var float |
|
52 */ |
|
53 protected $_startedMicrotime = null; |
|
54 |
|
55 /** |
|
56 * Unix timestamp with microseconds when self::queryEnd() was called. |
|
57 * |
|
58 * @var integer |
|
59 */ |
|
60 protected $_endedMicrotime = null; |
|
61 |
|
62 /** |
|
63 * @var array |
|
64 */ |
|
65 protected $_boundParams = array(); |
|
66 |
|
67 /** |
|
68 * @var array |
|
69 */ |
|
70 |
|
71 /** |
|
72 * Class constructor. A query is about to be started, save the query text ($query) and its |
|
73 * type (one of the Zend_Db_Profiler::* constants). |
|
74 * |
|
75 * @param string $query |
|
76 * @param integer $queryType |
|
77 * @return void |
|
78 */ |
|
79 public function __construct($query, $queryType) |
|
80 { |
|
81 $this->_query = $query; |
|
82 $this->_queryType = $queryType; |
|
83 // by default, and for backward-compatibility, start the click ticking |
|
84 $this->start(); |
|
85 } |
|
86 |
|
87 /** |
|
88 * Clone handler for the query object. |
|
89 * @return void |
|
90 */ |
|
91 public function __clone() |
|
92 { |
|
93 $this->_boundParams = array(); |
|
94 $this->_endedMicrotime = null; |
|
95 $this->start(); |
|
96 } |
|
97 |
|
98 /** |
|
99 * Starts the elapsed time click ticking. |
|
100 * This can be called subsequent to object creation, |
|
101 * to restart the clock. For instance, this is useful |
|
102 * right before executing a prepared query. |
|
103 * |
|
104 * @return void |
|
105 */ |
|
106 public function start() |
|
107 { |
|
108 $this->_startedMicrotime = microtime(true); |
|
109 } |
|
110 |
|
111 /** |
|
112 * Ends the query and records the time so that the elapsed time can be determined later. |
|
113 * |
|
114 * @return void |
|
115 */ |
|
116 public function end() |
|
117 { |
|
118 $this->_endedMicrotime = microtime(true); |
|
119 } |
|
120 |
|
121 /** |
|
122 * Returns true if and only if the query has ended. |
|
123 * |
|
124 * @return boolean |
|
125 */ |
|
126 public function hasEnded() |
|
127 { |
|
128 return $this->_endedMicrotime !== null; |
|
129 } |
|
130 |
|
131 /** |
|
132 * Get the original SQL text of the query. |
|
133 * |
|
134 * @return string |
|
135 */ |
|
136 public function getQuery() |
|
137 { |
|
138 return $this->_query; |
|
139 } |
|
140 |
|
141 /** |
|
142 * Get the type of this query (one of the Zend_Db_Profiler::* constants) |
|
143 * |
|
144 * @return integer |
|
145 */ |
|
146 public function getQueryType() |
|
147 { |
|
148 return $this->_queryType; |
|
149 } |
|
150 |
|
151 /** |
|
152 * @param string $param |
|
153 * @param mixed $variable |
|
154 * @return void |
|
155 */ |
|
156 public function bindParam($param, $variable) |
|
157 { |
|
158 $this->_boundParams[$param] = $variable; |
|
159 } |
|
160 |
|
161 /** |
|
162 * @param array $param |
|
163 * @return void |
|
164 */ |
|
165 public function bindParams(array $params) |
|
166 { |
|
167 if (array_key_exists(0, $params)) { |
|
168 array_unshift($params, null); |
|
169 unset($params[0]); |
|
170 } |
|
171 foreach ($params as $param => $value) { |
|
172 $this->bindParam($param, $value); |
|
173 } |
|
174 } |
|
175 |
|
176 /** |
|
177 * @return array |
|
178 */ |
|
179 public function getQueryParams() |
|
180 { |
|
181 return $this->_boundParams; |
|
182 } |
|
183 |
|
184 /** |
|
185 * Get the elapsed time (in seconds) that the query ran. |
|
186 * If the query has not yet ended, false is returned. |
|
187 * |
|
188 * @return float|false |
|
189 */ |
|
190 public function getElapsedSecs() |
|
191 { |
|
192 if (null === $this->_endedMicrotime) { |
|
193 return false; |
|
194 } |
|
195 |
|
196 return $this->_endedMicrotime - $this->_startedMicrotime; |
|
197 } |
|
198 |
|
199 /** |
|
200 * Get the time (in seconds) when the profiler started running. |
|
201 * |
|
202 * @return bool|float |
|
203 */ |
|
204 public function getStartedMicrotime() |
|
205 { |
|
206 if(null === $this->_startedMicrotime) { |
|
207 return false; |
|
208 } |
|
209 |
|
210 return $this->_startedMicrotime; |
|
211 } |
|
212 } |
|
213 |