summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-06-11 16:48:00 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-06-11 16:48:00 -0400
commite765c55e8cc71bb3773b86b5260df6cb69aff102 (patch)
treedcfa5fec47b29336b2bedb49f87e1772f3b23069 /lib/sqlalchemy/orm
parenta463bb31ea8a93ffd15e4fb7cc71d84c4d206572 (diff)
downloadsqlalchemy-e765c55e8cc71bb3773b86b5260df6cb69aff102.tar.gz
- Fixed an unexpected-use regression whereby custom :class:`.Comparator`
objects that made use of the ``__clause_element__()`` method and returned an object that was an ORM-mapped :class:`.InstrumentedAttribute` and not explicitly a :class:`.ColumnElement` would fail to be correctly handled when passed as an expression to :meth:`.Session.query`. The logic in 0.9 happened to succeed on this, so this use case is now supported. fixes #3448
Diffstat (limited to 'lib/sqlalchemy/orm')
-rw-r--r--lib/sqlalchemy/orm/query.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 8421e42ac..4f8c86a14 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -3539,11 +3539,13 @@ class _ColumnEntity(_QueryEntity):
self.expr = column
self.namespace = namespace
search_entities = True
+ check_column = False
if isinstance(column, util.string_types):
column = sql.literal_column(column)
self._label_name = column.name
search_entities = False
+ check_column = True
_entity = None
elif isinstance(column, (
attributes.QueryableAttribute,
@@ -3554,10 +3556,12 @@ class _ColumnEntity(_QueryEntity):
search_entities = False
self._label_name = column.key
column = column._query_clause_element()
+ check_column = True
if isinstance(column, Bundle):
_BundleEntity(query, column)
return
- elif not isinstance(column, sql.ColumnElement):
+
+ if not isinstance(column, sql.ColumnElement):
if hasattr(column, '_select_iterable'):
# break out an object like Table into
# individual columns
@@ -3572,7 +3576,7 @@ class _ColumnEntity(_QueryEntity):
"SQL expression, column, or mapped entity "
"expected - got '%r'" % (column, )
)
- else:
+ elif not check_column:
self._label_name = getattr(column, 'key', None)
search_entities = True