X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSQLAnywhere.pm;h=728220ff8b298ab09dfaee2db73d5cbd70de0d91;hb=153a03985a7f299a10f70dbfba9c628579cd9db6;hp=2addde069d287edcd4b64d4204ac7bd0ac6f9bd7;hpb=6a247f3368100ac0557e33cc534bc8ad0ccb1175;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm b/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm index 2addde0..728220f 100644 --- a/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm +++ b/lib/DBIx/Class/Storage/DBI/SQLAnywhere.pm @@ -17,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 @@ -38,19 +37,27 @@ sub last_insert_id { shift->_identity } sub _new_uuid { 'UUIDTOSTR(NEWID())' } -sub insert { +sub _prefetch_autovalues { my $self = shift; my ($source, $to_insert) = @_; + my $values = $self->next::method(@_); + + my $colinfo = $source->columns_info; + my $identity_col = - first { $source->column_info($_)->{is_auto_increment} } $source->columns; + first { $colinfo->{$_}{is_auto_increment} } keys %$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; } @@ -67,12 +74,12 @@ sub insert { }; if (defined $identity) { - $to_insert->{$identity_col} = $identity; + $values->{$identity_col} = $identity; $self->_identity($identity); } } - return $self->next::method(@_); + return $values; } # convert UUIDs to strings in selects