# Coverage for Doctrine_Event

Back to coverage report

1 | <?php
2 | /*
3 | * $Id$
4 | *
5 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16 | *
17 | * This software consists of voluntary contributions made by many individuals
18 | * and is licensed under the LGPL. For more information, see
19 | * <http://www.phpdoctrine.org>.
20 | */
21 |
22 | /**
23 | * Doctrine_Event
24 | *
25 | * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
26 | * @license http://www.opensource.org/licenses/lgpl-license.php LGPL
27 | * @package Doctrine
28 | * @subpackage Event
29 | * @link www.phpdoctrine.org
30 | * @since 1.0
31 | * @version $Revision$
32 | */
33 | class Doctrine_Event
34 | {
35 | /**
36 | * CONNECTION EVENT CODES
37 | */
38 | const CONN_QUERY = 1;
39 | const CONN_EXEC = 2;
40 | const CONN_PREPARE = 3;
41 | const CONN_CONNECT = 4;
42 | const CONN_CLOSE = 5;
43 | const CONN_ERROR = 6;
44 |
45 | const STMT_EXECUTE = 10;
46 | const STMT_FETCH = 11;
47 | const STMT_FETCHALL = 12;
48 |
49 | const TX_BEGIN = 31;
50 | const TX_COMMIT = 32;
51 | const TX_ROLLBACK = 33;
52 | const SAVEPOINT_CREATE = 34;
53 | const SAVEPOINT_ROLLBACK = 35;
54 | const SAVEPOINT_COMMIT = 36;
55 |
56 | const HYDRATE = 40;
57 |
58 | /*
59 | * RECORD EVENT CODES
60 | */
61 | const RECORD_DELETE = 21;
62 | const RECORD_SAVE = 22;
63 | const RECORD_UPDATE = 23;
64 | const RECORD_INSERT = 24;
65 | const RECORD_SERIALIZE = 25;
66 | const RECORD_UNSERIALIZE = 26;
67 |
68 | /**
69 | * @var mixed $_invoker the handler which invoked this event
70 | */
71 | protected $_invoker;
72 |
73 | /**
74 | * @var string $_query the sql query associated with this event (if any)
75 | */
76 | protected $_query;
77 |
78 | /**
79 | * @var string $_params the parameters associated with the query (if any)
80 | */
81 | protected $_params;
82 |
83 | /**
84 | * @see Doctrine_Event constants
85 | * @var integer $_code the event code
86 | */
87 | protected $_code;
88 |
89 | /**
90 | * @var integer $_startedMicrotime the time point in which this event was started
91 | */
92 | protected $_startedMicrotime;
93 |
94 | /**
95 | * @var integer $_endedMicrotime the time point in which this event was ended
96 | */
97 | protected $_endedMicrotime;
98 |
99 | /**
100 | * @var array $_options an array of options
101 | */
102 | protected $_options = array();
103 |
104 | /**
105 | * constructor
106 | *
107 | * @param Doctrine_Connection|Doctrine_Connection_Statement|
108 | Doctrine_Connection_UnitOfWork|Doctrine_Transaction $invoker the handler which invoked this event
109 | * @param integer $code the event code
110 | * @param string $query the sql query associated with this event (if any)
111 | */
112 | public function __construct($invoker, $code, $query = null, $params = array())
113 | {
114 | $this->_invoker = $invoker;
115 | $this->_code = $code;
116 | $this->_query = $query;
117 | $this->_params = $params;
118 | }
119 |
120 | /**
121 | * getQuery
122 | *
123 | * @return string returns the query associated with this event (if any)
124 | */
125 | public function getQuery()
126 | {
127 | return $this->_query;
128 | }
129 |
130 | /**
131 | * getName
132 | * returns the name of this event
133 | *
134 | * @return string the name of this event
135 | */
136 | public function getName()
137 | {
138 | switch ($this->_code) {
139 | case self::CONN_QUERY:
140 | return 'query';
141 | case self::CONN_EXEC:
142 | return 'exec';
143 | case self::CONN_PREPARE:
144 | return 'prepare';
145 | case self::CONN_CONNECT:
146 | return 'connect';
147 | case self::CONN_CLOSE:
148 | return 'close';
149 | case self::CONN_ERROR:
150 | return 'error';
151 |
152 | case self::STMT_EXECUTE:
153 | return 'execute';
154 | case self::STMT_FETCH:
155 | return 'fetch';
156 | case self::STMT_FETCHALL:
157 | return 'fetch all';
158 |
159 | case self::TX_BEGIN:
160 | return 'begin';
161 | case self::TX_COMMIT:
162 | return 'commit';
163 | case self::TX_ROLLBACK:
164 | return 'rollback';
165 |
166 | case self::SAVEPOINT_CREATE:
167 | return 'create savepoint';
168 | case self::SAVEPOINT_ROLLBACK:
169 | return 'rollback savepoint';
170 | case self::SAVEPOINT_COMMIT:
171 | return 'commit savepoint';
172 |
173 | case self::RECORD_DELETE:
174 | return 'delete record';
175 | case self::RECORD_SAVE:
176 | return 'save record';
177 | case self::RECORD_UPDATE:
178 | return 'update record';
179 | case self::RECORD_INSERT:
180 | return 'insert record';
181 | case self::RECORD_SERIALIZE:
182 | return 'serialize record';
183 | case self::RECORD_UNSERIALIZE:
184 | return 'unserialize record';
185 | }
186 | }
187 |
188 | /**
189 | * getCode
190 | *
191 | * @return integer returns the code associated with this event
192 | */
193 | public function getCode()
194 | {
195 | return $this->_code;
196 | }
197 |
198 | /**
199 | * getOption
200 | * returns the value of an option
201 | *
202 | * @param string $option the name of the option
203 | * @return mixed
204 | */
205 | public function __get($option)
206 | {
207 | if ( ! isset($this->_options[$option])) {
208 | return null;
209 | }
210 |
211 | return $this->_options[$option];
212 | }
213 |
214 | /**
215 | * skipOperation
216 | * skips the next operation
217 | * an alias for __set('skipOperation', true)
218 | *
219 | * @return Doctrine_Event this object
220 | */
221 | public function skipOperation()
222 | {
223 | $this->_options['skipOperation'] = true;
224 |
225 | return $this;
226 | }
227 |
228 | /**
229 | * setOption
230 | * sets the value of an option
231 | *
232 | * @param string $option the name of the option
233 | * @param mixed $value the value of the given option
234 | * @return Doctrine_Event this object
235 | */
236 | public function __set($option, $value)
237 | {
238 | $this->_options[$option] = $value;
239 |
240 | return $this;
241 | }
242 |
243 | /**
244 | * setOption
245 | * sets the value of an option by reference
246 | *
247 | * @param string $option the name of the option
248 | * @param mixed $value the value of the given option
249 | * @return Doctrine_Event this object
250 | */
251 | public function set($option, &$value)
252 | {
253 | $this->_options[$option] =& $value;
254 |
255 | return $this;
256 | }
257 |
258 | /**
259 | * start
260 | * starts the internal timer of this event
261 | *
262 | * @return Doctrine_Event this object
263 | */
264 | public function start()
265 | {
266 | $this->_startedMicrotime = microtime(true);
267 | }
268 |
269 | /**
270 | * hasEnded
271 | * whether or not this event has ended
272 | *
273 | * @return boolean
274 | */
275 | public function hasEnded()
276 | {
277 | return ($this->_endedMicrotime != null);
278 | }
279 |
280 | /**
281 | * end
282 | * ends the internal timer of this event
283 | *
284 | * @return Doctrine_Event this object
285 | */
286 | public function end()
287 | {
288 | $this->_endedMicrotime = microtime(true);
289 |
290 | return $this;
291 | }
292 |
293 | /**
294 | * getInvoker
295 | * returns the handler that invoked this event
296 | *
297 | * @return Doctrine_Connection|Doctrine_Connection_Statement|
298 | * Doctrine_Connection_UnitOfWork|Doctrine_Transaction the handler that invoked this event
299 | */
300 | public function getInvoker()
301 | {
302 | return $this->_invoker;
303 | }
304 |
305 | /**
306 | * getParams
307 | * returns the parameters of the query
308 | *
309 | * @return array parameters of the query
310 | */
311 | public function getParams()
312 | {
313 | return $this->_params;
314 | }
315 |
316 | /**
317 | * Get the elapsed time (in microseconds) that the event ran. If the event has
318 | * not yet ended, return false.
319 | *
320 | * @return mixed
321 | */
322 | public function getElapsedSecs()
323 | {
324 | if (is_null($this->_endedMicrotime)) {
325 | return false;
326 | }
327 | return ($this->_endedMicrotime - $this->_startedMicrotime);
328 | }
329 | }