From 86cebccc4c3cfb687cbbe9703cf732641c55ce44 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 24 Mar 2015 12:28:19 -0400 Subject: [PATCH] - Turned off the "simple order by" flag on the MSSQL dialect; this is the flag that per :ticket:`2992` causes an order by or group by an expression that's also in the columns clause to be copied by label, even if referenced as the expression object. The behavior for MSSQL is now the old behavior that copies the whole expression in by default, as MSSQL can be picky on these particularly in GROUP BY expressions. fixes #3338 - Add a test that includes a composed label in a GROUP BY --- doc/build/changelog/changelog_10.rst | 12 ++++++++++++ lib/sqlalchemy/dialects/mssql/base.py | 1 + lib/sqlalchemy/testing/suite/test_select.py | 9 +++++++++ 3 files changed, 22 insertions(+) diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index 3bcb4d6cfc..281092ae12 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -18,6 +18,18 @@ .. changelog:: :version: 1.0.0b4 + .. change:: + :tags: bug, mssql + :tickets: 3338 + + Turned off the "simple order by" flag on the MSSQL dialect; this + is the flag that per :ticket:`2992` causes an order by or group by + an expression that's also in the columns clause to be copied by + label, even if referenced as the expression object. The behavior + for MSSQL is now the old behavior that copies the whole expression + in by default, as MSSQL can be picky on these particularly in + GROUP BY expressions. + .. change:: :tags: feature, schema :tickets: 3341 diff --git a/lib/sqlalchemy/dialects/mssql/base.py b/lib/sqlalchemy/dialects/mssql/base.py index ea0ed58a44..26b7947120 100644 --- a/lib/sqlalchemy/dialects/mssql/base.py +++ b/lib/sqlalchemy/dialects/mssql/base.py @@ -1416,6 +1416,7 @@ class MSDialect(default.DefaultDialect): use_scope_identity = True max_identifier_length = 128 schema_name = "dbo" + supports_simple_order_by_label = False colspecs = { sqltypes.DateTime: _MSDateTime, diff --git a/lib/sqlalchemy/testing/suite/test_select.py b/lib/sqlalchemy/testing/suite/test_select.py index 68dadd0a91..ecc92b884b 100644 --- a/lib/sqlalchemy/testing/suite/test_select.py +++ b/lib/sqlalchemy/testing/suite/test_select.py @@ -86,6 +86,15 @@ class OrderByLabelTest(fixtures.TablesTest): [(7, ), (5, ), (3, )] ) + def test_group_by_composed(self): + table = self.tables.some_table + expr = (table.c.x + table.c.y).label('lx') + stmt = select([func.count(1), expr]).group_by(expr).order_by(expr) + self._assert_result( + stmt, + [(1, 3), (1, 5), (1, 7)] + ) + class LimitOffsetTest(fixtures.TablesTest): __backend__ = True -- 2.47.3