From ee0993a8a6725bbacc341f50e37710b51df4ea5c Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Mon, 25 Oct 2010 15:50:09 +0200 Subject: [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(-) (limited to 'phpBB/includes/db/mssqlnative.php') 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 +?> -- cgit v1.2.1 From 76e8a9466ef3227337dd18faf9b623195af00364 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Mon, 25 Oct 2010 19:22:57 +0200 Subject: [task/mssql-db-tests] Remove MS SQL helper values from SELECT LIMIT results. PHPBB3-9868 --- phpBB/includes/db/mssqlnative.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db/mssqlnative.php') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 93a8f91613..1e0a8077e7 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -413,13 +413,18 @@ class dbal_mssqlnative extends dbal $row = @sqlsrv_fetch_array($query_id, SQLSRV_FETCH_ASSOC); - // I hope i am able to remove this later... hopefully only a PHP or MSSQL bug if ($row) { foreach ($row as $key => $value) { $row[$key] = ($value === ' ' || $value === NULL) ? '' : $value; } + + // remove helper values from LIMIT queries + if (isset($row['line2'])) + { + unset($row['line2'], $row['line3']); + } } return $row; } -- cgit v1.2.1