summaryrefslogtreecommitdiff
path: root/test/ext/test_compiler.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-03-30 10:39:36 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-03-30 10:39:36 -0400
commit43b9f0d116580474ac56c532a1427a4cdeb3748b (patch)
treeb5c24bcd36add1e5ac2c0778df787ccf745cca45 /test/ext/test_compiler.py
parent75e14f855ee64a01bb79e66f8a868911f6c9e583 (diff)
downloadsqlalchemy-43b9f0d116580474ac56c532a1427a4cdeb3748b.tar.gz
- the compiler extension now allows @compiles decorators
on base classes that extend to child classes, @compiles decorators on child classes that aren't broken by a @compiles decorator on the base class.
Diffstat (limited to 'test/ext/test_compiler.py')
-rw-r--r--test/ext/test_compiler.py57
1 files changed, 56 insertions, 1 deletions
diff --git a/test/ext/test_compiler.py b/test/ext/test_compiler.py
index d625ae0ca..2d33b382a 100644
--- a/test/ext/test_compiler.py
+++ b/test/ext/test_compiler.py
@@ -176,6 +176,61 @@ class UserDefinedTest(TestBase, AssertsCompiledSQL):
"timezone('utc', current_timestamp)",
dialect=postgresql.dialect()
)
-
+
+ def test_subclasses_one(self):
+ class Base(FunctionElement):
+ name = 'base'
+
+ class Sub1(Base):
+ name = 'sub1'
+
+ class Sub2(Base):
+ name = 'sub2'
+
+ @compiles(Base)
+ def visit_base(element, compiler, **kw):
+ return element.name
+
+ @compiles(Sub1)
+ def visit_base(element, compiler, **kw):
+ return "FOO" + element.name
+
+ self.assert_compile(
+ select([Sub1(), Sub2()]),
+ 'SELECT FOOsub1, sub2',
+ use_default_dialect=True
+ )
+
+ def test_subclasses_two(self):
+ class Base(FunctionElement):
+ name = 'base'
+ class Sub1(Base):
+ name = 'sub1'
+
+ @compiles(Base)
+ def visit_base(element, compiler, **kw):
+ return element.name
+
+ class Sub2(Base):
+ name = 'sub2'
+
+ class SubSub1(Sub1):
+ name = 'subsub1'
+
+ self.assert_compile(
+ select([Sub1(), Sub2(), SubSub1()]),
+ 'SELECT sub1, sub2, subsub1',
+ use_default_dialect=True
+ )
+
+ @compiles(Sub1)
+ def visit_base(element, compiler, **kw):
+ return "FOO" + element.name
+
+ self.assert_compile(
+ select([Sub1(), Sub2(), SubSub1()]),
+ 'SELECT FOOsub1, sub2, FOOsubsub1',
+ use_default_dialect=True
+ )
\ No newline at end of file