diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-05 13:59:58 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-05 16:47:31 -0400 |
| commit | 71030d67bd7c7948ef4a4d868821703ef5a57476 (patch) | |
| tree | 7872a83afaafc414fa13d572a634dd690f4d9824 /test | |
| parent | 09b685b24b19636e11169c181b45333f9739ca35 (diff) | |
| download | sqlalchemy-71030d67bd7c7948ef4a4d868821703ef5a57476.tar.gz | |
Propagate execution_options at compile stage
Compiler can now set up execution options and additionally
will propagate autocommit from embedded CTEs.
Change-Id: I19db7b8fe4d84549ea95342e8d2040189fed1bbe
Fixes: #3805
Diffstat (limited to 'test')
| -rw-r--r-- | test/sql/test_compiler.py | 33 | ||||
| -rw-r--r-- | test/sql/test_cte.py | 9 |
2 files changed, 41 insertions, 1 deletions
diff --git a/test/sql/test_compiler.py b/test/sql/test_compiler.py index 6896c9857..a85786bed 100644 --- a/test/sql/test_compiler.py +++ b/test/sql/test_compiler.py @@ -2822,6 +2822,39 @@ class KwargPropagationTest(fixtures.TestBase): self._do_test(c) +class ExecutionOptionsTest(fixtures.TestBase): + def test_non_dml(self): + stmt = table1.select() + compiled = stmt.compile() + + eq_(compiled.execution_options, {}) + + def test_dml(self): + stmt = table1.insert() + compiled = stmt.compile() + + eq_(compiled.execution_options, {"autocommit": True}) + + def test_embedded_element_true_to_none(self): + stmt = table1.insert().cte() + eq_(stmt._execution_options, {"autocommit": True}) + s2 = select([table1]).select_from(stmt) + eq_(s2._execution_options, {}) + + compiled = s2.compile() + eq_(compiled.execution_options, {"autocommit": True}) + + def test_embedded_element_true_to_false(self): + stmt = table1.insert().cte() + eq_(stmt._execution_options, {"autocommit": True}) + s2 = select([table1]).select_from(stmt).\ + execution_options(autocommit=False) + eq_(s2._execution_options, {"autocommit": False}) + + compiled = s2.compile() + eq_(compiled.execution_options, {"autocommit": False}) + + class CRUDTest(fixtures.TestBase, AssertsCompiledSQL): __dialect__ = 'default' diff --git a/test/sql/test_cte.py b/test/sql/test_cte.py index 35d455257..f81a1d8e5 100644 --- a/test/sql/test_cte.py +++ b/test/sql/test_cte.py @@ -1,4 +1,4 @@ -from sqlalchemy.testing import fixtures +from sqlalchemy.testing import fixtures, eq_ from sqlalchemy.testing import AssertsCompiledSQL, assert_raises_message from sqlalchemy.sql import table, column, select, func, literal, exists, and_ from sqlalchemy.dialects import mssql @@ -589,6 +589,8 @@ class CTETest(fixtures.TestBase, AssertsCompiledSQL): t = products.update().values(price='someprice').\ returning(*products.c).cte('t') stmt = t.select() + assert 'autocommit' not in stmt._execution_options + eq_(stmt.compile().execution_options['autocommit'], True) self.assert_compile( stmt, @@ -648,6 +650,9 @@ class CTETest(fixtures.TestBase, AssertsCompiledSQL): stmt = select([cte]) + assert 'autocommit' not in stmt._execution_options + eq_(stmt.compile().execution_options['autocommit'], True) + self.assert_compile( stmt, "WITH pd AS " @@ -661,8 +666,10 @@ class CTETest(fixtures.TestBase, AssertsCompiledSQL): products = table('products', column('id'), column('price')) cte = products.select().cte('pd') + assert 'autocommit' not in cte._execution_options stmt = products.update().where(products.c.price == cte.c.price) + eq_(stmt.compile().execution_options['autocommit'], True) self.assert_compile( stmt, |
