detect row_number() over support in MSSQL if version detection fails
[dbsrgits/DBIx-Class.git] / t / 74mssql.t
index a882e99..78e4691 100644 (file)
@@ -172,6 +172,38 @@ SQL
 
   is $rs->first, undef, 'rolled back';
   $rs->reset;
+
+  # test RNO detection when version detection fails
+  SKIP: {
+    my $storage = $schema->storage;
+    my $version = $storage->_server_info->{normalized_dbms_version};
+    
+    skip 1, 'could not detect SQL Server version' if not defined $version;
+
+    my $have_rno = $version >= 9 ? 1 : 0;
+
+    # Delete version information to force RNO check when rebuilding SQLA
+    # instance.
+    no strict 'refs';
+    no warnings 'redefine';
+    local *{(ref $storage).'::_get_server_version'} = sub { undef };
+
+    my $server_info = { %{ $storage->_server_info_hash } }; # clone
+
+    delete @$server_info{qw/dbms_version normalized_dbms_version/};
+
+    local $storage->{_server_info_hash} = $server_info;
+    local $storage->{_sql_maker}        = undef;
+    local $storage->{_sql_maker_opts}   = undef;
+
+    $storage->sql_maker;
+
+    my $rno_detected =
+      ($storage->{_sql_maker_opts}{limit_dialect} eq 'RowNumberOver');
+
+    ok ((not ($have_rno xor $rno_detected)),
+      'row_number() over support detected correctly');
+  }
 }
 
 # test op-induced autoconnect