From 6c3ad4e51e8707627a47512f7a9462f443ceadcc Mon Sep 17 00:00:00 2001 From: Konsta Vesterinen Date: Fri, 24 Oct 2014 14:44:30 +0300 Subject: [PATCH] Fix query without order by handling --- CHANGES.rst | 1 + sqlalchemy_utils/functions/sort_query.py | 23 ++++++++++--------- .../test_make_order_by_deterministic.py | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 16a428e..e8f8010 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -8,6 +8,7 @@ Here you can see the full list of changes between each SQLAlchemy-Utils release. ^^^^^^^^^^^^^^^^^^^ - Made assert_* functions automatically rollback session +- Changed make_order_by_deterministic attach order by primary key for queries without order by - Fixed alias handling in has_unique_index - Fixed alias handling in has_index - Fixed alias handling in make_order_by_deterministic diff --git a/sqlalchemy_utils/functions/sort_query.py b/sqlalchemy_utils/functions/sort_query.py index 4bbc55c..a7a8134 100644 --- a/sqlalchemy_utils/functions/sort_query.py +++ b/sqlalchemy_utils/functions/sort_query.py @@ -169,19 +169,20 @@ def make_order_by_deterministic(query): .. versionadded: 0.27.1 """ - if not query._order_by: - return query + order_by_func = sa.asc - order_by = query._order_by[0] - if isinstance(order_by, sa.sql.expression.UnaryExpression): - if order_by.modifier == sa.sql.operators.desc_op: - order_by_func = sa.desc - else: - order_by_func = sa.asc - column = order_by.get_children()[0] + if not query._order_by: + column = None else: - column = order_by - order_by_func = sa.asc + order_by = query._order_by[0] + if isinstance(order_by, sa.sql.expression.UnaryExpression): + if order_by.modifier == sa.sql.operators.desc_op: + order_by_func = sa.desc + else: + order_by_func = sa.asc + column = order_by.get_children()[0] + else: + column = order_by # Queries that are ordered by an already if isinstance(column, sa.Column): diff --git a/tests/functions/test_make_order_by_deterministic.py b/tests/functions/test_make_order_by_deterministic.py index 2663e48..10b51c7 100644 --- a/tests/functions/test_make_order_by_deterministic.py +++ b/tests/functions/test_make_order_by_deterministic.py @@ -82,7 +82,7 @@ class TestMakeOrderByDeterministic(TestCase): def test_query_without_order_by(self): query = self.session.query(self.User) query = make_order_by_deterministic(query) - assert 'ORDER BY' not in str(query) + assert 'ORDER BY "user".id' in str(query) def test_alias(self): alias = sa.orm.aliased(self.User.__table__)