Django

Code

Changeset 8794

Show
Ignore:
Timestamp:
09/01/08 07:07:26 (3 months ago)
Author:
russellm
Message:

Fixed #7302: Corrected quoting of columns in extra_group_by. Thanks to Ivan Sagalaev for the patch and initial test.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/sql/query.py

    r8783 r8794  
    630630            else: 
    631631                col, order = get_order_dir(field, asc) 
    632                 elt = qn(col) 
     632                elt = qn2(col) 
    633633                if distinct and elt not in select_aliases: 
    634634                    ordering_aliases.append(elt) 
  • django/trunk/tests/modeltests/ordering/models.py

    r8325 r8794  
    7878>>> Article.objects.all().reverse()[:2] 
    7979[<Article: Article 1>, <Article: Article 3>] 
     80 
     81# Ordering can be based on fields included from an 'extra' clause 
     82>>> Article.objects.extra(select={'foo': 'pub_date'}, order_by=['foo', 'headline']) 
     83[<Article: Article 1>, <Article: Article 2>, <Article: Article 3>, <Article: Article 4>] 
     84 
     85# If the extra clause uses an SQL keyword for a name, it will be protected by quoting. 
     86>>> Article.objects.extra(select={'order': 'pub_date'}, order_by=['order', 'headline']) 
     87[<Article: Article 1>, <Article: Article 2>, <Article: Article 3>, <Article: Article 4>] 
     88 
    8089"""} 
  • django/trunk/tests/regressiontests/queries/models.py

    r8724 r8794  
    221221    b = models.ForeignKey(LeafB) 
    222222 
     223class ReservedName(models.Model): 
     224    name = models.CharField(max_length=20) 
     225    order = models.IntegerField() 
     226     
     227    def __unicode__(self): 
     228        return self.name 
     229         
    223230__test__ = {'API_TESTS':""" 
    224231>>> t1 = Tag.objects.create(name='t1') 
     
    920927[<Item: a_b>] 
    921928 
     929Bug #7302: reserved names are appropriately escaped 
     930>>> _ = ReservedName.objects.create(name='a',order=42) 
     931>>> _ = ReservedName.objects.create(name='b',order=37) 
     932>>> ReservedName.objects.all().order_by('order') 
     933[<ReservedName: b>, <ReservedName: a>] 
     934 
     935>>> ReservedName.objects.extra(select={'stuff':'name'}, order_by=('order','stuff')) 
     936[<ReservedName: b>, <ReservedName: a>] 
     937  
    922938"""} 
    923939