[IMP] models: use raw sql for modified()

Avoiding search makes modified go from 18% of total runtime to 9% over
10k calls (though only 5k search() call).
This commit is contained in:
Xavier Morel
2018-09-11 16:43:55 +02:00
committed by xmo-odoo
parent edb34ee27a
commit 7f29b31cf3
+10 -3
View File
@@ -5108,9 +5108,16 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
if path == 'id':
target0 = self
else:
env = self.env(user=SUPERUSER_ID, context={'active_test': False})
target0 = env[model_name].search([(path, 'in', self.ids)])
target0 = target0.with_env(self.env)
Model = self.env[model_name]
f = Model._fields.get(path)
if f and f.store and f.type not in ('one2many', 'many2many'):
# path is direct (not dotted), stored, and inline -> optimise to raw sql
self.env.cr.execute("SELECT id FROM %s WHERE %s in %%s" % (Model._table, path), [tuple(self.ids)])
target0 = Model.browse(i for [i] in self.env.cr.fetchall())
else:
env = self.env(user=SUPERUSER_ID, context={'active_test': False})
target0 = env[model_name].search([(path, 'in', self.ids)])
target0 = target0.with_env(self.env)
# prepare recomputation for each field on linked records
for field in stored:
# discard records to not recompute for field