| 7876 | |
| 7877 | |
| 7878 | static void rollback(thread_db* tdbb, jrd_tra* transaction, const bool retaining_flag) |
| 7879 | { |
| 7880 | /************************************** |
| 7881 | * |
| 7882 | * r o l l b a c k |
| 7883 | * |
| 7884 | ************************************** |
| 7885 | * |
| 7886 | * Functional description |
| 7887 | * Abort a transaction. |
| 7888 | * |
| 7889 | **************************************/ |
| 7890 | if (transaction->tra_in_use) |
| 7891 | Arg::Gds(isc_transaction_in_use).raise(); |
| 7892 | |
| 7893 | ThreadStatusGuard tempStatus(tdbb); |
| 7894 | |
| 7895 | const Database* const dbb = tdbb->getDatabase(); |
| 7896 | const Jrd::Attachment* const attachment = tdbb->getAttachment(); |
| 7897 | |
| 7898 | if (!(attachment->att_flags & ATT_no_db_triggers)) |
| 7899 | { |
| 7900 | try |
| 7901 | { |
| 7902 | ThreadStatusGuard tempStatus2(tdbb); |
| 7903 | // run ON TRANSACTION ROLLBACK triggers |
| 7904 | EXE_execute_db_triggers(tdbb, transaction, TRIGGER_TRANS_ROLLBACK); |
| 7905 | } |
| 7906 | catch (const Exception&) |
| 7907 | { |
| 7908 | if (dbb->dbb_flags & DBB_bugcheck) |
| 7909 | throw; |
| 7910 | } |
| 7911 | } |
| 7912 | |
| 7913 | tdbb->setTransaction(transaction); |
| 7914 | TRA_rollback(tdbb, transaction, retaining_flag, false); |
| 7915 | } |
| 7916 | |
| 7917 | |
| 7918 | static void setEngineReleaseDelay(Database* dbb) |
no test coverage detected