On 21 sept. 2013, at 15:53, Richard Ward <daedalusf...@gmail.com> wrote:
> I'm OK with trying to to raise exceptions when making a query and > get_rollback returns True. I'm not sure it's doable; patch welcome ;-) > > How about this: > https://github.com/RichardOfWard/django/commit/cb46c75db275db59b54511c090286255bd9cc46d > > It raises the same error that PostgreSQL would raise if you try and do any > SQL when in a transaction with 'needs_rollback' is True. I've tested this > with PostgreSQL, MySQL and SQLite3, and they all now behave in the same way > that PostgreSQL behave currently (I'm running the test suite at the moment, > its taking a while). I wrote a patch based on this idea and unfortunately it doesn't work: https://code.djangoproject.com/attachment/ticket/21134/21134-failed-attempt.patch This patch triggers a large number of failures in the tests, because it prevents some read queries which are currently allowed. You didn't notice because your patch only works when DEBUG = True and the test suite runs with DEBUG = False. If we step back from the implementation, the issue here is that MySQL and Oracle implicitly add a savepoint before each query, and under some circumstances implicitly rollback to that savepoint. This behavior allows transaction management schemes that don't map well to a context manager / decorator API like Django's. See also https://code.djangoproject.com/ticket/11156#comment:14 which has the same root cause. I made a significant effort trying to implement the suggestions in this thread and didn't obtain any results. If someone still wants to change something in this area, please write a patch with tests; I will review it. -- Aymeric. -- You received this message because you are subscribed to the Google Groups "Django developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-developers+unsubscr...@googlegroups.com. To post to this group, send email to django-developers@googlegroups.com. Visit this group at http://groups.google.com/group/django-developers. For more options, visit https://groups.google.com/groups/opt_out.