postgresql7.1
select t.object_type_two, t.role_two as role,
acs_rel_type__role_pretty_name(t.role_two) as role_pretty_name,
acs_object_type__pretty_name(t.object_type_two) as object_type_two_name,
ancestor_rel_types.object_type as ancestor_rel_type
from acs_rel_types t, acs_object_types obj_types,
acs_object_types ancestor_rel_types
where t.rel_type = :rel_type
and t.rel_type = obj_types.object_type
and ancestor_rel_types.supertype = 'relationship'
and ancestor_rel_types.object_type in (
select t2.object_type from
acs_object_types t1, acs_object_types t2
where t1.object_type= :rel_type
and t1.tree_sortkey between t2.tree_sortkey and tree_right(t2.tree_sortkey)
)
cross join (select element_id from application_group_element_map
where package_id = :package_id) app_elements
select DISTINCT
case when groups.group_id is null then
case when persons.person_id is null then 'INVALID'
else persons.first_names || ' ' || persons.last_name
end else
groups.group_name end as party_name,
p.party_id
from (select o.object_id as party_id
from acs_objects o,
(select ot.object_type from acs_object_types ot, acs_object_types ot2
where ot.tree_sortkey between ot2.tree_sortkey and tree_right(ot2.tree_sortkey)
and $start_with) t
where o.object_type = t.object_type) p left join
(select element_id
from group_element_map
where group_id = :group_id and rel_type = :rel_type
UNION ALL
select :group_id::integer ) m on (p.party_id = m.element_id) cross join
(select object_id
from all_object_party_privilege_map
where party_id = :user_id and privilege = 'read') perm cross join
(select party_id
from rc_parties_in_required_segs
where group_id = :group_id
and rel_type = :rel_type) pirs $scope_query left join
groups on (p.party_id = groups.group_id)
left join persons on (p.party_id = persons.person_id)
where
m.element_id is null
and p.party_id = perm.object_id
and p.party_id = pirs.party_id $scope_clause