X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSybase%2FASE.pm;h=c471bf8fb2b4876b4aca614a9b714d3a2ea1a7d9;hb=b8e92dac9f2f65895700dbd0d0606f75b900a8e0;hp=5bf199474d961cd87249bfefbd42c92b91ff7ff7;hpb=7e017742f708618487923261292bc92660a2031c;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm index 5bf1994..c471bf8 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase/ASE.pm @@ -376,47 +376,27 @@ sub insert { my $blob_cols = $self->_remove_blob_cols($source, $to_insert); - # do we need the horrific SELECT MAX(COL) hack? - my $need_dumb_last_insert_id = ( - $self->_perform_autoinc_retrieval - and - ( ($self->_identity_method||'') ne '@@IDENTITY' ) - ); - - my $next = $self->next::can; - - # we are already in a transaction, or there are no blobs - # and we don't need the PK - just (try to) do it + # if a new txn is needed - it must happen on the _writer/new connection (for now) + my $guard; if ( - ( !$blob_cols and !$need_dumb_last_insert_id ) - or - $self->transaction_depth + ! $self->transaction_depth + and + ( + $blob_cols + or + # do we need the horrific SELECT MAX(COL) hack? + ( + $self->_perform_autoinc_retrieval + and + ( ($self->_identity_method||'') ne '@@IDENTITY' ) + ) + ) ) { - $self->_insert ( - $next, $source, $to_insert, $blob_cols, $identity_col - ); - } - # otherwise use the _writer_storage to do the insert+transaction on another - # connection - else { - my $guard = $self->_writer_storage->txn_scope_guard; - - my $updated_cols = $self->_writer_storage->_insert ( - $next, $source, $to_insert, $blob_cols, $identity_col - ); - - $self->_identity($self->_writer_storage->_identity); - - $guard->commit; - - $updated_cols; + $self = $self->_writer_storage; + $guard = $self->txn_scope_guard; } -} - -sub _insert { - my ($self, $next, $source, $to_insert, $blob_cols, $identity_col) = @_; - my $updated_cols = $self->$next ($source, $to_insert); + my $updated_cols = $self->next::method ($source, $to_insert); $self->_insert_blobs ( $source, @@ -431,6 +411,8 @@ sub _insert { }, ) if $blob_cols; + $guard->commit if $guard; + return $updated_cols; } @@ -781,6 +763,11 @@ sub _insert_blobs { $self->throw_exception('Cannot update TEXT/IMAGE column(s) without primary key values') if grep { ! defined $row_data->{$_} } @primary_cols; + # if we are 2-phase inserting a blob - there is nothing to retrieve anymore, + # regardless of the previous state of the flag + local $self->{_perform_autoinc_retrieval} + if $self->_perform_autoinc_retrieval; + my %where = map {( $_ => $row_data->{$_} )} @primary_cols; for my $col (keys %$blob_cols) {