Don't put many2one in the search cache (too slow) and externalize some
function result outside the loop
This commit is contained in:
1 parent
d92cb527ae
commit
1946063a5d
1 file changed
+14
-27
+14
-27
@@ -1217,37 +1217,24 @@ class ModelSQL(ModelStorage):
|
||||
datas = cursor.dictfetchall()
|
||||
cache = cursor.get_cache(context)
|
||||
cache.setdefault(self._name, {})
|
||||
delete_records = context.setdefault('_delete_records', {}
|
||||
).setdefault(self._name, set())
|
||||
keys = None
|
||||
for data in datas:
|
||||
if data['id'] in context.setdefault('_delete_records', {})\
|
||||
.setdefault(self._name, set()):
|
||||
if data['id'] in delete_records:
|
||||
continue
|
||||
for i in data.keys():
|
||||
if i in ('_timestamp', '_datetime'):
|
||||
continue
|
||||
field = self._columns[i]
|
||||
if field._type in ('many2one',):
|
||||
if field.model_name not in self.pool.object_name_list():
|
||||
del data[i]
|
||||
if not keys:
|
||||
keys = data.keys()
|
||||
for k in keys[:]:
|
||||
if k in ('_timestamp', '_datetime'):
|
||||
keys.remove(k)
|
||||
continue
|
||||
if data[i] in context.setdefault('_delete_records', {})\
|
||||
.setdefault(field.model_name, set()):
|
||||
del data[i]
|
||||
field = self._columns[k]
|
||||
if field._type not in ('many2one',):
|
||||
keys.remove(k)
|
||||
continue
|
||||
model = self.pool.get(field.model_name)
|
||||
if not data[i] and not (isinstance(data[i], (int, long))
|
||||
and not isinstance(data[i], type(False))):
|
||||
data[i] = BrowseRecordNull()
|
||||
else:
|
||||
ctx = context
|
||||
if hasattr(field, 'datetime_field') \
|
||||
and field.datetime_field:
|
||||
ctx = context.copy()
|
||||
if field.datetime_field not in data:
|
||||
del data[i]
|
||||
continue
|
||||
ctx['_datetime'] = data[field.datetime_field]
|
||||
data[i] = BrowseRecord(cursor, user, data[i],
|
||||
model, context=ctx)
|
||||
for k in keys:
|
||||
del data[k]
|
||||
cache[self._name].setdefault(data['id'], {})
|
||||
cache[self._name][data['id']].update(data)
|
||||
|
||||
|
||||
Reference in new issue
Block a user