diff options
Diffstat (limited to 'test/sql/test_compiler.py')
-rw-r--r-- | test/sql/test_compiler.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index ef2f75b2d..c9e1d9ab4 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -77,6 +77,7 @@ from sqlalchemy.sql import operators from sqlalchemy.sql import table from sqlalchemy.sql import util as sql_util from sqlalchemy.sql.elements import BooleanClauseList +from sqlalchemy.sql.expression import ClauseElement from sqlalchemy.sql.expression import ClauseList from sqlalchemy.sql.expression import HasPrefixes from sqlalchemy.testing import assert_raises @@ -158,6 +159,53 @@ keyed = Table( ) +class TestCompilerFixture(fixtures.TestBase, AssertsCompiledSQL): + def test_dont_access_statement(self): + def visit_foobar(self, element, **kw): + self.statement.table + + class Foobar(ClauseElement): + __visit_name__ = "foobar" + + with mock.patch.object( + testing.db.dialect.statement_compiler, + "visit_foobar", + visit_foobar, + create=True, + ): + assert_raises_message( + NotImplementedError, + "compiler accessed .statement; use " + "compiler.current_executable", + self.assert_compile, + Foobar(), + "", + ) + + def test_no_stack(self): + def visit_foobar(self, element, **kw): + self.current_executable.table + + class Foobar(ClauseElement): + __visit_name__ = "foobar" + + with mock.patch.object( + testing.db.dialect.statement_compiler, + "visit_foobar", + visit_foobar, + create=True, + ): + compiler = testing.db.dialect.statement_compiler( + testing.db.dialect, None + ) + assert_raises_message( + IndexError, + "Compiler does not have a stack entry", + compiler.process, + Foobar(), + ) + + class SelectTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = "default" |