summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/database/select.inc6
-rw-r--r--modules/simpletest/tests/database_test.test19
2 files changed, 22 insertions, 3 deletions
diff --git a/includes/database/select.inc b/includes/database/select.inc
index b0d0eb275..16091061b 100644
--- a/includes/database/select.inc
+++ b/includes/database/select.inc
@@ -1370,14 +1370,14 @@ class SelectQuery extends Query implements SelectQueryInterface {
// the GROUP BY clause need to be present in the query.
$fields =& $count->getFields();
foreach (array_keys($fields) as $field) {
- if (!empty($group_by[$field])) {
+ if (empty($group_by[$field])) {
unset($fields[$field]);
}
}
$expressions =& $count->getExpressions();
foreach (array_keys($expressions) as $field) {
- if (!empty($group_by[$field])) {
- unset($fields[$field]);
+ if (empty($group_by[$field])) {
+ unset($expressions[$field]);
}
}
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index 65d84c180..db74bd9e5 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -1989,6 +1989,25 @@ class DatabaseSelectComplexTestCase extends DatabaseTestCase {
$this->assertEqual($count, 4, t('Counted the correct number of records.'));
}
+
+ /**
+ * Test that countQuery properly removes fields and expressions.
+ */
+ function testCountQueryFieldRemovals() {
+ // countQuery should remove all fields and expressions, so this can be
+ // tested by adding a non-existant field and expression: if it ends
+ // up in the query, an error will be thrown. If not, it will return the
+ // number of records, which in this case happens to be 4 (there are four
+ // records in the {test} table).
+ $query = db_select('test');
+ $query->fields('test', array('fail'));
+ $this->assertEqual(4, $query->countQuery()->execute()->fetchField(), t('Count Query removed fields'));
+
+ $query = db_select('test');
+ $query->addExpression('fail');
+ $this->assertEqual(4, $query->countQuery()->execute()->fetchField(), t('Count Query removed expressions'));
+ }
+
/**
* Test that we can generate a count query from a query with distinct.
*/