X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FMSSQL.pm;fp=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FMSSQL.pm;h=bbeaeef9989969460c5bcf86b3a1b8bd55c5800b;hb=f895c500473b77db4ecf185ed21530b821a14ed4;hp=8a5ab6261776959f59ef08c52c22b5b1fc6e4903;hpb=bfff1ef0873e8a4a44eb961f483ef5ef133aa7bc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/MSSQL.pm b/lib/DBIx/Class/Storage/DBI/MSSQL.pm index 8a5ab62..bbeaeef 100644 --- a/lib/DBIx/Class/Storage/DBI/MSSQL.pm +++ b/lib/DBIx/Class/Storage/DBI/MSSQL.pm @@ -170,6 +170,20 @@ sub sqlt_type { 'SQLServer' } sub sql_limit_dialect { my $self = shift; + my $supports_ofn = $self->_sql_server_2012_or_higher; + + unless (defined $supports_ofn) { + # User is connecting via DBD::Sybase and has no permission to run + # stored procedures like xp_msver, or version detection failed for some + # other reason. + # So, we use a query to check if OFN is implemented. + try { + $self->_get_dbh->selectrow_array('SELECT 1 ORDER BY 1 OFFSET 0 ROWS'); + $supports_ofn = 1; + }; + } + return 'OffsetFetchNext' if $supports_ofn; + my $supports_rno = $self->_sql_server_2005_or_higher; unless (defined $supports_rno) { @@ -182,8 +196,9 @@ sub sql_limit_dialect { $supports_rno = 1; }; } + return 'RowNumberOver' if $supports_rno; - return $supports_rno ? 'RowNumberOver' : 'Top'; + return 'Top'; } sub _ping {