. */ Doctrine::autoload('Doctrine_Query_Part'); /** * Doctrine_Query_Condition * * @package Doctrine * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @category Object Relational Mapping * @link www.phpdoctrine.com * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ abstract class Doctrine_Query_Condition extends Doctrine_Query_Part { /** * DQL CONDITION PARSER * parses the join condition/where/having part of the query string * * @param string $str * @return string */ final public function parse($str) { $tmp = trim($str); $parts = Doctrine_Query::bracketExplode($str, array(' \&\& ', ' AND '), '(', ')'); if (count($parts) > 1) { $ret = array(); foreach ($parts as $part) { $part = Doctrine_Query::bracketTrim($part, '(', ')'); $ret[] = $this->parse($part); } $r = implode(' AND ',$ret); } else { $parts = Doctrine_Query::bracketExplode($str, array(' \|\| ', ' OR '), '(', ')'); if (count($parts) > 1) { $ret = array(); foreach ($parts as $part) { $part = Doctrine_Query::bracketTrim($part, '(', ')'); $ret[] = $this->parse($part); } $r = implode(' OR ', $ret); } else { if (substr($parts[0],0,1) == '(' && substr($parts[0],-1) == ')') { return $this->parse(substr($parts[0],1,-1)); } else { return $this->load($parts[0]); } } } return '(' . $r . ')'; } }