From: Mike Bayer Date: Tue, 12 Feb 2008 21:16:31 +0000 (+0000) Subject: - fixed bug introduced in r4070 where union() and other compound selects would not get X-Git-Tag: rel_0_4_3~12 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9fffa2c7e1539689750ead7cd70f2d4812322a77;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - fixed bug introduced in r4070 where union() and other compound selects would not get an OID column if it only contained one selectable element, due to missing return in _proxy_column() - visit_column() calls itself to render a primary key col being used as the interpretation of the oid col instead of relying upon broken partial logic --- diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 02f6efce18..e87d3d2fb4 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -269,8 +269,7 @@ class DefaultCompiler(engine.Compiled): return schema_prefix + self.preparer.quote(column.table, ANONYMOUS_LABEL.sub(self._process_anon, column.table.name)) + "." + n elif len(column.table.primary_key) != 0: pk = list(column.table.primary_key)[0] - pkname = (pk.is_literal and name or self._truncated_identifier("colident", pk.name)) - return schema_prefix + self.preparer.quote(column.table, ANONYMOUS_LABEL.sub(self._process_anon, column.table.name)) + "." + self.preparer.quote(pk, pkname) + return self.visit_column(pk, result_map=result_map, use_schema=use_schema, **kwargs) else: return None elif column.table is None or not column.table.named_with_column: diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 79eb1759d3..0b76848039 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -2935,7 +2935,6 @@ class CompoundSelect(_SelectBaseMixin, FromClause): if s.oid_column: self.oid_column = self._proxy_column(s.oid_column) - def self_group(self, against=None): return _FromGrouping(self) @@ -2956,6 +2955,7 @@ class CompoundSelect(_SelectBaseMixin, FromClause): else: col = column._make_proxy(self) col_ordering.append(col) + return col else: col_ordering.append(column) existing = self._col_map[self.selects[0]][len(col_ordering) - 1] diff --git a/test/sql/selectable.py b/test/sql/selectable.py index c93c628259..3ad296aaa1 100755 --- a/test/sql/selectable.py +++ b/test/sql/selectable.py @@ -92,6 +92,16 @@ class SelectableTest(TestBase, AssertsExecutionResults): assert u.corresponding_column(s1.c.table1_col2) is u.c.col2 assert u.corresponding_column(s2.c.table2_col2) is u.c.col2 + def test_singular_union(self): + u = union(select([table.c.col1, table.c.col2, table.c.col3]), select([table.c.col1, table.c.col2, table.c.col3])) + assert u.oid_column is not None + + u = union(select([table.c.col1, table.c.col2, table.c.col3])) + assert u.oid_column + assert u.c.col1 + assert u.c.col2 + assert u.c.col3 + def testaliasunion(self): # same as testunion, except its an alias of the union u = select([table.c.col1, table.c.col2, table.c.col3, table.c.colx, null().label('coly')]).union(