Source for file Expression.php

Documentation is available at Expression.php

  1. <?php
  2. /*
  3.  *  $Id: Expression.php 2283 2007-08-28 19:51:06Z jackbravo $
  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. Doctrine::autoload('Doctrine_Connection_Module');
  22. /**
  23.  * Doctrine_Expression
  24.  *
  25.  * @package     Doctrine
  26.  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
  27.  * @category    Object Relational Mapping
  28.  * @link        www.phpdoctrine.com
  29.  * @since       1.0
  30.  * @version     $Revision: 2283 $
  31.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  32.  */
  33. {
  34.     protected $_expression;
  35.     
  36.     protected $_conn;
  37.  
  38.     public function __construct($expr$conn null)
  39.     {
  40.         $this->setExpression($expr);
  41.         
  42.         if ($conn !== null{
  43.             $this->_conn = $conn;
  44.         }
  45.     }
  46.  
  47.     public function getConnection()
  48.     {
  49.         if isset($this->_conn)) {
  50.             return Doctrine_Manager::connection();
  51.         }
  52.  
  53.         return $this->_conn;
  54.     }
  55.  
  56.     public function setExpression($clause)
  57.     {
  58.         $this->_expression = $this->parseClause($clause);
  59.     }
  60.  
  61.     public function parseExpression($expr)
  62.     {
  63.         $pos  strpos($expr'(');
  64.         if ($pos === false{
  65.             return $expr;
  66.         }
  67.  
  68.         // get the name of the function
  69.         $name   substr($expr0$pos);
  70.         $argStr substr($expr($pos 1)-1);
  71.  
  72.         // parse args
  73.         foreach (Doctrine_Tokenizer::bracketExplode($argStr','as $arg{
  74.            $args[$this->parseClause($arg);
  75.         }
  76.  
  77.         return call_user_func_array(array($this->getConnection()->expression$name)$args);
  78.     }
  79.  
  80.     public function parseClause($clause)
  81.     {
  82.         $e Doctrine_Tokenizer::bracketExplode($clause' ');
  83.  
  84.         foreach ($e as $k => $expr{
  85.             $e[$k$this->parseExpression($expr);
  86.         }
  87.         
  88.         return implode(' '$e);
  89.     }
  90.  
  91.     public function getSql()
  92.     {
  93.  
  94.         return $this->_expression;
  95.     }
  96.  
  97.     public function __toString()
  98.     {
  99.         return $this->getSql();
  100.     }
  101. }