Fix RT57467, simplify test
[dbsrgits/DBIx-Class.git] / t / 74mssql.t
index 78e4691..c51e9de 100644 (file)
@@ -52,12 +52,16 @@ for my $storage_type (@storage_types) {
 
   isa_ok($schema->storage, "DBIx::Class::Storage::$storage_type");
 
-# start disconnected to test _ping
-  $schema->storage->_dbh->disconnect;
+  SKIP: {
+    skip 'This version of DBD::Sybase segfaults on disconnect', 1 if DBD::Sybase->VERSION < 1.08;
 
-  lives_ok {
-    $schema->storage->dbh_do(sub { $_[1]->do('select 1') })
-  } '_ping works';
+    # start disconnected to test _ping
+    $schema->storage->_dbh->disconnect;
+
+    lives_ok {
+      $schema->storage->dbh_do(sub { $_[1]->do('select 1') })
+    } '_ping works';
+  }
 
   my $dbh = $schema->storage->dbh;
 
@@ -177,33 +181,34 @@ SQL
   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 };
+    skip 'could not detect SQL Server version', 1 if not defined $version;
 
-    my $server_info = { %{ $storage->_server_info_hash } }; # clone
-
-    delete @$server_info{qw/dbms_version normalized_dbms_version/};
+    my $have_rno = $version >= 9 ? 1 : 0;
 
-    local $storage->{_server_info_hash} = $server_info;
     local $storage->{_sql_maker}        = undef;
     local $storage->{_sql_maker_opts}   = undef;
 
+    local $storage->{_server_info_hash} = { %{ $storage->_server_info_hash } }; # clone
+    delete @{$storage->{_server_info_hash}}{qw/dbms_version normalized_dbms_version/};
+
     $storage->sql_maker;
 
     my $rno_detected =
-      ($storage->{_sql_maker_opts}{limit_dialect} eq 'RowNumberOver');
+      ($storage->{_sql_maker_opts}{limit_dialect} eq 'RowNumberOver') ? 1 : 0;
 
-    ok ((not ($have_rno xor $rno_detected)),
+    ok (($have_rno == $rno_detected),
       'row_number() over support detected correctly');
   }
+
+  {
+    my $schema = DBICTest::Schema->clone;
+    $schema->connection($dsn, $user, $pass);
+
+    like $schema->storage->sql_maker->{limit_dialect},
+      qr/^(?:Top|RowNumberOver)\z/,
+      'sql_maker is correct on unconnected schema';
+  }
 }
 
 # test op-induced autoconnect