Changeset 5325

Show
Ignore:
Timestamp:
12/30/08 16:10:26 (6 months ago)
Author:
guilhermeblanco
Message:

[1.0, 1.1] Fixes #1259. Fixed SELECT DISTINCT query with limit being applied.

Location:
branches
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • branches/1.0/lib/Doctrine/Connection/Mssql.php

    r5180 r5325  
    127127                $alias = trim(end(spliti(' as ', array_shift(explode(',', stristr($query,$order)))))); 
    128128            } 
    129      
    130             $query = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $query);     
     129 
     130            // Ticket #1259: Fix for limit-subquery in MSSQL 
     131            $selectRegExp = 'SELECT\s+'; 
     132            $selectReplace = 'SELECT '; 
     133 
     134            if (preg_match('/^SELECT(\s+)DISTINCT/i',  $query)) { 
     135                $selectRegExp .= 'DISTINCT\s+'; 
     136                $selectReplace .= 'DISTINCT '; 
     137            } 
     138 
     139            $query = preg_replace('/^'.$selectRegExp.'\s+/i', $selectReplace . 'TOP ' . ($count+$offset) . ' ', $query);     
    131140            $query = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $query . ') AS ' . $this->quoteIdentifier('inner_tbl'); 
    132141 
  • branches/1.1/lib/Doctrine/Connection/Mssql.php

    r5180 r5325  
    128128            } 
    129129     
    130             $query = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $query);     
     130            // Ticket #1259: Fix for limit-subquery in MSSQL 
     131            $selectRegExp = 'SELECT\s+'; 
     132            $selectReplace = 'SELECT '; 
     133 
     134            if (preg_match('/^SELECT(\s+)DISTINCT/i',  $query)) { 
     135                $selectRegExp .= 'DISTINCT\s+'; 
     136                $selectReplace .= 'DISTINCT '; 
     137            } 
     138 
     139            $query = preg_replace('/^'.$selectRegExp.'\s+/i', $selectReplace . 'TOP ' . ($count+$offset) . ' ', $query); 
    131140            $query = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $query . ') AS ' . $this->quoteIdentifier('inner_tbl'); 
    132141