ore/conf/evolutions/default/101.sql
# --- !Ups
CREATE FUNCTION convertGlobalRoles(roles VARCHAR[])
RETURNS VARCHAR[] AS
$$
DECLARE newRoles VARCHAR[] = '{}';;
DECLARE role INTEGER;;
BEGIN
FOREACH role IN ARRAY roles LOOP
IF role = 61 THEN
newRoles := array_append(newRoles, 'Ore_Admin');;
ELSIF role = 62 THEN
newRoles := array_append(newRoles, 'Ore_Mod');;
ELSIF role = 44 THEN
newRoles := array_append(newRoles, 'Sponge_Leader');;
ELSIF role = 58 THEN
newRoles := array_append(newRoles, 'Team_Leader');;
ELSIF role = 59 THEN
newRoles := array_append(newRoles, 'Community_Leader');;
ELSIF role = 3 THEN
newRoles := array_append(newRoles, 'Sponge_Staff');;
ELSIF role = 41 THEN
newRoles := array_append(newRoles, 'Sponge_Developer');;
ELSIF role = 66 THEN
newRoles := array_append(newRoles, 'Ore_Dev');;
ELSIF role = 45 THEN
newRoles := array_append(newRoles, 'Web_dev');;
ELSIF role = 51 THEN
newRoles := array_append(newRoles, 'Documenter');;
ELSIF role = 43 THEN
newRoles := array_append(newRoles, 'Support');;
ELSIF role = 49 THEN
newRoles := array_append(newRoles, 'Contributor');;
ELSIF role = 48 THEN
newRoles := array_append(newRoles, 'Advisor');;
ELSIF role = 57 THEN
newRoles := array_append(newRoles, 'Stone_Donor');;
ELSIF role = 54 THEN
newRoles := array_append(newRoles, 'Quartz_Donor');;
ELSIF role = 56 THEN
newRoles := array_append(newRoles, 'Iron_Donor');;
ELSIF role = 53 THEN
newRoles := array_append(newRoles, 'Gold_Donor');;
ELSIF role = 52 THEN
newRoles := array_append(newRoles, 'Diamond_Donor');;
ELSIF role = 64 THEN
newRoles := array_append(newRoles, 'Organization');;
END IF;;
END LOOP;;
RETURN newRoles;;
END
$$ LANGUAGE plpgsql;
CREATE FUNCTION convertProjectOrgaRoles(role VARCHAR)
RETURNS VARCHAR AS
$$
DECLARE role INTEGER = TO_NUMBER(role, 'MI9');;
BEGIN
IF role = -1 THEN
RETURN 'Project_Owner';;
ELSIF role = -2 THEN
RETURN 'Project_Developer';;
ELSIF role = -3 THEN
RETURN 'Project_Editor';;
ELSIF role = -4 THEN
RETURN 'Project_Support';;
ELSIF role = -5 THEN
RETURN 'Organization_Owner';;
ELSIF role = -6 THEN
RETURN 'Organization_Developer';;
ELSIF role = -7 THEN
RETURN 'Organization_Editor';;
ELSIF role = -8 THEN
RETURN 'Organization_Support';;
ELSIF role = -9 THEN
RETURN 'Organization_Admin';;
ELSE
RETURN '';;
END IF;;
END
$$ LANGUAGE plpgsql;
ALTER TABLE users ALTER global_roles TYPE VARCHAR[];
UPDATE users SET global_roles = convertGlobalRoles(global_roles);
ALTER TABLE user_project_roles ALTER role_type TYPE VARCHAR;
UPDATE user_project_roles SET role_type = convertProjectOrgaRoles(role_type);
ALTER TABLE user_organization_roles ALTER role_type TYPE VARCHAR;
UPDATE user_organization_roles SET role_type = convertProjectOrgaRoles(role_type);
DROP FUNCTION convertGlobalRoles(roles VARCHAR[]);
DROP FUNCTION convertProjectOrgaRoles(role VARCHAR);
# --- !Downs
CREATE FUNCTION convertGlobalRoles(roles VARCHAR[])
RETURNS INTEGER[] AS
$$
DECLARE newRoles INTEGER[] = '{}';;
DECLARE role VARCHAR;;
BEGIN
FOREACH role IN ARRAY roles LOOP
IF role = 'Ore_Admin' THEN
newRoles := array_append(newRoles, 61);;
ELSIF role = 'Ore_Mod' THEN
newRoles := array_append(newRoles, 62);;
ELSIF role = 'Sponge_Leader' THEN
newRoles := array_append(newRoles, 44);;
ELSIF role = 'Team_Leader' THEN
newRoles := array_append(newRoles, 58);;
ELSIF role = 'Community_Leader' THEN
newRoles := array_append(newRoles, 59);;
ELSIF role = 'Sponge_Staff' THEN
newRoles := array_append(newRoles, 3);;
ELSIF role = 'Sponge_Developer' THEN
newRoles := array_append(newRoles, 41);;
ELSIF role = 'Ore_Dev' THEN
newRoles := array_append(newRoles, 66);;
ELSIF role = 'Web_dev' THEN
newRoles := array_append(newRoles, 45);;
ELSIF role = 'Documenter' THEN
newRoles := array_append(newRoles, 51);;
ELSIF role = 'Support' THEN
newRoles := array_append(newRoles, 43);;
ELSIF role = 'Contributor' THEN
newRoles := array_append(newRoles, 49);;
ELSIF role = 'Advisor' THEN
newRoles := array_append(newRoles, 48);;
ELSIF role = 'Stone_Donor' THEN
newRoles := array_append(newRoles, 57);;
ELSIF role = 'Quartz_Donor' THEN
newRoles := array_append(newRoles, 54);;
ELSIF role = 'Iron_Donor' THEN
newRoles := array_append(newRoles, 56);;
ELSIF role = 'Gold_Donor' THEN
newRoles := array_append(newRoles, 53);;
ELSIF role = 'Diamond_Donor' THEN
newRoles := array_append(newRoles, 52);;
ELSIF role = 'Organization' THEN
newRoles := array_append(newRoles, 64);;
END IF;;
END LOOP;;
RETURN newRoles;;
END
$$ LANGUAGE plpgsql;
CREATE FUNCTION convertProjectOrgaRoles(role VARCHAR)
RETURNS INTEGER AS
$$
BEGIN
IF role = 'Project_Owner' THEN
RETURN -1;;
ELSIF role = 'Project_Developer' THEN
RETURN -2;;
ELSIF role = 'Project_Editor' THEN
RETURN -3;;
ELSIF role = 'Project_Support' THEN
RETURN -4;;
ELSIF role = 'Organization_Owner' THEN
RETURN -5;;
ELSIF role = 'Organization_Developer' THEN
RETURN -6;;
ELSIF role = 'Organization_Editor' THEN
RETURN -7;;
ELSIF role = 'Organization_Support' THEN
RETURN -8;;
ELSIF role = 'Organization_Admin' THEN
RETURN -9;;
ELSE
RAISE EXCEPTION 'Role not found!';;
RETURN -99;;
END IF;;
END
$$ LANGUAGE plpgsql;
UPDATE users SET global_roles = convertGlobalRoles(global_roles);
UPDATE user_project_roles SET role_type = convertProjectOrgaRoles(role_type);
UPDATE user_organization_roles SET role_type = convertProjectOrgaRoles(role_type);
ALTER TABLE user_project_roles ALTER role_type TYPE INTEGER USING role_type::integer;
ALTER TABLE user_organization_roles ALTER role_type TYPE INTEGER USING role_type::integer;
/* Not possible to change the type of column global_roles from the users table back
but slick will automatically cast the varchar to an integer if this evolution is rolled back */
DROP FUNCTION convertGlobalRoles(roles VARCHAR[]);
DROP FUNCTION convertProjectOrgaRoles(role VARCHAR);