From 555ab611f159d40af9653e8dcd53bf92fd2bd592 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 20 May 2007 16:40:21 +0000 Subject: [PATCH] - fixed bug in query.instances() that wouldnt handle more than on additional mapper or one additional column. --- CHANGES | 2 ++ lib/sqlalchemy/orm/query.py | 22 +++++++++++++--------- test/orm/mapper.py | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/CHANGES b/CHANGES index 3dab91e901..e7938bdc85 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 38279f5f21..74d4ceed71 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 4ce1be2fa7..5c4efb6a9c 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__": -- 2.47.2