Source for file Condition.php

Documentation is available at Condition.php

  1. <?php
  2. /*
  3.  *  $Id: Condition.php 1479 2007-05-24 19:47:28Z zYne $
  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_Query_Part');
  22. /**
  23.  * Doctrine_Query_Condition
  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: 1479 $
  31.  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
  32.  */
  33. {
  34.     /**
  35.      * DQL CONDITION PARSER
  36.      * parses the join condition/where/having part of the query string
  37.      *
  38.      * @param string $str 
  39.      * @return string 
  40.      */
  41.     public function parse($str)
  42.     {
  43.         $tmp trim($str);
  44.  
  45.         $parts Doctrine_Tokenizer::bracketExplode($strarray(' \&\& '' AND ')'('')');
  46.  
  47.         if (count($parts1{
  48.             $ret array();
  49.             foreach ($parts as $part{
  50.                 $part Doctrine_Tokenizer::bracketTrim($part'('')');
  51.                 $ret[$this->parse($part);
  52.             }
  53.             $r implode(' AND '$ret);
  54.         else {
  55.  
  56.             $parts Doctrine_Tokenizer::bracketExplode($strarray(' \|\| '' OR ')'('')');
  57.             if (count($parts1{
  58.                 $ret array();
  59.                 foreach ($parts as $part{
  60.                     $part Doctrine_Tokenizer::bracketTrim($part'('')');
  61.                     $ret[$this->parse($part);
  62.                 }
  63.                 $r implode(' OR '$ret);
  64.             else {
  65.                 if (substr($parts[0],0,1== '(' && substr($parts[0]-1== ')'{
  66.                     return $this->parse(substr($parts[0]1-1));
  67.                 else {
  68.                     return $this->load($parts[0]);
  69.                 }
  70.             }
  71.         }
  72.  
  73.         return '(' $r ')';
  74.     }
  75.  
  76.  
  77.  
  78.     /**
  79.      * parses a literal value and returns the parsed value
  80.      *
  81.      * boolean literals are parsed to integers
  82.      * components are parsed to associated table aliases
  83.      *
  84.      * @param string $value         literal value to be parsed
  85.      * @return string 
  86.      */
  87.     public function parseLiteralValue($value)
  88.     {
  89.         // check that value isn't a string
  90.         if (strpos($value'\''=== false{
  91.             // parse booleans
  92.             $value $this->query->getConnection()
  93.                      ->dataDict->parseBoolean($value);
  94.  
  95.             $a explode('.'$value);
  96.  
  97.             if (count($a1{
  98.             // either a float or a component..
  99.  
  100.                 if is_numeric($a[0])) {
  101.                     // a component found
  102.                     $value $this->query->getTableAlias($a[0])'.' $a[1];
  103.                 }
  104.             }
  105.         else {
  106.             // string literal found
  107.         }
  108.  
  109.         return $value;
  110.     }
  111. }