У меня есть несколько необычная потребность в обработке транзакций.
Я работаю над инфраструктурой мутационных тестов для SQL Server, для этого мне нужно запустить свои тесты внутри транзакции, чтобы база данных всегда былав состоянии, которое началось после завершения тестов.
Однако у меня есть проблема в том, что пользователи могут кодировать внутри процедур тестирования и могут вызывать rollback transaction
, который может быть или не быть внутри (вложенной) транзакции (точка сохранения).
высокий уровень выглядит так
start transaction
initialize test
run test with user code
may or may not contain:
- start tran
- start tran savename
- commit tran
- commit tran savename
- rollback tran
- rollback tran savename
output testresults
rollback transaction
Есть ли способ убедиться, что я наконец смогу всегда вернуться к исходному состоянию?Я должен учитывать, что пользователи могут вызывать хранимые процедуры / триггеры, которые могут быть вложенными и могут содержать операторы транзакций.Со всеми моими решениями в тот момент, когда пользователь использует откат trans в своем тестовом коде, он избегает транзакции, и не все будет очищено
Что я хочу, так это то, что если пользователь вызывает откат, только его часть транзакции откатываетсяи моя транзакция, которую я запускаю до инициализации теста, остается неизменной.
Если возможно, я хочу запретить моим пользователям использовать шаблон транзакции, который использует точки сохранения, когда транзакция уже существует.