[IMP] models: faster browse records iteration

By avoiding to update the prefetch ids for each record when iterating on
recordsets.  This is faster when iterating on very large recordsets.
This commit is contained in:
Denis Ledoux
2019-02-11 15:49:21 +00:00
committed by Raphael Collet
parent 681ff1aec1
commit dcc752aaab
+4 -3
View File
@@ -4314,7 +4314,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
#
@classmethod
def _browse(cls, ids, env, prefetch=None):
def _browse(cls, ids, env, prefetch=None, add_prefetch=True):
""" Create a recordset instance.
:param ids: a tuple of record ids
@@ -4327,7 +4327,8 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
if prefetch is None:
prefetch = defaultdict(set) # {model_name: set(ids)}
records._prefetch = prefetch
prefetch[cls._name].update(ids)
if add_prefetch:
prefetch[cls._name].update(ids)
return records
def browse(self, arg=None, prefetch=None):
@@ -4634,7 +4635,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
def __iter__(self):
""" Return an iterator over ``self``. """
for id in self._ids:
yield self._browse((id,), self.env, self._prefetch)
yield self._browse((id,), self.env, self._prefetch, False)
def __contains__(self, item):
""" Test whether ``item`` (record or field name) is an element of ``self``.