Don't use an sql query to delete target models if not ModelSQL

issue6525
review35431002
This commit is contained in:
Sergi Almacellas Abellana committed 2017-06-30 09:46:21 +02:00
1 parent a53883484e
commit 1aae453480
1 file changed
+19 -16
+19 -16
View File
@@ -1051,6 +1051,19 @@ class ModelSQL(ModelStorage):
cls.trigger_delete(records)
def get_related_records(Model, field_name, sub_ids):
if issubclass(Model, ModelSQL):
foreign_table = Model.__table__()
foreign_red_sql = reduce_ids(
Column(foreign_table, field_name), sub_ids)
cursor.execute(*foreign_table.select(foreign_table.id,
where=foreign_red_sql))
records = Model.browse([x[0] for x in cursor.fetchall()])
else:
with transaction.set_context(active_test=False):
records = Model.search([(field_name, 'in', sub_ids)])
return records
for sub_ids, sub_records in izip(
grouped_slice(ids), grouped_slice(records)):
sub_ids = list(sub_ids)
@@ -1063,14 +1076,9 @@ class ModelSQL(ModelStorage):
if (not hasattr(Model, 'search')
or not hasattr(Model, 'write')):
continue
foreign_table = Model.__table__()
foreign_red_sql = reduce_ids(
Column(foreign_table, field_name), sub_ids)
cursor.execute(*foreign_table.select(foreign_table.id,
where=foreign_red_sql))
models = Model.browse([x[0] for x in cursor.fetchall()])
if models:
Model.write(models, {
records = get_related_records(Model, field_name, sub_ids)
if records:
Model.write(records, {
field_name: None,
})
@@ -1078,14 +1086,9 @@ class ModelSQL(ModelStorage):
if (not hasattr(Model, 'search')
or not hasattr(Model, 'delete')):
continue
foreign_table = Model.__table__()
foreign_red_sql = reduce_ids(
Column(foreign_table, field_name), sub_ids)
cursor.execute(*foreign_table.select(foreign_table.id,
where=foreign_red_sql))
models = Model.browse([x[0] for x in cursor.fetchall()])
if models:
Model.delete(models)
records = get_related_records(Model, field_name, sub_ids)
if records:
Model.delete(records)
for Model, field_name in foreign_keys_tocheck:
with Transaction().set_context(_check_access=False):