summaryrefslogtreecommitdiff
path: root/test/ext/test_compiler.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-04-02 16:32:05 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2011-04-02 16:32:05 -0400
commitcfc12748348dc3e183edc16b1711ae3d466cc2e0 (patch)
tree903f1df9b67b5128947c87d07c84d8ab4e08751e /test/ext/test_compiler.py
parent301438235ecf8359a278e87b26d264d2e91b9702 (diff)
downloadsqlalchemy-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.py35
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'