diff options
author | Ilja Everilä <saarni@gmail.com> | 2014-09-10 11:33:49 +0300 |
---|---|---|
committer | Ilja Everilä <saarni@gmail.com> | 2014-09-10 11:33:49 +0300 |
commit | a23264e1dc43b1250b9b5de541ff27bd49a2b2c1 (patch) | |
tree | fe10136a1ae57663254e92941a7c1a9d662e8588 /test/sql/test_compiler.py | |
parent | 706d4fcc4f69b74a502be41f5eea3fedd9413bc7 (diff) | |
download | sqlalchemy-a23264e1dc43b1250b9b5de541ff27bd49a2b2c1.tar.gz |
tests for <aggregate_fun> FILTER (WHERE ...)
Diffstat (limited to 'test/sql/test_compiler.py')
-rw-r--r-- | test/sql/test_compiler.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index d47b58f1f..6e730ad50 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -2190,6 +2190,70 @@ class SelectTest(fixtures.TestBase, AssertsCompiledSQL): "(ORDER BY mytable.myid + :myid_1) AS anon_1 FROM mytable" ) + def test_aggregate_filter(self): + self.assert_compile( + func.count(1).filter(), + "count(:param_1)" + ) + self.assert_compile( + func.count(1).filter( + table1.c.name != None + ), + "count(:param_1) FILTER (WHERE mytable.name IS NOT NULL)" + ) + self.assert_compile( + func.count(1).filter( + table1.c.name == None, + table1.c.myid > 0 + ), + "count(:param_1) FILTER (WHERE mytable.name IS NULL AND " + "mytable.myid > :myid_1)" + ) + + self.assert_compile( + select([func.count(1).filter( + table1.c.description != None + ).label('foo')]), + "SELECT count(:param_1) FILTER (WHERE mytable.description " + "IS NOT NULL) AS foo FROM mytable" + ) + + # test from_obj generation. + # from func: + self.assert_compile( + select([ + func.max(table1.c.name).filter( + literal_column('description') != None + ) + ]), + "SELECT max(mytable.name) FILTER (WHERE description " + "IS NOT NULL) AS anon_1 FROM mytable" + ) + # from criterion: + self.assert_compile( + select([ + func.count(1).filter( + table1.c.name == 'name' + ) + ]), + "SELECT count(:param_1) FILTER (WHERE mytable.name = :name_1) " + "AS anon_1 FROM mytable" + ) + + # test chaining: + self.assert_compile( + select([ + func.count(1).filter( + table1.c.name == 'name' + ).filter( + table1.c.description == 'description' + ) + ]), + "SELECT count(:param_1) FILTER (WHERE " + "mytable.name = :name_1 AND mytable.description = :description_1) " + "AS anon_1 FROM mytable" + ) + def test_date_between(self): import datetime table = Table('dt', metadata, |