#12258: QuerySet 'get' method should clear ordering before executing query
---------------------------------------------------+------------------------
          Reporter:  [email protected]       |         Owner:  nobody     
                 
            Status:  new                           |     Milestone:             
                 
         Component:  Database layer (models, ORM)  |       Version:  1.1        
                 
        Resolution:                                |      Keywords:  ordering, 
database, queryset
             Stage:  Unreviewed                    |     Has_patch:  1          
                 
        Needs_docs:  0                             |   Needs_tests:  0          
                 
Needs_better_patch:  0                             |  
---------------------------------------------------+------------------------
Comment (by lukeplant):

 Replying to [comment:1 nbv4]:
 > I'm not 100% positive, but I'm pretty sure SQL databases internally
 optimize queries so that "LIMIT 1" automatically "cancels out" any
 ordering clause so that it doesn't execute the ordering code on that
 query.

 If they did, they would produce wrong results.  `.get()`  does not do a
 LIMIT 1 anyway — the only reason we can remove the ORDER BY here is
 because we retrieve all results and throw an exception if there isn't
 exactly one i.e. we do the limiting to one after the database has returned
 results, and excess rows cause '''no''' data to be returned.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/12258#comment:2>
Django <http://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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.


Reply via email to