summaryrefslogtreecommitdiff
path: root/test/sql/test_operators.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-11-18 10:38:02 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-11-18 10:38:02 -0500
commit1e29a74bd62c6c872819388e430901c35f84f07c (patch)
tree98fedf95477a04dd2adf570aba965e248935570d /test/sql/test_operators.py
parent0f56aa56c5de13ab14bd8e8d03b6e785c39a5bf0 (diff)
downloadsqlalchemy-1e29a74bd62c6c872819388e430901c35f84f07c.tar.gz
Fixed a gotcha where inadvertently calling list() on a
:class:`.ColumnElement` would go into an endless loop, if :meth:`.ColumnOperators.__getitem__` were implemented. A new NotImplementedError is emitted via ``__iter__()``.
Diffstat (limited to 'test/sql/test_operators.py')
-rw-r--r--test/sql/test_operators.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/sql/test_operators.py b/test/sql/test_operators.py
index eb2885658..9da9d94c3 100644
--- a/test/sql/test_operators.py
+++ b/test/sql/test_operators.py
@@ -325,6 +325,18 @@ class ExtensionOperatorTest(fixtures.TestBase, testing.AssertsCompiledSQL):
"x -> :x_1"
)
+ def test_no_endless_list_call(self):
+ class MyType(UserDefinedType):
+ class comparator_factory(UserDefinedType.Comparator):
+ def __getitem__(self, index):
+ return self.op("->")(index)
+
+ assert_raises_message(
+ NotImplementedError,
+ "Class <class 'sqlalchemy.schema.Column'> is not iterable",
+ list, Column('x', MyType())
+ )
+
def test_lshift(self):
class MyType(UserDefinedType):
class comparator_factory(UserDefinedType.Comparator):