diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-30 10:39:36 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-30 10:39:36 -0400 |
commit | 43b9f0d116580474ac56c532a1427a4cdeb3748b (patch) | |
tree | b5c24bcd36add1e5ac2c0778df787ccf745cca45 /test/ext/test_compiler.py | |
parent | 75e14f855ee64a01bb79e66f8a868911f6c9e583 (diff) | |
download | sqlalchemy-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.py | 57 |
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 |