There are two general cases when TRANSACTION START trigger is fired
1. when user start transaction, and
2. when IN AUTONOMOUS TRANSACTION statement starts new transaction.
Let look what happens if TRANSACTION START is present and raises error.
According to documentation (see README.db_triggers.txt):
- TRANSACTION START
Triggers are fired in the newly user created transaction - uncaught
exceptions are returned to the client and the transaction is rolled-back.
In the 1st case new transaction is not rolled-back currently and left active until Firebird process alive.
In the 2nd case new transaction is rolled-back but it also fires TRANSACTION ROLLBACK trigger
which is wrong. Note, in the 1st case TRANSACTION ROLLBACK trigger is not fired.