. */ Doctrine::autoload('Doctrine_Connection'); /** * Doctrine_Connection_Db2 * * @package Doctrine * @subpackage Connection * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.org * @since 1.0 * @version $Revision$ * @author Konsta Vesterinen */ class Doctrine_Connection_Db2 extends Doctrine_Connection { /** * Adds an driver-specific LIMIT clause to the query * * @param string $query query to modify * @param integer $limit limit the number of rows * @param integer $offset start reading from given offset * @return string the modified query */ public function modifyLimitQuery($query, $limit, $offset) { if ($limit <= 0) return $query; if ($offset == 0) { return $query . ' FETCH FIRST '. $limit .' ROWS ONLY'; } else { $sqlPieces = explode('from', $query); $select = $sqlPieces[0]; $table = $sqlPieces[1]; $col = explode('select', $select); $sql = 'WITH OFFSET AS(' . $select . ', ROW_NUMBER() ' . 'OVER(ORDER BY ' . $col[1] . ') AS doctrine_rownum FROM ' . $table . ')' . $select . 'FROM OFFSET WHERE doctrine_rownum BETWEEN ' . $offset . 'AND ' . ($offset + $limit - 1); return $sql; } } }