From ee0993a8a6725bbacc341f50e37710b51df4ea5c Mon Sep 17 00:00:00 2001
From: Nils Adermann <naderman@naderman.de>
Date: Mon, 25 Oct 2010 15:50:09 +0200
Subject: [PATCH] [task/mssql-db-tests] sql_query_limit must return all results
 when total = 0

PHPBB3-9868
---
 phpBB/includes/db/mssqlnative.php | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php
index 44d5722e4f..93a8f91613 100644
--- a/phpBB/includes/db/mssqlnative.php
+++ b/phpBB/includes/db/mssqlnative.php
@@ -347,7 +347,8 @@ class dbal_mssqlnative extends dbal
 	{
 		$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)
 			{
@@ -358,13 +359,21 @@ class dbal_mssqlnative extends dbal
 				$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 = 'SELECT *
 					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
-					WHERE line3 BETWEEN ' . ($offset+1) . ' AND ' . ($offset + $total);
+					FROM (SELECT 1 AS line2, sub1.* FROM (' . $query . ') AS sub1) as sub2) AS sub3';
+
+			if ($total > 0)
+			{
+				$query .= ' WHERE line3 BETWEEN ' . ($offset+1) . ' AND ' . ($offset + $total);
+			}
+			else
+			{
+				$query .= ' WHERE line3 > ' . $offset;
+			}
 		}
 
 		$result = $this->sql_query($query, $cache_ttl);
@@ -614,4 +623,4 @@ class dbal_mssqlnative extends dbal
 	}
 }
 
-?>
\ No newline at end of file
+?>