Merge lp:~openerp-dev/openobject-server/6.1-sale-mrp-perf-mat into lp:openobject-server/6.1

Proposed by Martin Trigaux (OpenERP)
Status: Needs review
Proposed branch: lp:~openerp-dev/openobject-server/6.1-sale-mrp-perf-mat
Merge into: lp:openobject-server/6.1
Diff against target: 43 lines (+12/-6)
1 file modified
openerp/osv/orm.py (+12/-6)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.1-sale-mrp-perf-mat
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+190553@code.launchpad.net

Description of the change

Tryning to improve performances of sale confirmation, opw 598233

To post a comment you must log in.

Unmerged revisions

4365. By Martin Trigaux (OpenERP)

[IMP] orm: backward port of revision 5091 and 5092 improving performances of stored fields

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openerp/osv/orm.py'
2--- openerp/osv/orm.py 2013-06-20 14:02:50 +0000
3+++ openerp/osv/orm.py 2013-10-11 08:34:57 +0000
4@@ -998,8 +998,10 @@
5 raise except_orm('Error',
6 ('Invalid function definition %s in object %s !\nYou must use the definition: store={object:(fnct, fields, priority, time length)}.' % (store_field, self._name)))
7 self.pool._store_function.setdefault(object, [])
8- self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
9- self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
10+ t = (self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length)
11+ if not t in self.pool._store_function[object]:
12+ self.pool._store_function[object].append((self._name, store_field, fnct, tuple(fields2) if fields2 else None, order, length))
13+ self.pool._store_function[object].sort(lambda x, y: cmp(x[4], y[4]))
14
15 for (key, _, msg) in self._sql_constraints:
16 self.pool._sql_error[self._table+'_'+key] = msg
17@@ -4290,9 +4292,13 @@
18 if ((not f[trigger_fields_]) or set(fields).intersection(f[trigger_fields_]))]
19
20 mapping = {}
21+ fresults = {}
22 for function in to_compute:
23- # use admin user for accessing objects having rules defined on store fields
24- target_ids = [id for id in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id]
25+ fid = id(function[id_mapping_fnct_])
26+ if not fid in fresults:
27+ # use admin user for accessing objects having rules defined on store fields
28+ fresults[fid] = [id2 for id2 in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id2]
29+ target_ids = fresults[fid]
30
31 # the compound key must consider the priority and model name
32 key = (function[priority_], function[model_name_])
33@@ -4313,8 +4319,8 @@
34 functions_ids_maps = {}
35 # function_ids_maps =
36 # { (function_1_tuple, function_2_tuple) : [target_id1, target_id2, ..] }
37- for id, functions in id_map.iteritems():
38- functions_ids_maps.setdefault(tuple(functions), []).append(id)
39+ for fid, functions in id_map.iteritems():
40+ functions_ids_maps.setdefault(tuple(functions), []).append(fid)
41 for functions, ids in functions_ids_maps.iteritems():
42 call_map.setdefault((priority,model),[]).append((priority, model, ids,
43 [f[func_field_to_compute_] for f in functions]))