x
1
BEGIN
2
DECLARE childGIDs TEXT;
3
DECLARE parentGIDs TEXT;
4
DECLARE selfAndChildGIDs TEXT;
5
DECLARE tempGID VARCHAR(1000);
6
DECLARE permissionID INT DEFAULT 0;
7
DECLARE done INT DEFAULT FALSE;
8
DECLARE cur CURSOR FOR SELECT `variable` FROM tmpSplit;
9
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
10
11
SELECT children FROM masterGroups WHERE groupID=GID INTO childGIDs;
12
SELECT CONCAT(childGIDs, GID, ',') INTO selfAndChildGIDs;
13
SELECT parents FROM masterGroups WHERE groupID=GID INTO parentGIDs;
14
15
DELETE FROM subGroups WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
16
DELETE FROM masterGroups WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
17
DELETE FROM subGroupsContacts WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
18
DELETE FROM subGroupsNetworkDevices WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
19
DELETE FROM subGroupWChildren WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
20
DELETE FROM subGroupWChildrenContacts WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
21
DELETE FROM subGroupWChildrenNetworkDevices WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
22
DELETE FROM groupAgents WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
23
DELETE FROM groupDAgents WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
24
DELETE FROM hotfixgroups WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
25
DELETE FROM groupScripts WHERE FIND_IN_SET(groupID, selfAndChildGIDs);
26
27
28
29
IF LENGTH(parentGIDs) > 1 THEN
30
CALL sp_split(TRIM(',' FROM selfAndChildGIDs), 'tmpSplit');
31
OPEN cur;
32
33
updChildren: LOOP
34
FETCH cur INTO tempGID;
35
IF done THEN
36
LEAVE updChildren;
37
END IF;
38
UPDATE mastergroups SET children=REPLACE(children, CONCAT(',', tempGID, ','), ',') WHERE FIND_IN_SET(groupID, TRIM(',' FROM parentGIDs));
39
END LOOP;
40
41
CLOSE cur;
42
DROP TABLE tmpSplit;
43
END IF;
44
45
46
IF permissionID > 0 THEN
47
DELETE FROM permissions WHERE PermID=permissionID;
48
END IF;
49
END