Django

Code

Ticket #3355 (closed: invalid)

Opened 2 years ago

Last modified 1 year ago

filter() with related table stomps on extra(tables)

Reported by: Rob Hudson <treborhudson@gmail.com> Assigned to: adrian
Milestone: Component: Database wrapper
Version: SVN Keywords:
Cc: treborhudson@gmail.com Triage Stage: Accepted
Has patch: 0 Needs documentation: 0
Needs tests: 0 Patch needs improvement: 0

Description

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']) 

Attachments

Change History

01/25/07 03:28:07 changed by Simon G. <dev@simon.net.nz>

  • needs_better_patch changed.
  • stage changed from Unreviewed to Accepted.
  • needs_tests changed.
  • needs_docs changed.

07/16/07 12:26:42 changed by Rob Hudson <treborhudson@gmail.com>

  • status changed from new to closed.
  • resolution set to invalid.

This is my ticket but now, 6-7 months later, I don't see anything wrong here. The page_item stuff is plainly there. I'm going to close as invalid.


Add/Change #3355 (filter() with related table stomps on extra(tables))




Change Properties
Action