I have the function below in postgres which was working fine. but then i had to add other types, So i tried to add cases to it. But this isn't working as expected.
Basically what i am trying to do is if user is ALPHA then add the last 2 where clauses. If its a BETA then only use the second last clause and ignore the last where clause.
------ Old method without checking the logged in user role ------
begin
return query SELECT distinct(gl.user_id) as user_id, u.name_tx FROM contact_linking cl
INNER JOIN group_contacts gc ON gc.contact_id = cl.contact_id
INNER JOIN group_linking gl ON gl.group_id = gc.group_id
INNER JOIN group_contacts_w gcw ON gcw.group_link_id = gl.group_link_id
INNER JOIN users u ON u.user_id = gl.user_id
WHERE cl.ref_contact_type_cd = 'PRIMARY'
AND cl.users_id = userId AND cl.activ_yn = 'Y' AND gl.activ_yn = 'Y' AND cl.contact_id IS NOT NULL
AND gc.type LIKE 'ALPHA%'
AND gcw.type = gc.type
UNION ALL
select userId as user_id;
end
---------- After adding new Type ----------
begin
return query SELECT distinct(gl.user_id) as user_id FROM contact_linking cl
INNER JOIN group_contacts gc ON gc.contact_id = cl.contact_id
INNER JOIN group_linking gl ON gl.group_id = gc.group_id
INNER JOIN group_contacts_w gcw ON gcw.group_link_id = gl.group_link_id
INNER JOIN users u ON u.user_id = gl.user_id
WHERE cl.ref_contact_type_cd = 'PRIMARY'
AND cl.users_id = userId AND cl.activ_yn = 'Y' AND gl.activ_yn = 'Y' AND cl.contact_id IS NOT NULL
AND CASE
WHEN 'ALPHA' = (SELECT ref_user_cd FROM users WHERE user_id = userId) THEN gc.type LIKE 'ALPHA%'
WHEN 'BETA' = (SELECT ref_user_cd FROM users WHERE user_id = userId) THEN gc.type LIKE '