Source for file Event.php

Documentation is available at Event.php

  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.com>.
  20.  */
  21. /**
  22.  * Doctrine_Event
  23.  *
  24.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  25.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  26.  * @package     Doctrine
  27.  * @category    Object Relational Mapping
  28.  * @link        www.phpdoctrine.com
  29.  * @since       1.0
  30.  * @version     $Revision$
  31.  */
  32. {
  33.     /**
  34.      * CONNECTION EVENT CODES
  35.      */
  36.     const CONN_QUERY         1;
  37.     const CONN_EXEC          2;
  38.     const CONN_PREPARE       3;
  39.     const CONN_CONNECT       4;
  40.     const CONN_CLOSE         5;
  41.     const CONN_ERROR         6;
  42.  
  43.     const STMT_EXECUTE       10;
  44.     const STMT_FETCH         11;
  45.     const STMT_FETCHALL      12;
  46.  
  47.     const TX_BEGIN           31;
  48.     const TX_COMMIT          32;
  49.     const TX_ROLLBACK        33;
  50.     const SAVEPOINT_CREATE   34;
  51.     const SAVEPOINT_ROLLBACK 35;
  52.     const SAVEPOINT_COMMIT   36;
  53.  
  54.     /*
  55.      * RECORD EVENT CODES
  56.      */
  57.     const RECORD_DELETE      21;
  58.     const RECORD_SAVE        22;
  59.     const RECORD_UPDATE      23;
  60.     const RECORD_INSERT      24;
  61.     const RECORD_SERIALIZE   25;
  62.     const RECORD_UNSERIALIZE 26;
  63.     /**
  64.      * @var mixed $_invoker             the handler which invoked this event
  65.      */
  66.     protected $_invoker;
  67.     /**
  68.      * @var string $_query              the sql query associated with this event (if any)
  69.      */
  70.     protected $_query;
  71.     /**
  72.      * @var string $_params             the parameters associated with the query (if any)
  73.      */
  74.     protected $_params;
  75.     /**
  76.      * @see Doctrine_Event constants
  77.      * @var integer $_code              the event code
  78.      */
  79.     protected $_code;
  80.     /**
  81.      * @var integer $_startedMicrotime  the time point in which this event was started
  82.      */
  83.     protected $_startedMicrotime;
  84.     /**
  85.      * @var integer $_endedMicrotime    the time point in which this event was ended
  86.      */
  87.     protected $_endedMicrotime;
  88.     /**
  89.      * @var array $_options             an array of options
  90.      */
  91.     protected $_options = array();
  92.     /**
  93.      * constructor
  94.      *
  95.      * @param Doctrine_Connection|Doctrine_Connection_Statement|
  96.               Doctrine_Connection_UnitOfWork|Doctrine_Transaction $invoker   the handler which invoked this event
  97.      * @param integer $code                                                  the event code
  98.      * @param string $query                                                  the sql query associated with this event (if any)
  99.      */
  100.     public function __construct($invoker$code$query null$params array())
  101.     {
  102.         $this->_invoker = $invoker;
  103.         $this->_code    = $code;
  104.         $this->_query   = $query;
  105.         $this->_params  = $params;
  106.     }
  107.     /**
  108.      * getQuery
  109.      *
  110.      * @return string       returns the query associated with this event (if any)
  111.      */
  112.     public function getQuery()
  113.     {
  114.         return $this->_query;
  115.     }
  116.     /**
  117.      * getName
  118.      * returns the name of this event
  119.      *
  120.      * @return string       the name of this event
  121.      */
  122.     public function getName(
  123.     {
  124.         switch ($this->_code{
  125.             case self::CONN_QUERY:
  126.                 return 'query';
  127.             case self::CONN_EXEC:
  128.                 return 'exec';
  129.             case self::CONN_PREPARE:
  130.                 return 'prepare';
  131.             case self::CONN_CONNECT:
  132.                 return 'connect';
  133.             case self::CONN_CLOSE:
  134.                 return 'close';
  135.             case self::CONN_ERROR:
  136.                 return 'error';
  137.  
  138.             case self::STMT_EXECUTE:
  139.                 return 'execute';
  140.             case self::STMT_FETCH:
  141.                 return 'fetch';
  142.             case self::STMT_FETCHALL:
  143.                 return 'fetch all';
  144.             
  145.             case self::TX_BEGIN:
  146.                 return 'begin';
  147.             case self::TX_COMMIT:
  148.                 return 'commit';
  149.             case self::TX_ROLLBACK:
  150.                 return 'rollback';
  151.  
  152.             case self::SAVEPOINT_CREATE:
  153.                 return 'create savepoint';
  154.             case self::SAVEPOINT_ROLLBACK:
  155.                 return 'rollback savepoint';
  156.             case self::SAVEPOINT_COMMIT:
  157.                 return 'commit Ssavepoint';
  158.  
  159.             case self::RECORD_DELETE:
  160.                 return 'delete record';
  161.             case self::RECORD_SAVE:
  162.                 return 'save record';
  163.             case self::RECORD_UPDATE:
  164.                 return 'update record';
  165.             case self::RECORD_INSERT:
  166.                 return 'insert record';
  167.             case self::RECORD_SERIALIZE:
  168.                 return 'serialize record';
  169.             case self::RECORD_UNSERIALIZE:
  170.                 return 'unserialize record';
  171.         }
  172.     }
  173.     /**
  174.      * getCode
  175.      *
  176.      * @return integer      returns the code associated with this event
  177.      */
  178.     public function getCode()
  179.     {
  180.         return $this->_code;
  181.     }
  182.     /**
  183.      * getOption
  184.      * returns the value of an option
  185.      *
  186.      * @param string $option    the name of the option
  187.      * @return mixed 
  188.      */
  189.     public function __get($option)
  190.     {
  191.         if isset($this->_options[$option])) {
  192.             return null;
  193.         }
  194.         
  195.         return $this->_options[$option];
  196.     }
  197.     /**
  198.      * skipOperation
  199.      * skips the next operation
  200.      * an alias for __set('skipOperation', true)
  201.      *
  202.      * @return Doctrine_Event   this object
  203.      */
  204.     public function skipOperation()
  205.     {
  206.         $this->_options['skipOperation'true;
  207.     
  208.         return $this;
  209.     }
  210.     /**
  211.      * setOption
  212.      * sets the value of an option
  213.      *
  214.      * @param string $option    the name of the option
  215.      * @param mixed $value      the value of the given option
  216.      * @return Doctrine_Event   this object
  217.      */
  218.     public function __set($option$value)
  219.     {
  220.         $this->_options[$option$value;
  221.  
  222.         return $this;
  223.     }
  224.     /**
  225.      * start
  226.      * starts the internal timer of this event
  227.      *
  228.      * @return Doctrine_Event   this object
  229.      */
  230.     public function start()
  231.     {
  232.         $this->_startedMicrotime = microtime(true);
  233.     }
  234.     /**
  235.      * hasEnded
  236.      * whether or not this event has ended
  237.      *
  238.      * @return boolean 
  239.      */
  240.     public function hasEnded()
  241.     {
  242.         return ($this->_endedMicrotime != null);
  243.     }
  244.     /**
  245.      * end
  246.      * ends the internal timer of this event
  247.      *
  248.      * @return Doctrine_Event   this object
  249.      */
  250.     public function end()
  251.     {
  252.         $this->_endedMicrotime = microtime(true);
  253.         
  254.         return $this;
  255.     }
  256.     /**
  257.      * getInvoker
  258.      * returns the handler that invoked this event
  259.      *
  260.      * @return Doctrine_Connection|Doctrine_Connection_Statement|
  261.      *          Doctrine_Connection_UnitOfWork|Doctrine_Transaction   the handler that invoked this event
  262.      */
  263.     public function getInvoker()
  264.     {
  265.         return $this->_invoker;
  266.     }
  267.     /**
  268.      * getParams
  269.      * returns the parameters of the query
  270.      *
  271.      * @return array   parameters of the query
  272.      */
  273.     public function getParams()
  274.     {
  275.         return $this->_params;
  276.     }
  277.     /**
  278.      * Get the elapsed time (in microseconds) that the event ran.  If the event has
  279.      * not yet ended, return false.
  280.      *
  281.      * @return mixed 
  282.      */
  283.     public function getElapsedSecs()
  284.     {
  285.         if (is_null($this->_endedMicrotime)) {
  286.             return false;
  287.         }
  288.         return ($this->_endedMicrotime - $this->_startedMicrotime);
  289.     }
  290. }