Skip to content

Commit

Permalink
[IMP] base: compute implied groups in SQL
Browse files Browse the repository at this point in the history
SQL improve the speed of the implied group
VS the orm version.

closes odoo#30108
  • Loading branch information
KangOl authored and nseinlet committed Jan 10, 2019
1 parent b131658 commit 5f12e24
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions odoo/addons/base/res/res_users.py
Original file line number Diff line number Diff line change
Expand Up @@ -657,8 +657,26 @@ def write(self, values):
if values.get('users') or values.get('implied_ids'):
# add all implied groups (to all users of each group)
for group in self:
vals = {'users': zip(repeat(4), group.with_context(active_test=False).users.ids)}
super(GroupsImplied, group.trans_implied_ids).write(vals)
self._cr.execute("""
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


Expand Down

0 comments on commit 5f12e24

Please sign in to comment.