diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-02 16:32:05 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-02 16:32:05 -0400 |
| commit | cfc12748348dc3e183edc16b1711ae3d466cc2e0 (patch) | |
| tree | 903f1df9b67b5128947c87d07c84d8ab4e08751e /test/ext/test_compiler.py | |
| parent | 301438235ecf8359a278e87b26d264d2e91b9702 (diff) | |
| download | sqlalchemy-cfc12748348dc3e183edc16b1711ae3d466cc2e0.tar.gz | |
- add some function examples, [ticket:2107]
- have "packagenames" be present on FunctionElement by default
so that compiler.visit_function() can be called
- add a test for that
Diffstat (limited to 'test/ext/test_compiler.py')
| -rw-r--r-- | test/ext/test_compiler.py | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/test/ext/test_compiler.py b/test/ext/test_compiler.py index 1f1273b07..0f53f2cb0 100644 --- a/test/ext/test_compiler.py +++ b/test/ext/test_compiler.py @@ -184,7 +184,7 @@ class UserDefinedTest(fixtures.TestBase, AssertsCompiledSQL): ) def test_functions(self): - from sqlalchemy.dialects.postgresql import base as postgresql + from sqlalchemy.dialects import postgresql class MyUtcFunction(FunctionElement): pass @@ -208,6 +208,39 @@ class UserDefinedTest(fixtures.TestBase, AssertsCompiledSQL): dialect=postgresql.dialect() ) + def test_function_calls_base(self): + from sqlalchemy.dialects import mssql + + class greatest(FunctionElement): + type = Numeric() + name = 'greatest' + + @compiles(greatest) + def default_greatest(element, compiler, **kw): + return compiler.visit_function(element) + + @compiles(greatest, 'mssql') + def case_greatest(element, compiler, **kw): + arg1, arg2 = list(element.clauses) + return "CASE WHEN %s > %s THEN %s ELSE %s END" % ( + compiler.process(arg1), + compiler.process(arg2), + compiler.process(arg1), + compiler.process(arg2), + ) + + self.assert_compile( + greatest('a', 'b'), + 'greatest(:greatest_1, :greatest_2)', + use_default_dialect=True + ) + self.assert_compile( + greatest('a', 'b'), + "CASE WHEN :greatest_1 > :greatest_2 " + "THEN :greatest_1 ELSE :greatest_2 END", + dialect=mssql.dialect() + ) + def test_subclasses_one(self): class Base(FunctionElement): name = 'base' |
