Good point -- and I am, in fact, using transactions in some of my app code, 
so it does matter.

I'll try auto_savepoint in both.  Thanks!

-ofer

On Monday, October 5, 2015 at 11:43:29 AM UTC-4, Jeremy Evans wrote:
>
> On Monday, October 5, 2015 at 8:36:35 AM UTC-7, Ofer Nave wrote:
>>
>> I was reading this section of the docs:
>>
>> http://sequel.jeremyevans.net/rdoc/files/doc/testing_rdoc.html#label-Transactional+testing+with+savepoints
>> Which shows this example:
>>
>> class Minitest::HooksSpec
>>   def around
>>     Sequel::Model.db.transaction(:rollback=>:always, :savepoint=>true, 
>> :auto_savepoint=>true){super}
>>   end
>>
>>   def around_all
>>     Sequel::Model.db.transaction(:rollback=>:always){super}
>>   end
>> end
>>
>>
>> So I jumped over to the RDoc for Sequel::Database#transaction to learn 
>> about those options:
>>
>>
>> :auto_savepoint 
>>
>> Automatically use a savepoint for Database#transaction calls inside this 
>> transaction block.
>>
>>
>> :savepoint
>>
>> Whether to create a new savepoint for this transaction, only respected if 
>> the database/adapter supports savepoints.  By default Sequel will reuse 
>> an existing transaction, so if you want to use a savepoint you must use 
>> this option.  If the surrounding transaction uses :auto_savepoint, you 
>> can set this to false to not use a savepoint.
>>
>>
>> Based on my understand from the docs, shouldn't the Minitest example be:
>>
>> class Minitest::HooksSpec
>>   def around
>>     Sequel::Model.db.transaction(:rollback=>:always){super}
>>   end
>>
>>   def around_all
>>     Sequel::Model.db.transaction(:rollback=>:always, 
>> :auto_savepoint=>true){super}
>>   end
>> end
>>
>>
>> The :auto_savepoint option in the around_all hook (which I believe wraps 
>> the whole test suite) would ensure that the per-test transaction (in the 
>> around hook) will use a savepoint, eliminating the need for 
>> savepoint-related options there, right?
>>
>
> In general, you want to use :auto_savepoint in around, so that 
> transactions inside your code work correctly.  Otherwise if you use 
> DB.transaction in your code without the savepoint=>true option, it won't 
> create a new transaction, it will reuse the existing transaction, which 
> will complicate/break things if you try to rollback or handle errors in 
> your code.
>
> You could use :auto_savepoint in both around_all and around, and not use 
> the :savepoint option in around, that would be functionally equivalent.
>
> 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 http://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to