Fix sorting for aliased

This commit is contained in:
Oskari Lehto
2015-08-04 12:24:50 +03:00
committed by Konsta Vesterinen
parent 4cde5438a5
commit 46038334d2
3 changed files with 29 additions and 0 deletions

View File

@@ -672,6 +672,9 @@ def get_descriptor(entity, attr):
else:
# Handle synonyms, relationship properties and hybrid
# properties
if isinstance(entity, sa.orm.util.AliasedClass):
return getattr(entity, attr)
try:
return getattr(mapper.class_, attr)
except AttributeError:

View File

@@ -75,6 +75,15 @@ class TestCase(object):
__tablename__ = 'category'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.Unicode(255))
title = sa.Column(sa.Unicode(255))
@hybrid_property
def full_name(self):
return u'%s %s' % (self.title, self.name)
@full_name.expression
def full_name(self):
return sa.func.concat(self.title, ' ', self.name)
@hybrid_property
def articles_count(self):

View File

@@ -211,6 +211,23 @@ class TestSortQueryRelationshipCounts(TestCase):
query = sort_query(query, '-categories-articles_count')
assert_contains('ORDER BY (SELECT count(article.id) AS count_1', query)
def test_aliased_concat_hybrid_property(self):
alias = sa.orm.aliased(
self.Category,
name='aliased'
)
query = (
self.session.query(self.Article)
.outerjoin(alias, self.Article.category)
.options(
sa.orm.contains_eager(self.Article.category, alias=alias)
)
)
query = sort_query(query, 'aliased-full_name')
assert_contains(
'concat(aliased.title, :param_1, aliased.name)', query
)
class TestSortQueryWithPolymorphicInheritance(TestCase):
"""