[FIX] models: performance of `mapped` is now in O(n) instead of O(n²)

This commit is contained in:
Raphael Collet 2015-09-04 16:09:56 +02:00
parent ba8ef420eb
commit fa427f15b7
1 changed files with 5 additions and 1 deletions

View File

@ -5363,7 +5363,11 @@ class BaseModel(object):
"""
if self:
vals = [func(rec) for rec in self]
return reduce(operator.or_, vals) if isinstance(vals[0], BaseModel) else vals
if isinstance(vals[0], BaseModel):
# return the union of all recordsets in O(n)
ids = set(itertools.chain(*[rec._ids for rec in vals]))
return vals[0].browse(ids)
return vals
else:
vals = func(self)
return vals if isinstance(vals, BaseModel) else []