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):
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
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):
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
__visit_name__ = 'fromclause'
- def __init__(self, name=None):
- self.name = name
+ def __init__(self):
self.oid_column = None
def _get_from_objects(self, **modifiers):
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.
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])
"""
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)
_SelectBaseMixin.__init__(self, **kwargs)
- name = property(lambda s:s.keyword + " statement")
def self_group(self, against=None):
return _FromGrouping(self)
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.
"""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)