605
605
throw new Zend_Db_Adapter_Exception("LIMIT argument offset=$offset is not valid");
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));
615
$sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
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';
622
$sql .= ') AS outer_tbl';
623
if ($orderby !== false) {
624
$sql .= ' ORDER BY ' . $order . ' ' . $sort;
609
$sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . $count . ' ', $sql);
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));
618
$sql = preg_replace('/^SELECT\s/i', 'SELECT TOP ' . ($count+$offset) . ' ', $sql);
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';
626
$sql .= ') AS outer_tbl';
627
if ($orderby !== false) {
628
$outerOrder = preg_replace('/\".*\".\"(.*)\"/i', '"outer_tbl"."$1"', $order);
629
$sql .= ' ORDER BY ' . $outerOrder . ' ' . $sort;