#3355: filter() with related table stomps on extra(tables)
------------------------------------------------+---------------------------
Reporter:  Rob Hudson <[EMAIL PROTECTED]>  |       Owner:  adrian          
  Status:  new                                  |   Component:  Database wrapper
 Version:  SVN                                  |    Keywords:                  
   Stage:  Unreviewed                           |   Has_patch:  0               
------------------------------------------------+---------------------------
 I started a discussion here with no responses so I thought I'd file a bug
 so this doesn't get lost...
 http://groups.google.com/group/django-
 developers/browse_thread/thread/a88046d26172908d/?hl=en#
 
 Summary: If you're using extra() to specify extra tables to add to your
 query AND you're using filter() with a related table, the extra() table
 gets lost.  Example (also found in the above message):
 
 This correctly adds "page_item" to the FROM clause by using extra().
 Notice I'm not yet referencing a related table in the filter() clause
 since template_id is contained in the Page object.
 
 {{{
 In [29]: Page.objects.extra(
                 tables=['page_item'],
                 where=['page_item.page_id=page_page.id'])
                 .filter(template__id='1')._get_sql_clause()
 Out[29]:
 (['`page_page`.`id`',
    '`page_page`.`number`',
    '`page_page`.`title`',
    '`page_page`.`template_id`',
    '`page_page`.`description`'],
   ' FROM `page_page` , `page_item` WHERE page_item.page_id=page_page.id
 AND (`page_page`.`template_id` = %s)',
   ['1'])
 }}}
 
 But adding the related table lookup for the 'name' column in the filter()
 clause breaks the extra() tables and "page_item" disappears...
 
 {{{
 In [30]: Page.objects.extra(
                 tables=['page_item'],
                 where=['page_item.page_id=page_page.id'])
                 .filter(template__name='Default Template')
                 ._get_sql_clause()
 Out[30]:
 (['`page_page`.`id`',
    '`page_page`.`number`',
    '`page_page`.`title`',
    '`page_page`.`template_id`',
    '`page_page`.`description`'],
   ' FROM `page_page` INNER JOIN `page_template` AS `page_page__template`
 ON `page_page`.`template_id` = `page_page__template`.`id` , `page_item`
 WHERE page_item.page_id=page_page.id AND (`page_page__template`.`name` =
 %s)',
   ['Default Template'])
 }}}

-- 
Ticket URL: <http://code.djangoproject.com/ticket/3355>
Django Code <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