From fa427f15b71ce13fc91cc39b852a9c70c1c6da7e Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Fri, 4 Sep 2015 16:09:56 +0200 Subject: [PATCH] =?UTF-8?q?[FIX]=20models:=20performance=20of=20`mapped`?= =?UTF-8?q?=20is=20now=20in=20O(n)=20instead=20of=20O(n=C2=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openerp/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openerp/models.py b/openerp/models.py index fe901078e62..38d4423f3e7 100644 --- a/openerp/models.py +++ b/openerp/models.py @@ -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 []