1
0
mirror of synced 2024-12-13 22:56:04 +03:00
This commit is contained in:
zYne 2007-04-16 17:59:45 +00:00
parent ff1886754d
commit 647542d5ee
2 changed files with 26 additions and 17 deletions

View File

@ -661,4 +661,15 @@ class Doctrine_Expression extends Doctrine_Connection_Module
{
throw new Doctrine_Expression_Exception('method not implemented');
}
/**
* __call
*
* for all native RDBMS functions the function name itself is returned
*/
public function __call($m, $a)
{
if ($this->conn->getAttribute(Doctrine::ATTR_PORTABILITY) & Doctrine::PORTABILITY_EXPR) {
throw new Doctrine_Expression_Exception('Unknown expression ' . $m);
}
}
}

View File

@ -235,52 +235,50 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
$pos = strpos($func, '(');
$name = substr($func, 0, $pos);
if(method_exists($this->conn->expression, $name)) {
try {
$argStr = substr($func, ($pos + 1), -1);
$args = explode(',', $argStr);
$func = call_user_func_array(array($this->conn->expression, $name), $args);
if(substr($func, 0, 1) !== '(') {
$pos = strpos($func, '(');
$name = substr($func, 0, $pos);
} else {
$name = $func;
}
$e2 = explode(' ', $args[0]);
$distinct = '';
if(count($e2) > 1) {
if(strtoupper($e2[0]) == 'DISTINCT')
$distinct = 'DISTINCT ';
$args[0] = $e2[1];
}
$parts = explode('.', $args[0]);
$owner = $parts[0];
$alias = (isset($e[1])) ? $e[1] : $name;
$e3 = explode('.', $alias);
if(count($e3) > 1) {
$alias = $e3[1];
$owner = $e3[0];
}
// a function without parameters eg. RANDOM()
if ($owner === '') {
$owner = 0;
}
$this->pendingAggregates[$owner][] = array($name, $args, $distinct, $alias);
} else {
throw new Doctrine_Query_Exception('Unknown function '.$name);
} catch(Doctrine_Expression_Exception $e) {
throw new Doctrine_Query_Exception('Unknown function ' . $func . '.');
}
}
public function processPendingSubqueries()