Make $SIG{__WARN__} overrides more Carp::Always friendly
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Sybase / Microsoft_SQL_Server.pm
index 5911981..12dfa5b 100644 (file)
@@ -10,6 +10,7 @@ use base qw/
 use mro 'c3';
 
 use DBIx::Class::Carp;
+use namespace::clean;
 
 =head1 NAME
 
@@ -65,6 +66,28 @@ EOF
   }
 }
 
+sub _init {
+  my $self = shift;
+
+  $self->next::method(@_);
+
+  # work around massively broken freetds versions after 0.82
+  # - explicitly no scope_identity
+  # - no sth caching
+  #
+  # warn about the fact as well, do not provide a mechanism to shut it up
+  if ($self->_using_freetds and (my $ver = $self->_using_freetds_version||999) > 0.82) {
+    carp_once(
+      "Your DBD::Sybase was compiled against buggy FreeTDS version $ver. "
+    . 'Statement caching does not work and will be disabled.'
+    );
+
+    $self->_identity_method('@@identity');
+    $self->_no_scope_identity_query(1);
+    $self->disable_sth_caching(1);
+  }
+}
+
 # invoked only if DBD::Sybase is compiled against FreeTDS
 sub _set_autocommit_stmt {
   my ($self, $on) = @_;
@@ -124,7 +147,7 @@ package # hide from PAUSE
   DBIx::Class::Storage::DBI::Sybase::Microsoft_SQL_Server::DateTime::Format;
 
 my $datetime_parse_format  = '%Y-%m-%dT%H:%M:%S.%3NZ';
-my $datetime_format_format = '%Y-%m-%d %H:%M:%S.%3N'; # %F %T 
+my $datetime_format_format = '%Y-%m-%d %H:%M:%S.%3N'; # %F %T
 
 my ($datetime_parser, $datetime_formatter);