From dcb47ed24d54665f87ce61bb1f8dc9761a9f219b Mon Sep 17 00:00:00 2001 From: Angie Byron Date: Wed, 17 Feb 2010 05:24:53 +0000 Subject: #706248 by bellHead and Damien Tournoud: Fixed field_sql_storage_field_storage_query() with 'count' option breaks on PostgreSQL and SQLite. (with tests) --- .../modules/field_sql_storage/field_sql_storage.module | 8 ++++++-- modules/simpletest/tests/database_test.test | 13 +++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'modules') diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.module b/modules/field/modules/field_sql_storage/field_sql_storage.module index b0d0ed4c4..8229c523f 100644 --- a/modules/field/modules/field_sql_storage/field_sql_storage.module +++ b/modules/field/modules/field_sql_storage/field_sql_storage.module @@ -539,8 +539,12 @@ function field_sql_storage_field_storage_query($field_id, $conditions, $options) // For a count query, return the count now. if ($options['count']) { - $query->addExpression('COUNT(DISTINCT e.type,t.entity_id,t.revision_id)'); - return $query->execute()->fetchField(); + return $query + ->fields('t', array('etid', 'entity_id', 'revision_id')) + ->distinct() + ->countQuery() + ->execute() + ->fetchField(); } // For a data query, add fields. diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test index 19ecbe6e9..cf569f7cc 100644 --- a/modules/simpletest/tests/database_test.test +++ b/modules/simpletest/tests/database_test.test @@ -1908,6 +1908,19 @@ class DatabaseSelectComplexTestCase extends DatabaseTestCase { $this->assertEqual($count, 4, t('Counted the correct number of records.')); } + /** + * Test that we can generate a count query from a query with distinct. + */ + function testCountQueryDistinct() { + $query = db_select('test_task'); + $task_field = $query->addField('test_task', 'task'); + $query->distinct(); + + $count = $query->countQuery()->execute()->fetchField(); + + $this->assertEqual($count, 6, t('Counted the correct number of records.')); + } + /** * Confirm that we can properly nest conditional clauses. */ -- cgit v1.2.3