Счетчики, да. И три статуса - no_transaction / pending / in_transaction. Pending заодно позволяет стартовать транзакцию только когда надо (с первым последующим запросом).
Еще чуток кода - и добавляется менеджер соединений, позволяющий эмулировать транзакции между разными субд. А если еще прикрутить XA (и метод vote() в соединения), получаются честные двухфазные коммиты.
На php таких реализаций не видел (кроме как у себя ), в python-мире существует весьма грамотный zodb transaction.
Еще чуток кода - и добавляется менеджер соединений, позволяющий эмулировать транзакции между разными субд. А если еще прикрутить XA (и метод vote() в соединения), получаются честные двухфазные коммиты.
На php таких реализаций не видел (кроме как у себя ), в python-мире существует весьма грамотный zodb transaction.