summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--includes/database/select.inc9
-rw-r--r--modules/simpletest/tests/database_test.test28
2 files changed, 31 insertions, 6 deletions
diff --git a/includes/database/select.inc b/includes/database/select.inc
index 84a01f294..3b9643b1e 100644
--- a/includes/database/select.inc
+++ b/includes/database/select.inc
@@ -1085,10 +1085,6 @@ class SelectQuery extends Query implements SelectQueryInterface {
}
$args = $this->getArguments();
-
- if (!empty($this->range)) {
- return $this->connection->queryRange((string)$this, $this->range['start'], $this->range['length'], $args, $this->queryOptions);
- }
return $this->connection->query((string)$this, $args, $this->queryOptions);
}
@@ -1358,7 +1354,10 @@ class SelectQuery extends Query implements SelectQueryInterface {
$query .= implode(', ', $fields);
}
- // RANGE is database specific, so we can't do it here.
+ // RANGE
+ if (!empty($this->range)) {
+ $query .= "\nLIMIT " . $this->range['length'] . " OFFSET " . $this->range['start'];
+ }
// UNION is a little odd, as the select queries to combine are passed into
// this query, but syntactically they all end up on the same level.
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index bcba352d5..cf9217ebb 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -1532,7 +1532,33 @@ class DatabaseSelectSubqueryTestCase extends DatabaseTestCase {
}
/**
- * Test that we can use a subquery in a FROM clause.
+ * Test that we can use a subquery in a FROM clause with a limit.
+ */
+ function testFromSubquerySelectWithLimit() {
+ // Create a subquery, which is just a normal query object.
+ $subquery = db_select('test_task', 'tt');
+ $subquery->addField('tt', 'pid', 'pid');
+ $subquery->addField('tt', 'task', 'task');
+ $subquery->orderBy('priority', 'DESC');
+ $subquery->range(0, 1);
+
+ // Create another query that joins against the virtual table resulting
+ // from the subquery.
+ $select = db_select($subquery, 'tt2');
+ $select->join('test', 't', 't.id=tt2.pid');
+ $select->addField('t', 'name');
+
+ // The resulting query should be equivalent to:
+ // SELECT t.name
+ // FROM (SELECT tt.pid AS pid, tt.task AS task FROM test_task tt ORDER BY priority DESC LIMIT 1 OFFSET 0) tt
+ // INNER JOIN test t ON t.id=tt.pid
+ $people = $select->execute()->fetchCol();
+
+ $this->assertEqual(count($people), 1, t('Returned the correct number of rows.'));
+ }
+
+ /**
+ * Test that we can use a subquery in a WHERE clause.
*/
function testConditionSubquerySelect() {
// Create a subquery, which is just a normal query object.