From 2b2e27d8862637335a5306aea34174c5cf3904bc Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 23 May 2007 15:20:25 +0000 Subject: [PATCH] CompoundSelect (i.e. UNION etc.) needed self_group() to provide parenthesis --- lib/sqlalchemy/sql.py | 3 +++ test/sql/select.py | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/sqlalchemy/sql.py b/lib/sqlalchemy/sql.py index 9a93474dc7..4304d1ecc8 100644 --- a/lib/sqlalchemy/sql.py +++ b/lib/sqlalchemy/sql.py @@ -2698,6 +2698,9 @@ class CompoundSelect(_SelectBaseMixin, FromClause): name = property(lambda s:s.keyword + " statement") + def self_group(self, against=None): + return _Grouping(self) + def _locate_oid_column(self): return self.selects[0].oid_column diff --git a/test/sql/select.py b/test/sql/select.py index 281a0f6a38..2f627ee8fe 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -821,6 +821,16 @@ myothertable.othername != :myothertable_othername OR EXISTS (select yay from foo self.runtest(select([table1], ~table1.c.myid.in_(select([table2.c.otherid]))), "SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid NOT IN (SELECT myothertable.otherid FROM myothertable)") + + self.runtest(select([table1], table1.c.myid.in_( + union( + select([table1], table1.c.myid == 5), + select([table1], table1.c.myid == 12), + ) + )), "SELECT mytable.myid, mytable.name, mytable.description FROM mytable \ +WHERE mytable.myid IN (\ +SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = :mytable_myid \ +UNION SELECT mytable.myid, mytable.name, mytable.description FROM mytable WHERE mytable.myid = :mytable_myid_1)") # test that putting a select in an IN clause does not blow away its ORDER BY clause self.runtest( -- 2.47.2