Issue #2159347 by david_garcia, claudiu.cristea: Aggregation not working simple test case
parent
6ee87bc5ab
commit
23b70dfb16
|
@ -1232,6 +1232,10 @@ class Sql extends QueryPluginBase {
|
||||||
if (count($this->having)) {
|
if (count($this->having)) {
|
||||||
$this->hasAggregate = TRUE;
|
$this->hasAggregate = TRUE;
|
||||||
}
|
}
|
||||||
|
elseif ($this->hasAggregate == FALSE) {
|
||||||
|
// Allow 'GROUP BY' even no aggregation function has been set.
|
||||||
|
$this->hasAggregate = $this->view->display_handler->getOption('group_by');
|
||||||
|
}
|
||||||
$groupby = array();
|
$groupby = array();
|
||||||
if ($this->hasAggregate && (!empty($this->groupby) || !empty($non_aggregates))) {
|
if ($this->hasAggregate && (!empty($this->groupby) || !empty($non_aggregates))) {
|
||||||
$groupby = array_unique(array_merge($this->groupby, $non_aggregates));
|
$groupby = array_unique(array_merge($this->groupby, $non_aggregates));
|
||||||
|
|
|
@ -74,8 +74,9 @@ class QueryGroupByTest extends ViewUnitTestBase {
|
||||||
/**
|
/**
|
||||||
* Provides a test helper which runs a view with some aggregation function.
|
* Provides a test helper which runs a view with some aggregation function.
|
||||||
*
|
*
|
||||||
* @param string $aggregation_function
|
* @param string|null $aggregation_function
|
||||||
* Which aggregation function should be used, for example sum or count.
|
* Which aggregation function should be used, for example sum or count. If
|
||||||
|
* NULL is passed the aggregation will be tested with no function.
|
||||||
* @param array $values
|
* @param array $values
|
||||||
* The expected views result.
|
* The expected views result.
|
||||||
*/
|
*/
|
||||||
|
@ -84,7 +85,16 @@ class QueryGroupByTest extends ViewUnitTestBase {
|
||||||
|
|
||||||
$view = Views::getView('test_group_by_count');
|
$view = Views::getView('test_group_by_count');
|
||||||
$view->setDisplay();
|
$view->setDisplay();
|
||||||
|
// There is no need for a function in order to have aggregation.
|
||||||
|
if (empty($aggregation_function)) {
|
||||||
|
// The test table has 2 fields ('id' and 'name'). We'll remove 'id'
|
||||||
|
// because it's unique and will test aggregation on 'name'.
|
||||||
|
unset($view->displayHandlers->get('default')->options['fields']['id']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
$view->displayHandlers->get('default')->options['fields']['id']['group_type'] = $aggregation_function;
|
$view->displayHandlers->get('default')->options['fields']['id']['group_type'] = $aggregation_function;
|
||||||
|
}
|
||||||
|
|
||||||
$this->executeView($view);
|
$this->executeView($view);
|
||||||
|
|
||||||
$this->assertEqual(count($view->result), 2, 'Make sure the count of items is right.');
|
$this->assertEqual(count($view->result), 2, 'Make sure the count of items is right.');
|
||||||
|
@ -101,7 +111,7 @@ class QueryGroupByTest extends ViewUnitTestBase {
|
||||||
* Helper method that creates some test entities.
|
* Helper method that creates some test entities.
|
||||||
*/
|
*/
|
||||||
protected function setupTestEntities() {
|
protected function setupTestEntities() {
|
||||||
// Create 4 entities with name1 and 3 nodes with name2.
|
// Create 4 entities with name1 and 3 entities with name2.
|
||||||
$entity_1 = array(
|
$entity_1 = array(
|
||||||
'name' => 'name1',
|
'name' => 'name1',
|
||||||
);
|
);
|
||||||
|
@ -154,6 +164,13 @@ class QueryGroupByTest extends ViewUnitTestBase {
|
||||||
$this->groupByTestHelper('max', array(4, 7));
|
$this->groupByTestHelper('max', array(4, 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests aggregation with no specific function.
|
||||||
|
*/
|
||||||
|
public function testGroupByNone() {
|
||||||
|
$this->groupByTestHelper(NULL, array(1, 5));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests groupby with filters.
|
* Tests groupby with filters.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue