summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-04-04 16:06:58 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-04-04 16:06:58 +0000
commit1a684567958d548f7ed68ba34bc17bffbadfb8ee (patch)
tree0c224ad489d1a43e7e3bf8f914dba4dcdc951693
parentc4eeabc60bddca6857982c894516268ecdb48b68 (diff)
downloadsqlalchemy-1a684567958d548f7ed68ba34bc17bffbadfb8ee.tar.gz
fixed union() bug whereby oid_column would not be available if no oid_column in embedded selects
-rw-r--r--CHANGES7
-rw-r--r--lib/sqlalchemy/sql/expression.py7
-rw-r--r--test/sql/select.py7
3 files changed, 18 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index f66bc798c..b0fbbc801 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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):