[task/mssql-db-tests] sql_query_limit must return all results when total = 0

PHPBB3-9868
This commit is contained in:
Nils Adermann 2010-10-25 15:50:09 +02:00
parent 801f66b4a2
commit ee0993a8a6

View file

@ -347,7 +347,8 @@ class dbal_mssqlnative extends dbal
{ {
$this->query_result = false; $this->query_result = false;
if ($offset === false || $offset == 0) // total == 0 means all results - not zero results
if ($offset == 0 && $total !== 0)
{ {
if (strpos($query, "SELECT") === false) if (strpos($query, "SELECT") === false)
{ {
@ -358,13 +359,21 @@ class dbal_mssqlnative extends dbal
$query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP '.$total, $query); $query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP '.$total, $query);
} }
} }
else else if ($offset > 0)
{ {
$query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP(10000000) ', $query); $query = preg_replace('/SELECT(\s*DISTINCT)?/Dsi', 'SELECT$1 TOP(10000000) ', $query);
$query = 'SELECT * $query = 'SELECT *
FROM (SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3 FROM (SELECT sub2.*, ROW_NUMBER() OVER(ORDER BY sub2.line2) AS line3
FROM (SELECT 1 AS line2, sub1.* FROM (' . $query . ') AS sub1) as sub2) AS sub3 FROM (SELECT 1 AS line2, sub1.* FROM (' . $query . ') AS sub1) as sub2) AS sub3';
WHERE line3 BETWEEN ' . ($offset+1) . ' AND ' . ($offset + $total);
if ($total > 0)
{
$query .= ' WHERE line3 BETWEEN ' . ($offset+1) . ' AND ' . ($offset + $total);
}
else
{
$query .= ' WHERE line3 > ' . $offset;
}
} }
$result = $this->sql_query($query, $cache_ttl); $result = $this->sql_query($query, $cache_ttl);
@ -614,4 +623,4 @@ class dbal_mssqlnative extends dbal
} }
} }
?> ?>