mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #8439 -- Complex combinations of Q-objects (using both conjunctions and
disjunctions) were producing incorrect SQL when nullable relations were involved. This fixes that. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8832 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -223,10 +223,10 @@ class Join(models.Model):
|
||||
class ReservedName(models.Model):
|
||||
name = models.CharField(max_length=20)
|
||||
order = models.IntegerField()
|
||||
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
>>> t1 = Tag.objects.create(name='t1')
|
||||
>>> t2 = Tag.objects.create(name='t2', parent=t1)
|
||||
@@ -238,6 +238,11 @@ __test__ = {'API_TESTS':"""
|
||||
>>> n2 = Note.objects.create(note='n2', misc='bar')
|
||||
>>> n3 = Note.objects.create(note='n3', misc='foo')
|
||||
|
||||
>>> ann1 = Annotation.objects.create(name='a1', tag=t1)
|
||||
>>> ann1.notes.add(n1)
|
||||
>>> ann2 = Annotation.objects.create(name='a2', tag=t4)
|
||||
>>> ann2.notes.add(n2, n3)
|
||||
|
||||
Create these out of order so that sorting by 'id' will be different to sorting
|
||||
by 'info'. Helps detect some problems later.
|
||||
>>> e2 = ExtraInfo.objects.create(info='e2', note=n2)
|
||||
@@ -842,8 +847,6 @@ unpickling.
|
||||
True
|
||||
|
||||
Bug #7277
|
||||
>>> ann1 = Annotation.objects.create(name='a1', tag=t1)
|
||||
>>> ann1.notes.add(n1)
|
||||
>>> n1.annotation_set.filter(Q(tag=t5) | Q(tag__children=t5) | Q(tag__children__children=t5))
|
||||
[<Annotation: a1>]
|
||||
|
||||
@@ -931,10 +934,25 @@ Bug #7302: reserved names are appropriately escaped
|
||||
>>> _ = ReservedName.objects.create(name='b',order=37)
|
||||
>>> ReservedName.objects.all().order_by('order')
|
||||
[<ReservedName: b>, <ReservedName: a>]
|
||||
|
||||
>>> ReservedName.objects.extra(select={'stuff':'name'}, order_by=('order','stuff'))
|
||||
[<ReservedName: b>, <ReservedName: a>]
|
||||
|
||||
|
||||
Bug #8439 -- complex combinations of conjunctions, disjunctions and nullable
|
||||
relations.
|
||||
>>> Author.objects.filter(Q(item__note__extrainfo=e2)|Q(report=r1, name='xyz'))
|
||||
[<Author: a2>]
|
||||
>>> Author.objects.filter(Q(report=r1, name='xyz')|Q(item__note__extrainfo=e2))
|
||||
[<Author: a2>]
|
||||
>>> Annotation.objects.filter(Q(tag__parent=t1)|Q(notes__note='n1', name='a1'))
|
||||
[<Annotation: a1>]
|
||||
>>> xx = ExtraInfo.objects.create(info='xx', note=n3)
|
||||
>>> Note.objects.filter(Q(extrainfo__author=a1)|Q(extrainfo=xx))
|
||||
[<Note: n1>, <Note: n3>]
|
||||
>>> xx.delete()
|
||||
>>> q = Note.objects.filter(Q(extrainfo__author=a1)|Q(extrainfo=xx)).query
|
||||
>>> len([x[2] for x in q.alias_map.values() if x[2] == q.LOUTER and q.alias_refcount[x[1]]])
|
||||
1
|
||||
|
||||
"""}
|
||||
|
||||
# In Python 2.3 and the Python 2.6 beta releases, exceptions raised in __len__
|
||||
|
||||
Reference in New Issue
Block a user