From 15ea17d7f882fec3f892a22612da4827780c8dae Mon Sep 17 00:00:00 2001 From: Michael Trier Date: Sun, 19 Dec 2010 19:25:33 -0500 Subject: Added NULLS FIRST and NULLS LAST support. It's implemented as an extension to the asc() and desc() operators, called nullsfirst() and nullslast(). [ticket:723] --- test/sql/test_query.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) (limited to 'test/sql/test_query.py') diff --git a/test/sql/test_query.py b/test/sql/test_query.py index e14f5301e..276653e56 100644 --- a/test/sql/test_query.py +++ b/test/sql/test_query.py @@ -576,7 +576,63 @@ class QueryTest(TestBase): use_labels=labels, order_by=[users.c.user_id.desc()]), [(3,), (2,), (1,)]) - + + @testing.requires.nullsordering + def test_order_by_nulls(self): + """Exercises ORDER BY clause generation. + + Tests simple, compound, aliased and DESC clauses. + """ + + users.insert().execute(user_id=1) + users.insert().execute(user_id=2, user_name='b') + users.insert().execute(user_id=3, user_name='a') + + def a_eq(executable, wanted): + got = list(executable.execute()) + eq_(got, wanted) + + for labels in False, True: + a_eq(users.select(order_by=[users.c.user_name.nullsfirst()], + use_labels=labels), + [(1, None), (3, 'a'), (2, 'b')]) + + a_eq(users.select(order_by=[users.c.user_name.nullslast()], + use_labels=labels), + [(3, 'a'), (2, 'b'), (1, None)]) + + a_eq(users.select(order_by=[asc(users.c.user_name).nullsfirst()], + use_labels=labels), + [(1, None), (3, 'a'), (2, 'b')]) + + a_eq(users.select(order_by=[asc(users.c.user_name).nullslast()], + use_labels=labels), + [(3, 'a'), (2, 'b'), (1, None)]) + + a_eq(users.select(order_by=[users.c.user_name.desc().nullsfirst()], + use_labels=labels), + [(1, None), (2, 'b'), (3, 'a')]) + + a_eq(users.select(order_by=[users.c.user_name.desc().nullslast()], + use_labels=labels), + [(2, 'b'), (3, 'a'), (1, None)]) + + a_eq(users.select(order_by=[desc(users.c.user_name).nullsfirst()], + use_labels=labels), + [(1, None), (2, 'b'), (3, 'a')]) + + a_eq(users.select(order_by=[desc(users.c.user_name).nullslast()], + use_labels=labels), + [(2, 'b'), (3, 'a'), (1, None)]) + + a_eq(users.select(order_by=[users.c.user_name.nullsfirst(), users.c.user_id], + use_labels=labels), + [(1, None), (3, 'a'), (2, 'b')]) + + a_eq(users.select(order_by=[users.c.user_name.nullslast(), users.c.user_id], + use_labels=labels), + [(3, 'a'), (2, 'b'), (1, None)]) + @testing.fails_on("+pyodbc", "pyodbc row doesn't seem to accept slices") def test_column_slices(self): users.insert().execute(user_id=1, user_name='john') -- cgit v1.2.1