summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-05-11 00:21:29 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-05-11 00:21:29 +0000
commit3de128138a896bc7373aa2684c920271c4781b7d (patch)
tree8ac21a6767187636e6243043b989be160cf52a7b
parent48648eedda50a84f5518ac2055286e1fde22fa00 (diff)
downloadsqlalchemy-3de128138a896bc7373aa2684c920271c4781b7d.tar.gz
- _Label propigates "_hide_froms()" so that scalar selects
behave more properly with regards to FROM clause #574
-rw-r--r--CHANGES2
-rw-r--r--lib/sqlalchemy/sql.py5
-rw-r--r--test/sql/select.py6
3 files changed, 11 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 3526f7486..a7d1477c8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -7,6 +7,8 @@
- _Label class overrides compare_self to return its ultimate object.
meaning, if you say someexpr.label('foo') == 5, it produces
the correct "someexpr == 5".
+ - _Label propigates "_hide_froms()" so that scalar selects
+ behave more properly with regards to FROM clause #574
- fix to long name generation when using oid_column as an order by
(oids used heavily in mapper queries)
- orm
diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py
index 0dcba3698..5adef46f2 100644
--- a/lib/sqlalchemy/sql.py
+++ b/lib/sqlalchemy/sql.py
@@ -2393,6 +2393,9 @@ class _Label(ColumnElement):
def _get_from_objects(self):
return self.obj._get_from_objects()
+ def _hide_froms(self):
+ return self.obj._hide_froms()
+
def _make_proxy(self, selectable, name = None):
if isinstance(self.obj, Selectable):
return self.obj._make_proxy(selectable, name=self.name)
@@ -2829,7 +2832,7 @@ class Select(_SelectBaseMixin, FromClause):
if self.is_scalar and not hasattr(self, 'type'):
self.type = column.type
-
+
# if the column is a Select statement itself,
# accept visitor
self.__correlator.traverse(column)
diff --git a/test/sql/select.py b/test/sql/select.py
index ccd5c33a8..34a37c978 100644
--- a/test/sql/select.py
+++ b/test/sql/select.py
@@ -134,8 +134,12 @@ sq.myothertable_othername AS sq_myothertable_othername FROM (" + sqstring + ") A
def testdontovercorrelate(self):
self.runtest(select([table1], from_obj=[table1, table1.select()]), """SELECT mytable.myid, mytable.name, mytable.description FROM mytable, (SELECT mytable.myid AS myid, mytable.name AS name, mytable.description AS description FROM mytable)""")
- def testselectexists(self):
+ def testexistsascolumnclause(self):
self.runtest(exists([table1.c.myid], table1.c.myid==5).select(), "SELECT EXISTS (SELECT mytable.myid AS myid FROM mytable WHERE mytable.myid = :mytable_myid)", params={'mytable_myid':5})
+
+ self.runtest(select([table1, exists([1], from_obj=[table2])]), "SELECT mytable.myid, mytable.name, mytable.description, EXISTS (SELECT 1 FROM myothertable) FROM mytable", params={})
+
+ self.runtest(select([table1, exists([1], from_obj=[table2]).label('foo')]), "SELECT mytable.myid, mytable.name, mytable.description, (EXISTS (SELECT 1 FROM myothertable)) AS foo FROM mytable", params={})
def testwheresubquery(self):
# TODO: this tests that you dont get a "SELECT column" without a FROM but its not working yet.