diff options
author | Jonathan Ellis <jbellis@gmail.com> | 2006-07-24 00:44:44 +0000 |
---|---|---|
committer | Jonathan Ellis <jbellis@gmail.com> | 2006-07-24 00:44:44 +0000 |
commit | ade0a51a79e722f8c5d77f2ef5ac10bc530b03d3 (patch) | |
tree | 1ea18297779031459ebb97fcabc0f6406e2cf4c9 /lib/sqlalchemy/ext/sqlsoup.py | |
parent | 3538be64d22e84d59d25e21f3a9e5260e230574e (diff) | |
download | sqlalchemy-ade0a51a79e722f8c5d77f2ef5ac10bc530b03d3.tar.gz |
with_labels support
Diffstat (limited to 'lib/sqlalchemy/ext/sqlsoup.py')
-rw-r--r-- | lib/sqlalchemy/ext/sqlsoup.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/sqlalchemy/ext/sqlsoup.py b/lib/sqlalchemy/ext/sqlsoup.py index 58f922e01..51e5ba3c3 100644 --- a/lib/sqlalchemy/ext/sqlsoup.py +++ b/lib/sqlalchemy/ext/sqlsoup.py @@ -90,6 +90,7 @@ to users, and uses that as the join condition automatically. If you join tables that have an identical column name, pass use_lables to your select: >>> db.with_labels(join1).select() + [MappedUsersLoansJoin(users_name='Joe Student',users_email='student@example.edu',users_password='student',users_classname=None,users_admin=0,loans_book_id=1,loans_user_name='Joe Student',loans_loan_date=datetime.datetime(2006, 7, 12, 0, 0))] You can compose arbitrarily complex joins by combining Join objects with tables or other joins. @@ -183,14 +184,21 @@ def _is_outer_join(selectable): return True return _is_outer_join(selectable.left) or _is_outer_join(selectable.right) +def _selectable_name(selectable): + if isinstance(selectable, sql.Alias): + return _selectable_name(selectable.selectable) + elif isinstance(selectable, sql.Select): + return ''.join([_selectable_name(s) for s in selectable._froms]) + elif isinstance(selectable, schema.Table): + return selectable.name.capitalize() + else: + return selectable.__class__.__name__ + def class_for_table(selectable): if not hasattr(selectable, '_selectable') \ or selectable._selectable() != selectable: raise 'class_for_table requires a selectable as its argument' - if isinstance(selectable, schema.Table): - mapname = 'Mapped' + selectable.name.capitalize() - else: - mapname = 'Mapped' + selectable.__class__.__name__ + mapname = 'Mapped' + _selectable_name(selectable) klass = TableClassType(mapname, (object,), {}) def __cmp__(self, o): L = self.__class__.c.keys() @@ -256,7 +264,8 @@ class SqlSoup: self._cache[selectable] = t return t def with_labels(self, item): - return self._map(select(use_labels=True, from_obj=[item._selectable()]).alias('foo')) + # TODO give meaningful aliases + return self._map(item._selectable().select(use_labels=True).alias('foo')) def join(self, *args, **kwargs): j = join(*args, **kwargs) return self._map(j) |