Smarter implementation of the select top 100pct subselect handling
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / SQLAHacks / MSSQL.pm
CommitLineData
ac93965c 1package # Hide from PAUSE
2 DBIx::Class::SQLAHacks::MSSQL;
3
4use base qw( DBIx::Class::SQLAHacks );
5use Carp::Clan qw/^DBIx::Class|^SQL::Abstract/;
6
9d2a1bb5 7sub _RowNumberOver {
584d2dd1 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";
15SELECT * FROM
16(
17 SELECT Q1.*, ROW_NUMBER() OVER( $order_by ) AS ROW_NUM FROM (
18 $sql
19 ) Q1
20) Q2
21WHERE ROW_NUM BETWEEN $offset AND $last
22
23SQL
24
25 return $sql;
ac93965c 26}
27
281;