summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/query.py14
-rw-r--r--test/orm/test_query.py26
2 files changed, 26 insertions, 14 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 0afe622c1..28ddc1f13 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -1589,16 +1589,19 @@ class Query(object):
'name':'User',
'type':User,
'aliased':False,
+ 'expr':User,
},
{
'name':'id',
'type':Integer(),
- 'aliased':False
+ 'aliased':False,
+ 'expr':User.id,
},
{
'name':'user2',
'type':User,
- 'aliased':True
+ 'aliased':True,
+ 'expr':user_alias
}
]
@@ -1608,6 +1611,7 @@ class Query(object):
'name':ent._label_name,
'type':ent.type,
'aliased':getattr(ent, 'is_aliased_class', False),
+ 'expr':ent.expr
}
for ent in self._entities
]
@@ -2404,8 +2408,8 @@ class _MapperEntity(_QueryEntity):
query._entities.append(self)
self.entities = [entity]
- self.entity_zero = entity
-
+ self.entity_zero = self.expr = entity
+
def setup_entity(self, entity, mapper, adapter,
from_obj, is_aliased_class, with_polymorphic):
self.mapper = mapper
@@ -2553,6 +2557,8 @@ class _ColumnEntity(_QueryEntity):
"""Column/expression based entity."""
def __init__(self, query, column):
+ self.expr = column
+
if isinstance(column, basestring):
column = sql.literal_column(column)
self._label_name = column.name
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index 2933d1bc4..ba8112db0 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -80,38 +80,44 @@ class RowTupleTest(QueryTest):
user_alias = aliased(User)
address_alias = aliased(Address, name='aalias')
fn = func.count(User.id)
-
+ name_label = User.name.label('uname')
for q, asserted in [
(
sess.query(User),
- [{'name':'User', 'type':User, 'aliased':False}]
+ [{'name':'User', 'type':User, 'aliased':False, 'expr':User}]
),
(
sess.query(User.id, User),
[
- {'name':'id', 'type':users.c.id.type, 'aliased':False},
- {'name':'User', 'type':User, 'aliased':False}
+ {'name':'id', 'type':users.c.id.type, 'aliased':False,
+ 'expr':User.id},
+ {'name':'User', 'type':User, 'aliased':False, 'expr':User}
]
),
(
sess.query(User.id, user_alias),
[
- {'name':'id', 'type':users.c.id.type, 'aliased':False},
- {'name':None, 'type':User, 'aliased':True}
+ {'name':'id', 'type':users.c.id.type, 'aliased':False,
+ 'expr':User.id},
+ {'name':None, 'type':User, 'aliased':True,
+ 'expr':user_alias}
]
),
(
sess.query(address_alias),
[
- {'name':'aalias', 'type':Address, 'aliased':True}
+ {'name':'aalias', 'type':Address, 'aliased':True,
+ 'expr':address_alias}
]
),
(
- sess.query(User.name.label('uname'), fn),
+ sess.query(name_label, fn),
[
{'name':'uname', 'type':users.c.name.type,
- 'aliased':False},
- {'name':None, 'type':fn.type, 'aliased':False},
+ 'aliased':False,'expr':name_label},
+ {'name':None, 'type':fn.type, 'aliased':False,
+ 'expr':fn
+ },
]
)
]: