diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-07-29 18:17:43 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-07-30 10:11:53 -0400 |
commit | 6327c59d4f34947128bd9b2860a1732a6932b4d7 (patch) | |
tree | 8b68fce14fa450737c6278437f2af75fb7095e1e /lib | |
parent | e467e899e126db2db7c25d533aee12d78c2dbdfb (diff) | |
download | sqlalchemy-6327c59d4f34947128bd9b2860a1732a6932b4d7.tar.gz |
Index should extract __clause_element__() early
Fixed bug where :class:`.Index` would fail to extract columns from
compound SQL expressions if those SQL expressions were wrapped inside
of an ORM-style ``__clause_element__()`` construct. This bug
exists in 1.0.x as well, however in 1.1 is more noticeable as
hybrid_property @expression now returns a wrapped element.
Fixes: #3763
Change-Id: I992536386503a1fb3f2305790abe008d72c44c4a
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqlalchemy/sql/schema.py | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 55d0b74e6..2c5daa17c 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -2505,7 +2505,10 @@ class ColumnCollectionMixin(object): for expr in expressions: strname = None column = None - if not isinstance(expr, ClauseElement): + if hasattr(expr, '__clause_element__'): + expr = expr.__clause_element__() + + if not isinstance(expr, (ColumnElement, TextClause)): # this assumes a string strname = expr else: |