Commit 8de2de02 authored by Dries's avatar Dries

- Patch #653926 by Damien Tournoud: fixed range of sub-queries not being honored.

parent 620a306e
......@@ -1085,10 +1085,6 @@ public function execute() {
}
$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 @@ public function __toString() {
$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.
......
......@@ -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.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment