Backout sybase changes
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Sybase.pm
index fe38359..41b0c81 100644 (file)
@@ -3,64 +3,35 @@ package DBIx::Class::Storage::DBI::Sybase;
 use strict;
 use warnings;
 
-use base qw/DBIx::Class::Storage::DBI/;
-
-use Carp::Clan qw/^DBIx::Class/;
+use base qw/
+    DBIx::Class::Storage::DBI::Sybase::Base
+    DBIx::Class::Storage::DBI::NoBindVars
+/;
+use mro 'c3';
 
 sub _rebless {
-  my $self = shift;
+    my $self = shift;
 
-  if (ref($self) eq 'DBIx::Class::Storage::DBI::Sybase') {
     my $dbtype = eval {
-      @{$self->dbh->selectrow_arrayref(qq{sp_server_info \@attribute_id=1})}[2]
-    } || '';
-
-    my $exception = $@;
-    $dbtype =~ s/\W/_/gi;
-    my $subclass = "DBIx::Class::Storage::DBI::Sybase::${dbtype}";
-
-    if (!$exception && $dbtype && $self->load_optional_class($subclass)) {
-      bless $self, $subclass;
-      $self->_rebless;
-    } elsif (not $self->dbh->{syb_dynamic_supported}) {
-      bless $self, 'DBIx::Class::Storage:DBI::Sybase::NoBindVars';
-      $self->_rebless;
+      @{$self->_get_dbh
+        ->selectrow_arrayref(qq{sp_server_info \@attribute_id=1})
+      }[2]
+    };
+    unless ( $@ ) {
+        $dbtype =~ s/\W/_/gi;
+        my $subclass = "DBIx::Class::Storage::DBI::Sybase::${dbtype}";
+        if ($self->load_optional_class($subclass) && !$self->isa($subclass)) {
+            bless $self, $subclass;
+            $self->_rebless;
+        }
     }
-  }
-}
-
-{
-  my $old_dbd_warned = 0;
-
-  sub _populate_dbh {
-    my $self = shift;
-    $self->next::method(@_);
-    my $dbh = $self->_dbh;
-
-    if ($dbh->can('syb_date_fmt')) {
-      $dbh->syb_date_fmt('ISO_strict');
-    } elsif (not $old_dbd_warned) {
-      carp "Your DBD::Sybase is too old to support ".
-      "DBIx::Class::InflateColumn::DateTime, please upgrade!";
-      $old_dbd_warned = 1;
-    }
-
-    $dbh->do('set dateformat mdy');
-
-    1;
-  }
 }
 
 sub _dbh_last_insert_id {
-  my ($self, $dbh, $source, $col) = @_;
-
-  # sorry, there's no other way!
-  my $sth = $dbh->prepare_cached("select max($col) from ".$source->from);
-  return ($dbh->selectrow_array($sth))[0];
+    my ($self, $dbh, $source, $col) = @_;
+    return ($dbh->selectrow_array('select @@identity'))[0];
 }
 
-sub datetime_parser_type { "DBIx::Class::Storage::DBI::Sybase::DateTime" }
-
 1;
 
 =head1 NAME
@@ -75,41 +46,21 @@ L<DBIx::Class::Storage::DBI::Sybase::MSSQL>.
 
 =head1 CAVEATS
 
-If your version of Sybase does not support placeholders, then this storage
-driver uses L<DBIx::Class::Storage::DBI::NoBindVars> as a base,
-
-In which case, bind variables will be interpolated (properly quoted of course)
+This storage driver uses L<DBIx::Class::Storage::DBI::NoBindVars> as a base.
+This means that bind variables will be interpolated (properly quoted of course)
 into the SQL query itself, without using bind placeholders.
 
 More importantly this means that caching of prepared statements is explicitly
 disabled, as the interpolation renders it useless.
 
-If your version of Sybase B<DOES> support placeholders (check
-C<<$dbh->{syb_dynamic_supported}>> then unfortunately there's no way to get the
-C<last_insert_id> without doing a C<select max(col)>.
-
-But your queries will be cached.
-
-=head1 DATES
-
-On connection C<syb_date_fmt> is set to C<ISO_strict>, e.g.:
-C<2004-08-21T14:36:48.080Z> and C<dateformat> is set to C<mdy>, e.g.:
-C<08/13/1979>.
-
-You will need the L<DateTime::Format::Strptime> module if you are going to use
-L<DBIx::Class::InflateColumn::DateTime>.
-
 =head1 AUTHORS
 
 Brandon L Black <blblack@gmail.com>
 
 Justin Hunter <justin.d.hunter@gmail.com>
 
-Rafael Kitover <rkitover@cpan.org>
-
 =head1 LICENSE
 
 You may distribute this code under the same terms as Perl itself.
 
 =cut
-# vim:sts=2 sw=2: