]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- _Label propigates "_hide_froms()" so that scalar selects
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 May 2007 00:21:29 +0000 (00:21 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 11 May 2007 00:21:29 +0000 (00:21 +0000)
behave more properly with regards to FROM clause #574

CHANGES
lib/sqlalchemy/sql.py
test/sql/select.py

diff --git a/CHANGES b/CHANGES
index 3526f7486447bcf4da5cb05e9eed8e74feced77c..a7d1477c8613b98aa550194e53a4a3feb50a9895 100644 (file)
--- 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
index 0dcba3698d9f4fd8d7a056bde8b446e5cf0490e9..5adef46f2776ce53f995d6b757b3350420e780f9 100644 (file)
@@ -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)
index ccd5c33a8ab667847605716bb691fa70f58cd535..34a37c97846dd9976173391bbc5c08335f33521c 100644 (file)
@@ -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.