From: Mike Bayer Date: Sat, 3 Nov 2007 20:12:59 +0000 (+0000) Subject: - removed "name" attribute from FromClause, Join, Select, CompoundSelect. its needless X-Git-Tag: rel_0_4_1~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4210a1ef236e0fbc65878dd1a1ddcc8e13d43c45;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - removed "name" attribute from FromClause, Join, Select, CompoundSelect. its needless and led to some very strange anonymous label names - removed what was apparently cruft in some column-targeting code --- diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 9e3f20257f..08289ae896 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -189,7 +189,6 @@ class AliasedClauses(object): else: self.alias = mapped_table.alias() self.mapped_table = mapped_table - self.extra_cols = {} self.row_decorator = self._create_row_adapter() def aliased_column(self, column): @@ -200,9 +199,6 @@ class AliasedClauses(object): if conv: return conv - if column in self.extra_cols: - return self.extra_cols[column] - aliased_column = column # for column-level subqueries, swap out its selectable with our # eager version as appropriate, and manually build the @@ -214,11 +210,6 @@ class AliasedClauses(object): aliased_column = sql_util.ClauseAdapter(self.alias).chain(ModifySubquery()).traverse(aliased_column, clone=True) aliased_column = aliased_column.label(None) self.row_decorator.map[column] = aliased_column - # TODO: this is a little hacky - for attr in ('name', '_label'): - if hasattr(column, attr): - self.row_decorator.map[getattr(column, attr)] = aliased_column - self.extra_cols[column] = aliased_column return aliased_column def adapt_clause(self, clause): @@ -246,18 +237,9 @@ class AliasedClauses(object): return self.row[key] def keys(self): return map.keys() - map = {} - for c in self.alias.c: - parent = self.mapped_table.corresponding_column(c) - map[parent] = c - map[parent._label] = c - map[parent.name] = c - for c in self.extra_cols: - map[c] = self.extra_cols[c] - # TODO: this is a little hacky - for attr in ('name', '_label'): - if hasattr(c, attr): - map[getattr(c, attr)] = self.extra_cols[c] + map = {} + for c in self.mapped_table.c: + map[c] = self.alias.corresponding_column(c) AliasedRowAdapter.map = map return AliasedRowAdapter diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 3771734e3b..49dbc143a8 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -1521,8 +1521,7 @@ class FromClause(Selectable): __visit_name__ = 'fromclause' - def __init__(self, name=None): - self.name = name + def __init__(self): self.oid_column = None def _get_from_objects(self, **modifiers): @@ -1723,6 +1722,12 @@ class FromClause(Selectable): def _proxy_column(self, column): return column._make_proxy(self) +class _TextFromClause(FromClause): + __visit_name__ = 'fromclause' + + def __init__(self, text): + self.name = text + class _BindParamClause(ClauseElement, _CompareMixin): """Represent a bind parameter. @@ -2212,9 +2217,6 @@ class Join(FromClause): self.__folded_equivalents = None self._init_primary_key() - name = property(lambda s: "Join object on " + s.left.name + " " + s.right.name) - encodedname = property(lambda s: s.name.encode('ascii', 'backslashreplace')) - def _init_primary_key(self): from sqlalchemy import schema pkcol = util.Set([c for c in self._flatten_exportable_columns() if c.primary_key]) @@ -2663,7 +2665,7 @@ class TableClause(FromClause): """ def __init__(self, name, *columns): - super(TableClause, self).__init__(name) + super(TableClause, self).__init__() self.name = self.fullname = name self.encodedname = self.name.encode('ascii', 'backslashreplace') self.oid_column = _ColumnClause('oid', self, _is_oid=True) @@ -2910,7 +2912,6 @@ class CompoundSelect(_SelectBaseMixin, FromClause): _SelectBaseMixin.__init__(self, **kwargs) - name = property(lambda s:s.keyword + " statement") def self_group(self, against=None): return _FromGrouping(self) @@ -3058,8 +3059,6 @@ class Select(_SelectBaseMixin, FromClause): 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.""") - name = property(lambda self:"Select statement", doc="""Placeholder 'name' attribute to meet the FromClause interface.""") - def locate_all_froms(self): """return a Set of all FromClause elements referenced by this Select. @@ -3250,7 +3249,7 @@ class Select(_SelectBaseMixin, FromClause): """append the given FromClause expression to this select() construct's FROM clause.""" if _is_literal(fromclause): - fromclause = FromClause(fromclause) + fromclause = _TextFromClause(fromclause) if not _copy_collection: self._froms.add(fromclause) diff --git a/test/orm/query.py b/test/orm/query.py index e2362d6c18..e82041ff91 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -902,6 +902,8 @@ class ExternalColumnsTest(QueryTest): assert tuple_address_result == sess.query(Address).join('user', aliased=True, id='ualias').add_entity(User, id='ualias').all() + + if __name__ == '__main__': testbase.main()