--
-- apm_package__is_child/2
--
create or replace function apm_package__is_child(
  character varying,
  character varying
) returns bool as $$

declare
  parent_package_key       alias for $1;
  child_package_key        alias for $2;
  dependency               record;
begin

  if parent_package_key = child_package_key then
    return 't';
  end if;

  for dependency in 
    select apd.service_uri
    from apm_package_versions apv, apm_package_dependencies apd
    where apd.version_id = apv.version_id
      and apv.enabled_p
      and apd.dependency_type in ('embeds', 'extends')
      and apv.package_key = child_package_key
  loop
    if dependency.service_uri = parent_package_key or
      apm_package__is_child(parent_package_key, dependency.service_uri) then
      return 't';
    end if;
  end loop;
      
  return 'f';
end;$$ language plpgsql;