Django

Code

Changeset 7469

Show
Ignore:
Timestamp:
04/26/08 06:20:42 (3 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Make sure the right list of fields is passed to the
Query.resolve_columns() method for those backends that provide it (e.g. Oracle).

Refs #7088

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/sql/query.py

    r7467 r7469  
    5555        self.ordering_aliases = [] 
    5656        self.start_meta = None 
     57        self.select_fields = [] 
     58        self.related_select_fields = [] 
    5759 
    5860        # SQL-related attributes 
     
    143145        obj.ordering_aliases = [] 
    144146        obj.start_meta = self.start_meta 
     147        obj.select_fields = self.select_fields[:] 
     148        obj.related_select_fields = self.related_select_fields[:] 
    145149        obj.select = self.select[:] 
    146150        obj.tables = self.tables[:] 
     
    170174        Returns an iterator over the results from executing this query. 
    171175        """ 
    172         fields = self.model._meta.fields 
    173176        resolve_columns = hasattr(self, 'resolve_columns') 
     177        if resolve_columns: 
     178            if self.select_fields: 
     179                fields = self.select_fields + self.related_select_fields 
     180            else: 
     181                fields = self.model._meta.fields 
    174182        for rows in self.execute_sql(MULTI): 
    175183            for row in rows: 
     
    188196        obj.select_related = False 
    189197        obj.related_select_cols = [] 
     198        obj.related_select_fields = [] 
    190199        if obj.distinct and len(obj.select) > 1: 
    191200            obj = self.clone(CountQuery, _query=obj, where=self.where_class(), 
     
    200209 
    201210        # Apply offset and limit constraints manually, since using LIMIT/OFFSET 
    202         # in SQL doesn't change the COUNT output. 
     211        # in SQL (in variants that provide them) doesn't change the COUNT 
     212        # output. 
    203213        number = max(0, number - self.low_mark) 
    204214        if self.high_mark: 
     
    334344                item.relabel_aliases(change_map) 
    335345                self.select.append(item) 
     346        self.select_fields = rhs.select_fields[:] 
    336347        self.extra_select = rhs.extra_select.copy() 
    337348        self.extra_tables = rhs.extra_tables 
     
    836847            root_alias = self.get_initial_alias() 
    837848            self.related_select_cols = [] 
     849            self.related_select_fields = [] 
    838850        if not used: 
    839851            used = set() 
     
    870882            self.related_select_cols.extend([(alias, f2.column) 
    871883                    for f2 in f.rel.to._meta.fields]) 
     884            self.related_select_fields.extend(f.rel.to._meta.fields) 
    872885            if restricted: 
    873886                next = requested.get(f.name, {}) 
     
    12381251        try: 
    12391252            for name in field_names: 
    1240                 u1, target, u2, joins, u3 = self.setup_joins( 
     1253                field, target, u2, joins, u3 = self.setup_joins( 
    12411254                        name.split(LOOKUP_SEP), opts, alias, False, allow_m2m, 
    12421255                        True) 
     
    12551268                    self.promote_alias(join) 
    12561269                self.select.append((final_alias, col)) 
     1270                self.select_fields.append(field) 
    12571271        except MultiJoin: 
    12581272            raise FieldError("Invalid field name: '%s'" % name) 
     
    13231337            self.distinct = False 
    13241338        self.select = [select] 
     1339        self.select_fields = [None] 
    13251340        self.extra_select = {} 
    13261341        self.extra_select_params = () 
     
    13391354        self.select_related = field_dict 
    13401355        self.related_select_cols = [] 
     1356        self.related_select_fields = [] 
    13411357 
    13421358    def add_extra(self, select, select_params, where, params, tables, order_by): 
     
    13911407        alias = joins[last[-1]] 
    13921408        self.select = [(alias, self.alias_map[alias][RHS_JOIN_COL])] 
     1409        self.select_fields = [field] 
    13931410        self.start_meta = opts 
    13941411 
  • django/branches/queryset-refactor/django/db/models/sql/subqueries.py

    r7468 r7469  
    349349                self.connection.ops.date_trunc_sql) 
    350350        self.select = [select] 
     351        self.select_fields = [None] 
    351352        self.distinct = True 
    352353        self.order_by = order == 'ASC' and [1] or [-1]