diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-04-04 16:06:58 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-04-04 16:06:58 +0000 |
commit | 1a684567958d548f7ed68ba34bc17bffbadfb8ee (patch) | |
tree | 0c224ad489d1a43e7e3bf8f914dba4dcdc951693 | |
parent | c4eeabc60bddca6857982c894516268ecdb48b68 (diff) | |
download | sqlalchemy-1a684567958d548f7ed68ba34bc17bffbadfb8ee.tar.gz |
fixed union() bug whereby oid_column would not be available if no oid_column in embedded selects
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | lib/sqlalchemy/sql/expression.py | 7 | ||||
-rw-r--r-- | test/sql/select.py | 7 |
3 files changed, 18 insertions, 3 deletions
@@ -1,7 +1,12 @@ ======= CHANGES ======= - +0.4.6 +===== +- sql + - Fixed bug with union() when applied to non-Table connected + select statements + 0.4.5 ===== - orm diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 9272e6d82..2ed3b372f 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -2993,11 +2993,14 @@ class CompoundSelect(_SelectBaseMixin, FromClause): self.selects.append(s) _SelectBaseMixin.__init__(self, **kwargs) - + + self.oid_column = None for s in self.selects: + # TODO: need to repair proxy_column here to + # not require full traversal if s.oid_column: self.oid_column = self._proxy_column(s.oid_column) - + def self_group(self, against=None): return _FromGrouping(self) diff --git a/test/sql/select.py b/test/sql/select.py index 06679e956..77926b421 100644 --- a/test/sql/select.py +++ b/test/sql/select.py @@ -888,6 +888,13 @@ SELECT thirdtable.userid FROM thirdtable)" "SELECT myothertable.otherid FROM myothertable EXCEPT SELECT thirdtable.userid FROM thirdtable \ UNION SELECT mytable.myid FROM mytable" ) + + # test unions working with non-oid selectables + s = select([column('foo'), column('bar')]) + s = union(s, s) + s = union(s, s) + self.assert_compile(s, "SELECT foo, bar UNION SELECT foo, bar UNION (SELECT foo, bar UNION SELECT foo, bar)") + @testing.uses_deprecated('//get_params') def test_binds(self): |