#10790: Too many joins in a comparison for NULL. -------------------------------------+------------------------------------- Reporter: mtredinnick | Owner: Type: Bug | mtredinnick Component: Database layer | Status: new (models, ORM) | Version: SVN Severity: Normal | Resolution: Keywords: | Triage Stage: Accepted Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 1 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by lrekucki):
* needs_better_patch: 0 => 1 Comment: The patch didn't apply cleanly, so I had to rebase it. After that I get the following failure in tests: {{{ ====================================================================== FAIL: test_ticket14876 (regressiontests.queries.tests.Queries4Tests) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/lrekucki/django/django_lqc/tests/regressiontests/queries/tests.py", line 994, in test_ticket14876 self.assertEqual(str(q1.query), str(q2.query)) AssertionError: 'SELECT "queries_report"."id", "queries_report"."name", "queries_report"."creator_id" FROM "queries_report" LEFT OUTER JOIN "queries_author" ON ("queries_report"."creator_id" = "queries_author"."num") LEFT OUTER JOIN "queries_extrainfo" ON ("queries_author"."extra_id" = "queries_extrainfo"."id") WHERE ("queries_report"."creator_id" IS NULL OR "queries_extrainfo"."info" = e1 )' != 'SELECT "queries_report"."id", "queries_report"."name", "queries_report"."creator_id" FROM "queries_report" INNER JOIN "queries_author" ON ("queries_report"."creator_id" = "queries_author"."num") LEFT OUTER JOIN "queries_extrainfo" ON ("queries_author"."extra_id" = "queries_extrainfo"."id") WHERE ("queries_report"."creator_id" IS NULL OR "queries_extrainfo"."info" = e1 )' ---------------------------------------------------------------------- }}} The failing query is: {{{ q1 = Report.objects.filter(Q(creator__isnull=True) | Q(creator__extra__info='e1')) q2 = Report.objects.filter(Q(creator__isnull=True)) | Report.objects.filter(Q(creator__extra__info='e1')) self.assertQuerysetEqual(q1, ["<Report: r1>", "<Report: r3>"]) self.assertEqual(str(q1.query), str(q2.query)) }}} This is most likely, 'cause the patch turn a OUTER join into INNER join with expectation that trim_joins() will delete it, but it doesn't. -- Ticket URL: <https://code.djangoproject.com/ticket/10790#comment:20> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.