I'm testing some migrations, it seems like DBUtil operations are not buffered by the start_transaction()/commit_transaction()/rollback_transaction() logic, but are committed immediately regardless of whether an error occurred in my try statement.
Could this be correct or do I have to look for another error?
That is probably true, DBUtil methods generate their own custom SQL, then run a DB::query() to execute it. It's still mostly the old Kohana code, so I don't think transactions were even looked at.
It would probably more logical to have the migration start a transaction before calling up() or down(), so you never end up with half a migration. Or something configurable in the migration class.