Ian, thanks for the feedback, but what your concern is not related to this proposal.
What you're talking about is issuing a BEGIN while already in a database transaction, which is normally an error, with no standard meaning or definition in SQL's transaction model. It's completely up to the database what happens: MySQL will implicitly commit and start a new transaction, as you point out, but (for example) PostgreSQL will just issue a warning and ignore it, and SQLite will fail with an error. Django never tries to do this, and never should. What the original message talks about is how transactional blocks marked in Python translate to SQL transactions. This is something every SQL abstraction layer does somewhere: the canonical way is to associate the execution of each transactional block with a corresponding SQL transaction, and (because execution nests but SQL transactions cannot) most frameworks support nested transactional blocks by subsuming them, associating their execution with the context's existing SQL transaction.[1] This is what Django currently does, modulo the bugs described in my original message. The proposal is to fix these bugs, making Django fully and reliably transactional. There are no database portability implications: Django's transaction management will continue to work with any backend as before. [1] This is sound because inner extents retain transactional (ACID) semantics as part of the outer extent: no integrity is lost. -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-develop...@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.