diff options
Diffstat (limited to 'test/sql/test_lambdas.py')
| -rw-r--r-- | test/sql/test_lambdas.py | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/sql/test_lambdas.py b/test/sql/test_lambdas.py index 51530b079..2e794d7bc 100644 --- a/test/sql/test_lambdas.py +++ b/test/sql/test_lambdas.py @@ -17,6 +17,7 @@ from sqlalchemy.sql import roles from sqlalchemy.sql import select from sqlalchemy.sql import table from sqlalchemy.sql import util as sql_util +from sqlalchemy.sql.traversals import HasCacheKey from sqlalchemy.testing import assert_raises_message from sqlalchemy.testing import AssertsCompiledSQL from sqlalchemy.testing import eq_ @@ -953,6 +954,63 @@ class LambdaElementTest( eq_(s1key.key, s2key.key) ne_(s1key.key, s3key.key) + def test_stmt_lambda_opt_w_key(self): + """test issue related to #6887""" + + def go(opts): + stmt = lambdas.lambda_stmt(lambda: select(column("x"))) + stmt += lambda stmt: stmt.options(*opts) + + return stmt + + class SomeOpt(HasCacheKey): + def _gen_cache_key(self, anon_map, bindparams): + return ("fixed_key",) + + # generates no key, will not be cached + eq_(SomeOpt()._generate_cache_key().key, ("fixed_key",)) + + s1o, s2o = SomeOpt(), SomeOpt() + s1 = go([s1o]) + s2 = go([s2o]) + + s1key = s1._generate_cache_key() + s2key = s2._generate_cache_key() + + eq_(s1key.key[-1], (("fixed_key",),)) + eq_(s1key.key, s2key.key) + + eq_(s1._resolved._with_options, (s1o,)) + eq_(s2._resolved._with_options, (s1o,)) + ne_(s2._resolved._with_options, (s2o,)) + + def test_stmt_lambda_opt_w_no_key(self): + """test issue related to #6887""" + + def go(opts): + stmt = lambdas.lambda_stmt(lambda: select(column("x"))) + stmt += lambda stmt: stmt.options(*opts) + + return stmt + + class SomeOpt(HasCacheKey): + pass + + # generates no key, will not be cached + eq_(SomeOpt()._generate_cache_key(), None) + + s1o, s2o = SomeOpt(), SomeOpt() + s1 = go([s1o]) + s2 = go([s2o]) + + s1key = s1._generate_cache_key() + + eq_(s1key, None) + + eq_(s1._resolved._with_options, (s1o,)) + eq_(s2._resolved._with_options, (s2o,)) + ne_(s2._resolved._with_options, (s1o,)) + def test_stmt_lambda_hey_theres_multiple_paths(self): def go(x, y): stmt = lambdas.lambda_stmt(lambda: select(column("x"))) |
