Changeset 7466
- Timestamp:
- 04/25/08 23:03:26 (2 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/queryset-refactor/django/db/models/sql/query.py
r7465 r7466 367 367 qn = self.quote_name_unless_alias 368 368 result = ['(%s) AS %s' % (col, alias) for alias, col in self.extra_select.iteritems()] 369 aliases = se lf.extra_select.keys()369 aliases = set(self.extra_select.keys()) 370 370 if with_aliases: 371 col_aliases = set(aliases)371 col_aliases = aliases.copy() 372 372 else: 373 373 col_aliases = set() … … 379 379 c_alias = 'Col%d' % len(col_aliases) 380 380 result.append('%s AS %s' % (r, c_alias)) 381 aliases.a ppend(c_alias)381 aliases.add(c_alias) 382 382 col_aliases.add(c_alias) 383 383 else: 384 384 result.append(r) 385 aliases.a ppend(r)385 aliases.add(r) 386 386 col_aliases.add(col[1]) 387 387 else: 388 388 result.append(col.as_sql(quote_func=qn)) 389 389 if hasattr(col, 'alias'): 390 aliases.a ppend(col.alias)390 aliases.add(col.alias) 391 391 col_aliases.add(col.alias) 392 392 elif self.default_cols: 393 cols = self.get_default_columns(True, with_aliases, col_aliases) 393 cols, new_aliases = self.get_default_columns(with_aliases, 394 col_aliases) 394 395 result.extend(cols) 395 aliases. extend(cols)396 aliases.update(new_aliases) 396 397 for table, col in self.related_select_cols: 397 398 r = '%s.%s' % (qn(table), qn(col)) … … 399 400 c_alias = 'Col%d' % len(col_aliases) 400 401 result.append('%s AS %s' % (r, c_alias)) 401 aliases.a ppend(c_alias)402 aliases.add(c_alias) 402 403 col_aliases.add(c_alias) 403 404 else: 404 405 result.append(r) 405 aliases.a ppend(r)406 aliases.add(r) 406 407 col_aliases.add(col) 407 408 408 self._select_aliases = set(aliases)409 self._select_aliases = aliases 409 410 return result 410 411 411 def get_default_columns(self, as_str=False, with_aliases=False, 412 col_aliases=None): 412 def get_default_columns(self, with_aliases=False, col_aliases=None): 413 413 """ 414 414 Computes the default columns for selecting every field in the base 415 model. Returns a list of default (alias, column) pairs suitable for 416 inclusion as the select columns. If 'as_str' is True, returns a list of 417 strings, quoted appropriately for use in SQL directly. 415 model. 416 417 Returns a list of strings, quoted appropriately for use in SQL 418 directly, as well as a set of aliases used in the select statement. 418 419 """ 419 420 result = [] … … 423 424 qn = self.quote_name_unless_alias 424 425 qn2 = self.connection.ops.quote_name 426 aliases = set() 425 427 for field, model in self.model._meta.get_fields_with_model(): 426 428 try: … … 430 432 root_pk, model._meta.pk.column)) 431 433 seen[model] = alias 432 if as_str: 433 if with_aliases and field.column in col_aliases: 434 c_alias = 'Col%d' % len(col_aliases) 435 result.append('%s.%s AS %s' % (qn(alias), 436 qn2(field.column), c_alias)) 437 else: 438 result.append('%s.%s' % (qn(alias), qn2(field.column))) 439 else: 440 result.append((alias, field.column)) 441 return result 434 if with_aliases and field.column in col_aliases: 435 c_alias = 'Col%d' % len(col_aliases) 436 result.append('%s.%s AS %s' % (qn(alias), 437 qn2(field.column), c_alias)) 438 col_aliases.add(c_alias) 439 aliases.add(c_alias) 440 else: 441 r = '%s.%s' % (qn(alias), qn2(field.column)) 442 result.append(r) 443 aliases.add(r) 444 if with_aliases: 445 col_aliases.add(field.column) 446 return result, aliases 442 447 443 448 def get_from_clause(self):
