diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-05 10:57:30 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-10-05 12:11:53 -0400 |
commit | 09b685b24b19636e11169c181b45333f9739ca35 (patch) | |
tree | 12f176c23ffb9f9f9de75e4fdb07ec8eed5611cb /test/sql/test_inspect.py | |
parent | 20384e894577bc6cd7e686a71e6e859207565d00 (diff) | |
download | sqlalchemy-09b685b24b19636e11169c181b45333f9739ca35.tar.gz |
Check for __clause_element__() in ORM insert/update
ORM attributes can now be assigned any object that is has a
``__clause_element__()`` attribute, which will result in inline
SQL the way any :class:`.ClauseElement` class does. This covers other
mapped attributes not otherwise transformed by further expression
constructs.
As part of this, it was considered that we could add
__clause_element__() to ClauseElement, however this causes endless loops
in a "while" pattern and this pattern has been identified in third
party libraries. Add a test to ensure we never make that change.
Change-Id: I9e15b3f1c4883fd3909acbf7dc81d034c6e3ce1d
Fixes: #3802
Diffstat (limited to 'test/sql/test_inspect.py')
-rw-r--r-- | test/sql/test_inspect.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/test/sql/test_inspect.py b/test/sql/test_inspect.py index d5a9a71ae..12d377e51 100644 --- a/test/sql/test_inspect.py +++ b/test/sql/test_inspect.py @@ -32,3 +32,13 @@ class TestCoreInspection(fixtures.TestBase): is_(inspect(c), c) assert not c.is_selectable assert not hasattr(c, 'selectable') + + def test_no_clause_element_on_clauseelement(self): + # re [ticket:3802], there are in the wild examples + # of looping over __clause_element__, therefore the + # absense of __clause_element__ as a test for "this is the clause + # element" must be maintained + + x = Column('foo', Integer) + assert not hasattr(x, '__clause_element__') + |