[IMP] base: compute implied groups in SQL
SQL improve the speed of the implied group VS the orm version. closes odoo/odoo#30108
This commit is contained in:
committed by
Nicolas Seinlet
parent
b131658966
commit
5f12e244f6
@@ -657,8 +657,26 @@ class GroupsImplied(models.Model):
|
|||||||
if values.get('users') or values.get('implied_ids'):
|
if values.get('users') or values.get('implied_ids'):
|
||||||
# add all implied groups (to all users of each group)
|
# add all implied groups (to all users of each group)
|
||||||
for group in self:
|
for group in self:
|
||||||
vals = {'users': zip(repeat(4), group.with_context(active_test=False).users.ids)}
|
self._cr.execute("""
|
||||||
super(GroupsImplied, group.trans_implied_ids).write(vals)
|
WITH RECURSIVE group_imply(gid, hid) AS (
|
||||||
|
SELECT gid, hid
|
||||||
|
FROM res_groups_implied_rel
|
||||||
|
UNION
|
||||||
|
SELECT i.gid, r.hid
|
||||||
|
FROM res_groups_implied_rel r
|
||||||
|
JOIN group_imply i ON (i.hid = r.gid)
|
||||||
|
)
|
||||||
|
INSERT INTO res_groups_users_rel (gid, uid)
|
||||||
|
SELECT i.hid, r.uid
|
||||||
|
FROM group_imply i, res_groups_users_rel r
|
||||||
|
WHERE r.gid = i.gid
|
||||||
|
AND i.gid = %(gid)s
|
||||||
|
EXCEPT
|
||||||
|
SELECT r.gid, r.uid
|
||||||
|
FROM res_groups_users_rel r
|
||||||
|
JOIN group_imply i ON (r.gid = i.hid)
|
||||||
|
WHERE i.gid = %(gid)s
|
||||||
|
""", dict(gid=group.id))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user