On Tuesday, August 7, 2018 at 11:22:19 AM UTC-7, Alexander Popov wrote:
>
> I'm OK with exception raising, but… there is code:
>
> sequel -E sqlite:/ -c 'def foo; DB.transaction{DB.after_rollback { return
> :ar }; raise}; end; foo'
> I, [2018-08-07T21:21:16.084229 #7520] INFO -- : (0.000075s) PRAGMA
> foreign_keys = 1
> I, [2018-08-07T21:21:16.084301 #7520] INFO -- : (0.000013s) PRAGMA
> case_sensitive_like = 1
> I, [2018-08-07T21:21:16.084577 #7520] INFO -- : (0.000062s) SELECT
> sqlite_version()
> I, [2018-08-07T21:21:16.084668 #7520] INFO -- : (0.000028s) BEGIN
> I, [2018-08-07T21:21:16.084785 #7520] INFO -- : (0.000045s) ROLLBACK
>
>
> And there is no exception.
>
You are using return inside after_rollback. This is the equivalent of:
def transaction
raise
ensure
return :ar if $!
end
It is expected that an exception will not be raised in such cases. Sequel
is not suppressing the exception, your code is.
Don't use a non-local exit inside after_rollback (either return inside a
proc or similar control flow such as throw) if you want the exception to be
raised.
Thanks,
Jeremy
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.