protected function rewriteLimitOffsetSql($sql, $limit, $offset)
{
$fetch = $limit + $offset;
$sql = preg_replace('/^([\\s(])*SELECT( DISTINCT)?(?!\\s*TOP\\s*\\()/i', "\\1SELECT\\2 TOP {$fetch}", $sql);
$ordering = $this->findOrdering($sql);
$orginalOrdering = $this->joinOrdering($ordering);
$reverseOrdering = $this->joinOrdering($this->reverseDirection($ordering));
$sql = "SELECT * FROM (SELECT TOP {$limit} * FROM ({$sql}) as [__inner top table__] {$reverseOrdering}) as [__outer top table__] {$orginalOrdering}";
return $sql;
}