fix RNO for MSSQL to not use a kludgy regexp
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / SQLAHacks / MSSQL.pm
1 package # Hide from PAUSE
2   DBIx::Class::SQLAHacks::MSSQL;
3
4 use base qw( DBIx::Class::SQLAHacks );
5 use Carp::Clan qw/^DBIx::Class|^SQL::Abstract/;
6
7 sub _RowNumberOver {
8   my ($self, $sql, $order, $rows, $offset ) = @_;
9
10   $offset += 1;
11   my $last = $rows + $offset - 1;
12   my ( $order_by ) = $self->_order_by( $order );
13
14   $sql = <<"SQL";
15 SELECT * FROM
16 (
17    SELECT Q1.*, ROW_NUMBER() OVER( $order_by ) AS ROW_NUM FROM (
18       $sql
19    ) Q1
20 ) Q2
21 WHERE ROW_NUM BETWEEN $offset AND $last
22
23 SQL
24
25   return $sql;
26 }
27
28 1;