summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES2
-rw-r--r--lib/sqlalchemy/orm/query.py22
-rw-r--r--test/orm/mapper.py14
3 files changed, 29 insertions, 9 deletions
diff --git a/CHANGES b/CHANGES
index 3dab91e90..e7938bdc8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -20,6 +20,8 @@
- removed "no group by's in a select thats part of a UNION"
restriction [ticket:578]
- orm
+ - fixed bug in query.instances() that wouldnt handle more than
+ on additional mapper or one additional column.
- "delete-orphan" no longer implies "delete". ongoing effort to
separate the behavior of these two operations.
- many-to-many relationships properly set the type of bind params
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 38279f5f2..74d4ceed7 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -882,16 +882,20 @@ class Query(object):
if isinstance(m, type):
m = mapper.class_mapper(m)
if isinstance(m, mapper.Mapper):
- appender = []
- def proc(context, row):
- if not m._instance(context, row, appender):
- appender.append(None)
- process.append((proc, appender))
+ def x(m):
+ appender = []
+ def proc(context, row):
+ if not m._instance(context, row, appender):
+ appender.append(None)
+ process.append((proc, appender))
+ x(m)
elif isinstance(m, sql.ColumnElement) or isinstance(m, basestring):
- res = []
- def proc(context, row):
- res.append(row[m])
- process.append((proc, res))
+ def y(m):
+ res = []
+ def proc(context, row):
+ res.append(row[m])
+ process.append((proc, res))
+ y(m)
result = []
else:
result = util.UniqueAppender([])
diff --git a/test/orm/mapper.py b/test/orm/mapper.py
index 4ce1be2fa..5c4efb6a9 100644
--- a/test/orm/mapper.py
+++ b/test/orm/mapper.py
@@ -1619,6 +1619,20 @@ class InstancesTest(MapperSuperTest):
(user8, 3),
(user9, 0)
]
+
+ def testmappersplustwocolumns(self):
+ mapper(User, users)
+ s = select([users, func.count(addresses.c.address_id).label('count'), ("Name:" + users.c.user_name).label('concat')], from_obj=[users.outerjoin(addresses)], group_by=[c for c in users.c], order_by=[users.c.user_id])
+ sess = create_session()
+ (user7, user8, user9) = sess.query(User).select()
+ q = sess.query(User)
+ l = q.instances(s.execute(), "count", "concat")
+ print l
+ assert l == [
+ (user7, 1, "Name:jack"),
+ (user8, 3, "Name:ed"),
+ (user9, 0, "Name:fred")
+ ]
if __name__ == "__main__":