X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase.pm;h=eeb4f01edf2a3806495f10925641a7d166d036b6;hb=6862815907d42aa2f5fcc70afd4ff2dbc9b48f79;hp=56319ef7992e94bb305796b9bf55bddadecc318b;hpb=018f6efba10afa2afe9c906384e25596a2056b0b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase.pm b/lib/DBIx/Class/Storage/DBI/Sybase.pm index 56319ef..eeb4f01 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase.pm @@ -9,8 +9,9 @@ use base qw/ /; use mro 'c3'; use Carp::Clan qw/^DBIx::Class/; -use List::Util (); -use Sub::Name (); +use List::Util(); +use Sub::Name(); +use Data::Dumper::Concise(); __PACKAGE__->mk_group_accessors('simple' => qw/_identity _blob_log_on_update _writer_storage _is_extra_storage @@ -277,7 +278,8 @@ sub _prep_for_execute { ); } - if ($op eq 'insert' && (not $bound_identity_col) && $identity_col) { + if ($op eq 'insert' && (not $bound_identity_col) && $identity_col && + (not $self->{insert_bulk})) { $sql = "$sql\n" . $self->_fetch_identity_sql($ident, $identity_col); @@ -507,20 +509,14 @@ EOF if (not $use_bulk_api) { my $blob_cols = $self->_remove_blob_cols_array($source, $cols, $data); - my $dumb_last_insert_id = - $identity_col - && (not $is_identity_insert) - && ($self->_identity_method||'') ne '@@IDENTITY'; +# _execute_array uses a txn anyway, but it ends too early in case we need to +# select max(col) to get the identity for inserting blobs. + ($self, my $guard) = $self->{transaction_depth} == 0 ? + ($self->_writer_storage, $self->_writer_storage->txn_scope_guard) + : + ($self, undef); - ($self, my ($guard)) = do { - if ($self->{transaction_depth} == 0 && $blob_cols && - $dumb_last_insert_id) { - ($self->_writer_storage, $self->_writer_storage->txn_scope_guard); - } - else { - ($self, undef); - } - }; + local $self->{insert_bulk} = 1; $self->next::method(@_); @@ -549,6 +545,7 @@ EOF } $guard->commit if $guard; + return; } @@ -665,8 +662,14 @@ EOF } } -# Sybase is very sensitive to this. -sub _exhaust_statements { 1 } +sub _dbh_execute_array { + my ($self, $sth, $tuple_status, $cb) = @_; + + my $rv = $self->next::method($sth, $tuple_status); + $cb->() if $cb; + + return $rv; +} # Make sure blobs are not bound as placeholders, and return any non-empty ones # as a hash. @@ -777,7 +780,7 @@ sub _insert_blobs { $self->throw_exception( "Could not find row in table '$table' for blob update:\n" - . $self->_pretty_print (\%where) + . Data::Dumper::Concise::Dumper (\%where) ); }