On Nov 17, 11:49 am, Jeremy Evans <[email protected]> wrote:
> On Nov 17, 9:33 am, John Firebaugh <[email protected]> wrote:
>
> > How about the attached patch?
>
> >  0001-Ensure-transactions-around-save-and-destroy-are-roll.patch
> > 11KViewDownload
>
> Looks good.  Committed with minor changes:
>
> http://github.com/jeremyevans/sequel/commit/c89a4e47a22d7741745b625d2...http://github.com/jeremyevans/sequel/commit/b6323102a5d3b7424ae095f93...
>
> Thanks for your help!
>
> Jeremy

One thing I just thought about is how the following code will react to
these changes:

  album = Album.frist
  album.raise_on_save_failure = false
  album.use_transactions = true
  DB.transaction
    if album.save # Assume before hook fails
      dothis # not called
    else
      dothat # not called
    end
  end # this transaction rolled back

Because of how Sequel is set up (transactions are automatically
reentrant, no implicit savepoints), that will abort the outer
transaction, changing how the above code will function.  The crux of
the issue is that you don't know whether or not you are already inside
a transaction, and if you are already inside a transaction, raising
Rollback is the wrong thing to do.

A special exception type that would abort the transaction inside save/
destroy, but still caught by save/destroy so they can return normally,
is probably the best way I can currently think of to handle it, but
I'm open to ideas.

Jeremy

--

You received this message because you are subscribed to the Google Groups 
"sequel-talk" group.
To post to this group, send email to [email protected].
For more options, visit this group at 
http://groups.google.com/group/sequel-talk?hl=.


Reply via email to