diff --git a/lib/Doctrine/Connection/Db2.php b/lib/Doctrine/Connection/Db2.php new file mode 100644 index 000000000..dc2cfa638 --- /dev/null +++ b/lib/Doctrine/Connection/Db2.php @@ -0,0 +1,63 @@ +. + */ +Doctrine::autoload('Doctrine_Connection'); +/** + * Doctrine_Connection_Db2 + * + * @package Doctrine + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @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 $sql; + + if($offset == 0) { + return $sql . ' FETCH FIRST '. $count .' ROWS ONLY'; + } else { + + $sqlPieces = explode('from', $sql); + $select = $sqlPieces[0]; + $table = $sqlPieces[1]; + + $col = explode('select', $select); + + $sql = 'WITH OFFSET AS(' . $select . ', ROW_NUMBER() ' . + 'OVER(ORDER BY ' . $col[1] . ') AS dctrn_rownum FROM ' . $table . ')' . + $select . 'FROM OFFSET WHERE dctrn_rownum BETWEEN ' . $offset . + 'AND ' . ($offset + $count - 1); + return $sql; + } + } +} diff --git a/lib/Doctrine/Connection/Firebird.php b/lib/Doctrine/Connection/Firebird.php index e50d18b5f..83f40a45a 100644 --- a/lib/Doctrine/Connection/Firebird.php +++ b/lib/Doctrine/Connection/Firebird.php @@ -105,7 +105,7 @@ class Doctrine_Connection_Firebird extends Doctrine_Connection { * @return integer */ public function getNextID($sequence) { - $stmt = $this->query("SELECT UNIQUE FROM ".$sequence); + $stmt = $this->query('SELECT UNIQUE FROM ' . $sequence); $data = $stmt->fetch(PDO::FETCH_NUM); return $data[0]; }