X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSQLAnywhere.pm;h=df301d2bb574c509564d348b2217340decbc280f;hb=52416317;hp=38a177588260f13b20e20b157d4f551ac30e6715;hpb=9780718f9c36738245f90b1f036998c3b076cffc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm b/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm index 38a1775..df301d2 100644 --- a/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm +++ b/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm @@ -4,11 +4,12 @@ use strict; use warnings; use base qw/DBIx::Class::Storage::DBI::UniqueIdentifier/; use mro 'c3'; -use List::Util (); +use List::Util 'first'; +use Try::Tiny; +use namespace::clean; -__PACKAGE__->mk_group_accessors(simple => qw/ - _identity -/); +__PACKAGE__->mk_group_accessors(simple => qw/_identity/); +__PACKAGE__->sql_limit_dialect ('RowNumberOver'); =head1 NAME @@ -16,8 +17,7 @@ DBIx::Class::Storage::DBI::SQLAnywhere - Driver for Sybase SQL Anywhere =head1 DESCRIPTION -This class implements autoincrements for Sybase SQL Anywhere, selects the -RowNumberOver limit implementation and provides +This class implements autoincrements for Sybase SQL Anywhere and provides L support. You need the C driver that comes with the SQL Anywhere @@ -41,16 +41,21 @@ sub insert { my $self = shift; my ($source, $to_insert) = @_; - my $identity_col = List::Util::first { - $source->column_info($_)->{is_auto_increment} - } $source->columns; + my $colinfo = $source->columns_info; + + my $identity_col = + first { $_->{is_auto_increment} } values %$colinfo; # user might have an identity PK without is_auto_increment if (not $identity_col) { foreach my $pk_col ($source->primary_columns) { - if (not exists $to_insert->{$pk_col} && - $source->column_info($pk_col)->{data_type} !~ /^uniqueidentifier/i) - { + if ( + ! exists $to_insert->{$pk_col} + and + $colinfo->{$pk_col}{data_type} + and + $colinfo->{$pk_col}{data_type} !~ /^uniqueidentifier/i + ) { $identity_col = $pk_col; last; } @@ -97,25 +102,13 @@ sub _select_args { return $self->next::method(@_); } -# this sub stolen from DB2 - -sub _sql_maker_opts { - my ( $self, $opts ) = @_; - - if ( $opts ) { - $self->{_sql_maker_opts} = { %$opts }; - } - - return { limit_dialect => 'RowNumberOver', %{$self->{_sql_maker_opts}||{}} }; -} - # this sub stolen from MSSQL sub build_datetime_parser { my $self = shift; my $type = "DateTime::Format::Strptime"; try { - eval "use ${type}" + eval "require ${type}" } catch { $self->throw_exception("Couldn't load ${type}: $_");