Check method existence before calling.

Datasource does not implemente calculate() or
expression().  Only call them if they exist.

Fixes #2535
This commit is contained in:
mark_story 2012-02-05 12:54:20 -05:00
parent f3b990bf0f
commit 4bb4040851

View file

@ -2589,6 +2589,10 @@ class Model extends Object {
protected function _findCount($state, $query, $results = array()) {
if ($state === 'before') {
$db = $this->getDataSource();
$query['order'] = false;
if (!method_exists($db, 'calculate') || !method_exists($db, 'expression')) {
return $query;
}
if (empty($query['fields'])) {
$query['fields'] = $db->calculate($this, 'count');
} elseif (is_string($query['fields']) && !preg_match('/count/i', $query['fields'])) {
@ -2596,7 +2600,6 @@ class Model extends Object {
$db->expression($query['fields']), 'count'
));
}
$query['order'] = false;
return $query;
} elseif ($state === 'after') {
foreach (array(0, $this->alias) as $key) {