CREATE PROCEDURE addAdministrable (parent INT, role INT, OUT aid INT)BEGIN DECLARE done INT DEFAULT 0; DECLARE ancestor INT; DECLARE thisId INT; DECLARE cur CURSOR FOR SELECT ancestor_id FROM administrables_administrables WHERE descendant_id = parent; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; INSERT INTO administrables (role_id) VALUES (role); OPEN cur; SET thisId = LAST_INSERT_ID(); read_loop: LOOP FETCH cur INTO ancestor; IF done THEN LEAVE read_loop; END IF; REPLACE INTO administrables_administrables (ancestor_id, descendant_id) VALUES (ancestor, thisId); END LOOP; CLOSE cur; REPLACE INTO administrables_administrables (ancestor_id, descendant_id) VALUES (parent, thisId); SET aid = thisId;END;CREATE TRIGGER rolesadd BEFORE INSERT ON rolesFOR EACH ROW BEGIN DECLARE theId INT; DECLARE allRoles INT; SELECT administrables.id FROM administrables JOIN roles ON roles.name='Alla Roller' AND roles.administrable_id = administrables.id INTO allRoles; CALL addAdministrable(allRoles, NULL, theId); SET NEW.administrable_id = theId;END;CREATE TRIGGER useradd BEFORE INSERT ON usersFOR EACH ROW BEGIN DECLARE theId INT; DECLARE allUsers INT; SELECT administrables.id FROM administrables JOIN users ON first_name='Alla' AND last_name='Användare' AND users.administrable_id = administrables.id INTO allUsers; CALL addAdministrable(allUsers, NULL, theId); SET NEW.administrable_id = theId;END;CREATE PROCEDURE assign_action (role_name VARCHAR(40), action_name VARCHAR(40))INSERT INTO actions_roles(role_id, action_id) VALUES ((SELECT id FROM roles WHERE name=role_name),(SELECT id FROM actions WHERE name=action_name));CREATE PROCEDURE assign_role_facility (uname VARCHAR(40), role_name VARCHAR(40), facility_name VARCHAR(80))INSERT INTO administrables_roles_users (user_id, role_id, administrable_id) VALUES((SELECT id FROM users WHERE username=uname),(SELECT id FROM roles WHERE name=role_name),(SELECT administrable_id FROM facilities WHERE name=facility_name));CREATE PROCEDURE assign_role_equipment (uname VARCHAR(40), role_name VARCHAR(40), equipment_name VARCHAR(80))INSERT INTO administrables_roles_users (user_id, role_id, administrable_id) VALUES((SELECT id FROM users WHERE username=uname),(SELECT id FROM roles WHERE name=role_name),(SELECT bookables.administrable_id FROM equipment JOIN bookables ON equipment.bookable=bookables.id WHERE equipment.name=equipment_name));CREATE PROCEDURE assign_role_room (uname VARCHAR(40), role_name VARCHAR(40), room_name VARCHAR(80))INSERT INTO administrables_roles_users (user_id, role_id, administrable_id) VALUES((SELECT id FROM users WHERE username=uname),(SELECT id FROM roles WHERE name=role_name),(SELECT bookables.administrable_id FROM rooms JOIN bookables ON rooms.bookable=bookables.id WHERE rooms.name=room_name));CREATE PROCEDURE assign_role_user (uname VARCHAR(40), role_name VARCHAR(40), uname2 VARCHAR(80))INSERT INTO administrables_roles_users (user_id, role_id, administrable_id) VALUES((SELECT id FROM users WHERE username=uname),(SELECT id FROM roles WHERE name=role_name),(SELECT administrable_id FROM users WHERE username=uname2));