1
0
mirror of synced 2024-12-14 23:26:04 +03:00
doctrine2/lib/Doctrine/Query/Condition.php

49 lines
1.5 KiB
PHP
Raw Normal View History

2006-06-30 03:04:39 +04:00
<?php
Doctrine::autoload("Doctrine_Query_Part");
2006-06-30 03:04:39 +04:00
2006-12-29 17:40:47 +03:00
abstract class Doctrine_Query_Condition extends Doctrine_Query_Part
{
2006-06-30 03:04:39 +04:00
/**
* DQL CONDITION PARSER
* parses the where/having part of the query string
*
*
* @param string $str
* @return string
*/
2006-12-29 17:40:47 +03:00
final public function parse($str)
{
2006-06-30 03:04:39 +04:00
$tmp = trim($str);
2006-12-24 01:45:36 +03:00
$parts = Doctrine_Query::bracketExplode($str, array(' \&\& ', ' AND '), '(', ')');
2006-12-29 17:01:31 +03:00
if (count($parts) > 1) {
2006-06-30 03:04:39 +04:00
$ret = array();
2006-12-29 17:01:31 +03:00
foreach ($parts as $part) {
2006-12-24 01:45:36 +03:00
$part = Doctrine_Query::bracketTrim($part, '(', ')');
$ret[] = $this->parse($part);
2006-06-30 03:04:39 +04:00
}
2006-12-24 01:45:36 +03:00
$r = implode(' AND ',$ret);
2006-06-30 03:04:39 +04:00
} else {
2006-12-24 01:45:36 +03:00
$parts = Doctrine_Query::bracketExplode($str, array(' \|\| ', ' OR '), '(', ')');
2006-12-29 17:01:31 +03:00
if (count($parts) > 1) {
2006-06-30 03:04:39 +04:00
$ret = array();
2006-12-29 17:01:31 +03:00
foreach ($parts as $part) {
2006-12-24 01:45:36 +03:00
$part = Doctrine_Query::bracketTrim($part, '(', ')');
2006-06-30 03:04:39 +04:00
$ret[] = $this->parse($part);
}
2006-12-24 01:45:36 +03:00
$r = implode(' OR ',$ret);
2006-06-30 03:04:39 +04:00
} else {
2006-12-29 17:01:31 +03:00
if (substr($parts[0],0,1) == '(' && substr($parts[0],-1) == ')') {
return $this->parse(substr($parts[0],1,-1));
2006-12-29 17:01:31 +03:00
} else {
return $this->load($parts[0]);
2006-12-29 17:01:31 +03:00
}
2006-06-30 03:04:39 +04:00
}
}
2006-12-24 01:45:36 +03:00
return '(' . $r . ')';
2006-06-30 03:04:39 +04:00
}
}