/** * {@inheritdoc} * * @link http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server */ protected function limit($limit, $offset, $rowNumber = null) { if (empty($rowNumber) && $this->driver->getServerVersion() >= 12) { $statement = "OFFSET {$offset} ROWS "; if (!empty($limit)) { $statement .= "FETCH NEXT {$limit} ROWS ONLY"; } return trim($statement); } $statement = "WHERE {$this->quote($rowNumber)} "; //0 = row_number(1) $offset = $offset + 1; if (!empty($limit)) { $statement .= "BETWEEN {$offset} AND " . ($offset + $limit - 1); } else { $statement .= ">= {$offset}"; } return $statement; }
/** * {@inheritdoc} * * @link http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server */ protected function compileLimit($limit, $offset, $rowNumber = null) { if (empty($limit) && empty($offset)) { return ''; } //Modern SQLServer are easier to work with if (empty($rowNumber) && $this->driver->serverVersion() >= 12) { $statement = "OFFSET {$offset} ROWS "; if (!empty($limit)) { $statement .= "FETCH NEXT {$limit} ROWS ONLY"; } return trim($statement); } $statement = "WHERE {$this->quote($rowNumber)} "; //0 = row_number(1) $offset = $offset + 1; if (!empty($limit)) { $statement .= "BETWEEN {$offset} AND " . ($offset + $limit - 1); } else { $statement .= ">= {$offset}"; } return $statement; }