diff options
Diffstat (limited to 'lib/sqlalchemy/sql/expression.py')
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 34 |
1 files changed, 12 insertions, 22 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index b3200a7eb..039145006 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -1522,6 +1522,7 @@ class FromClause(Selectable): """Represent an element that can be used within the ``FROM`` clause of a ``SELECT`` statement.""" __visit_name__ = 'fromclause' + named_with_column=False def __init__(self): self.oid_column = None @@ -1562,13 +1563,6 @@ class FromClause(Selectable): return Alias(self, name) - def named_with_column(self): - """True if the name of this FromClause may be prepended to a - column in a generated SQL statement. - """ - - return False - def is_derived_from(self, fromclause): """Return True if this FromClause is 'derived' from the given FromClause. @@ -2379,6 +2373,8 @@ class Alias(FromClause): ``FromClause`` subclasses. """ + named_with_column = True + def __init__(self, selectable, alias=None): baseselectable = selectable while isinstance(baseselectable, Alias): @@ -2386,7 +2382,7 @@ class Alias(FromClause): self.original = baseselectable self.selectable = selectable if alias is None: - if self.original.named_with_column(): + if self.original.named_with_column: alias = getattr(self.original, 'name', None) alias = '{ANON %d %s}' % (id(self), alias or 'anon') self.name = alias @@ -2408,9 +2404,6 @@ class Alias(FromClause): def _table_iterator(self): return self.original._table_iterator() - def named_with_column(self): - return True - def _exportable_columns(self): #return self.selectable._exportable_columns() return self.selectable.columns @@ -2602,7 +2595,7 @@ class _ColumnClause(ColumnElement): if self.is_literal: return None if self.__label is None: - if self.table is not None and self.table.named_with_column(): + if self.table is not None and self.table.named_with_column: self.__label = self.table.name + "_" + self.name counter = 1 while self.__label in self.table.c: @@ -2652,6 +2645,8 @@ class TableClause(FromClause): functionality. """ + named_with_column = True + def __init__(self, name, *columns): super(TableClause, self).__init__() self.name = self.fullname = name @@ -2666,9 +2661,6 @@ class TableClause(FromClause): # TableClause is immutable return self - def named_with_column(self): - return True - def append_column(self, c): self._columns[c.name] = c c.table = self @@ -3041,16 +3033,14 @@ class Select(_SelectBaseMixin, FromClause): froms = froms.difference(hide_froms) if len(froms) > 1: - corr = self.__correlate + if self.__correlate: + froms = froms.difference(self.__correlate) if self._should_correlate and existing_froms is not None: - corr.update(existing_froms) + froms = froms.difference(existing_froms) - f = froms.difference(corr) - if not f: + if not froms: raise exceptions.InvalidRequestError("Select statement '%s' is overcorrelated; returned no 'from' clauses" % str(self.__dont_correlate())) - return f - else: - return froms + return froms froms = property(_get_display_froms, doc="""Return a list of all FromClause elements which will be applied to the FROM clause of the resulting statement.""") |