summaryrefslogtreecommitdiff
path: root/test/sql/test_query.py
diff options
context:
space:
mode:
authorMichael Trier <mtrier@gmail.com>2010-12-19 19:25:33 -0500
committerMichael Trier <mtrier@gmail.com>2010-12-19 19:25:33 -0500
commit15ea17d7f882fec3f892a22612da4827780c8dae (patch)
tree95470fa103945fecc63ce28045be46e1e5f61c1d /test/sql/test_query.py
parent0e8112d32290382b1b38f84bb254543a533ae995 (diff)
downloadsqlalchemy-15ea17d7f882fec3f892a22612da4827780c8dae.tar.gz
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]
Diffstat (limited to 'test/sql/test_query.py')
-rw-r--r--test/sql/test_query.py58
1 files changed, 57 insertions, 1 deletions
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')