[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:
committed by
Raphael Collet
parent
681ff1aec1
commit
dcc752aaab
+4
-3
@@ -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``.
|
||||
|
||||
Reference in New Issue
Block a user