class ViewTable(object): """A table to be joined in.""" def __init__(self, config, view, data): self.config = config self.view = view if isinstance(data, six.string_types): data = {'table': data} self.data = data self.table_ref = data.get('table') self.alias = data.get('alias', self.table_ref) @property def table(self): if not hasattr(self, '_table'): self._table = Table(self.table_ref, self.config.meta, autoload=True) if self.alias != self._table.name: self._table = self._table.alias(self.alias) return self._table @property def refs(self): if not hasattr(self, '_refs'): self._refs = {} for column in self.table.columns: name = '%s.%s' % (self.alias, column.name) self._refs[name] = column return self._refs
class QueryTable(object): """A table to be joined in.""" def __init__(self, query, data): self.query = query if isinstance(data, six.string_types): data = {'table': data} self.data = data self.table_ref = data.get('table') self.alias_ref = data.get('alias', self.table_ref) self.table = Table(self.table_ref, self.query.meta, autoload=True) self.alias = self.table.alias(self.alias_ref) self.refs = {} for column in self.alias.columns: name = '%s.%s' % (self.alias_ref, column.name) labeled_column = column.label('col_%s' % uuid4().hex[:10]) self.refs[name] = labeled_column self.refs[column.name] = labeled_column
class QueryTable(object): """A table to be joined in.""" def __init__(self, meta: MetaData, data: Union[str, Dict[str, str]]) -> None: if isinstance(data, str): data = {"table": data} table_ref = data.get("table") if table_ref is None: raise InvalidMapping("Query has no table!") alias_ref = data.get("alias", table_ref) self.table = Table(table_ref, meta, autoload=True) self.alias = self.table.alias(alias_ref) self.refs: Dict[str, Label[Any]] = {} for column in self.alias.columns: name = "%s.%s" % (alias_ref, column.name) labeled_column = column.label("col_%s" % uuid4().hex[:10]) self.refs[name] = labeled_column self.refs[column.name] = labeled_column
def test_alias_proxy(self): t = Table('t', MetaData(), Column('foo', self._add_override_factory()) ) proxied = t.alias().c.foo self._assert_add_override(proxied)
def table(self): table = Table(self.table_ref, self.config.meta, autoload=True) if self.alias != table.name: table = table.alias(self.alias) return table