Hello,

I have extensions or scripts where I'm updating several things such as changing ticket status and multiple custom field values. In such cases partial updates would be bad, so I'm wondering about wrapping such code inside a database transaction, so that if there's a problem somewhere in the middle, I can get things back to where they were before my code started. But this raises a couple of questions:

- Are scrips implicitly wrapped inside database transactions, so that rolling back is handled automatically if a scrip fails? If so, is it enough to return 0 from Commit method or does the scrip have to fail in some other fashion? Or if not, can I safely explicitly use transactions inside the scrip code?

- I found this somewhere in your extensions. Is this a recommended way of starting a transaction, so that it never - even accidentally - can interfere with pre-existing transactions?

   my $in_txn = RT->DatabaseHandle->TransactionDepth;
   RT->DatabaseHandle->BeginTransaction unless $in_txn;
   ...
   RT->DatabaseHandle->Commit unless $in_txn;

Maciej

Reply via email to