summaryrefslogtreecommitdiff
path: root/test/sql/test_inspect.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-10-05 10:57:30 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-10-05 12:11:53 -0400
commit09b685b24b19636e11169c181b45333f9739ca35 (patch)
tree12f176c23ffb9f9f9de75e4fdb07ec8eed5611cb /test/sql/test_inspect.py
parent20384e894577bc6cd7e686a71e6e859207565d00 (diff)
downloadsqlalchemy-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.py10
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__')
+