--
-- rel_segment__get_or_new/2
--
create or replace function rel_segment__get_or_new(
  integer,
  character varying
) returns int4 as $$

declare
        gid     alias for $1;
        typ     alias for $2;
begin
        return rel_segment__get_or_new(gid,typ,null);
end;$$ language plpgsql;


--
-- rel_segment__get_or_new/3
--
create or replace function rel_segment__get_or_new(
  integer,
  character varying,
  character varying
) returns int4 as $$

declare
  get_or_new__group_id          alias for $1;  
  get_or_new__rel_type          alias for $2;  
  segment_name                  alias for $3;  -- default null
  v_segment_id                  rel_segments.segment_id%TYPE;
  v_segment_name                rel_segments.segment_name%TYPE;
begin

   v_segment_id := rel_segment__get(get_or_new__group_id,get_or_new__rel_type);

   if v_segment_id is null then

      if segment_name is not null then
         v_segment_name := segment_name;
      else
         select groups.group_name || ' - ' || acs_object_types.pretty_name ||
                  ' segment'
         into v_segment_name
         from groups, acs_object_types
         where groups.group_id = get_or_new__group_id
           and acs_object_types.object_type = get_or_new__rel_type;

      end if;

      v_segment_id := rel_segment__new (
          null,
          'rel_segment',
          now(),
          null,
          null,
          null,
          null,
          v_segment_name,
          get_or_new__group_id,
          get_or_new__rel_type,
          get_or_new__group_id
      );

   end if;

   return v_segment_id;

  
end;$$ language plpgsql;