~ubuntu-branches/ubuntu/utopic/zendframework/utopic

« back to all changes in this revision

Viewing changes to library/Zend/Db/Adapter/Sqlsrv.php

  • Committer: Bazaar Package Importer
  • Author(s): Frank Habermann
  • Date: 2010-04-28 20:10:00 UTC
  • mfrom: (1.3.1 upstream) (9.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20100428201000-o347bj5qb5i3tpot
Tags: 1.10.4-1
new upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 * @subpackage Adapter
18
18
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
19
19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
20
 
 * @version    $Id: Sqlsrv.php 20630 2010-01-25 21:18:20Z ralph $
 
20
 * @version    $Id: Sqlsrv.php 21197 2010-02-24 16:12:53Z rob $
21
21
 */
22
22
 
23
23
/**
605
605
            throw new Zend_Db_Adapter_Exception("LIMIT argument offset=$offset is not valid");
606
606
        }
607
607
 
608
 
        $orderby = stristr($sql, 'ORDER BY');
609
 
        if ($orderby !== false) {
610
 
            $sort  = (stripos($orderby, ' desc') !== false) ? 'desc' : 'asc';
611
 
            $order = str_ireplace('ORDER BY', '', $orderby);
612
 
            $order = trim(preg_replace('/\bASC\b|\bDESC\b/i', '', $order));
613
 
        }
614
 
 
615
 
        $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
616
 
 
617
 
        $sql = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $sql . ') AS inner_tbl';
618
 
        if ($orderby !== false) {
619
 
            $sql .= ' ORDER BY ' . $order . ' ';
620
 
            $sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
621
 
        }
622
 
        $sql .= ') AS outer_tbl';
623
 
        if ($orderby !== false) {
624
 
            $sql .= ' ORDER BY ' . $order . ' ' . $sort;
 
608
        if ($offset == 0) {
 
609
            $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . $count . ' ', $sql);
 
610
        } else {
 
611
            $orderby = stristr($sql, 'ORDER BY');
 
612
            if ($orderby !== false) {
 
613
                $sort  = (stripos($orderby, ' desc') !== false) ? 'desc' : 'asc';
 
614
                $order = str_ireplace('ORDER BY', '', $orderby);
 
615
                $order = trim(preg_replace('/\bASC\b|\bDESC\b/i', '', $order));
 
616
            }
 
617
    
 
618
            $sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
 
619
    
 
620
            $sql = 'SELECT * FROM (SELECT TOP ' . $count . ' * FROM (' . $sql . ') AS inner_tbl';
 
621
            if ($orderby !== false) {
 
622
                $innerOrder = preg_replace('/\".*\".\"(.*)\"/i', '"inner_tbl"."$1"', $order);
 
623
                $sql .= ' ORDER BY ' . $innerOrder . ' ';
 
624
                $sql .= (stripos($sort, 'asc') !== false) ? 'DESC' : 'ASC';
 
625
            }
 
626
            $sql .= ') AS outer_tbl';
 
627
            if ($orderby !== false) {
 
628
                $outerOrder = preg_replace('/\".*\".\"(.*)\"/i', '"outer_tbl"."$1"', $order);
 
629
                $sql .= ' ORDER BY ' . $outerOrder . ' ' . $sort;
 
630
            }
625
631
        }
626
632
 
627
633
        return $sql;