--
-- workflow_case__execute_time_callback/4
--
create or replace function workflow_case__execute_time_callback(
  character varying,
  character varying,
  integer,
  character varying
) returns timestamptz as $$

declare
  execute_time_callback__callback               alias for $1;  
  execute_time_callback__custom_arg             alias for $2;  
  execute_time_callback__case_id                alias for $3;  
  execute_time_callback__transition_key         alias for $4;  
  v_rec                                         record;
  v_str                                         text;
begin
        if execute_time_callback__callback = '' or execute_time_callback__callback is null then
            raise EXCEPTION '-20000: There''s no time_callback function for the timed transition "%"', execute_time_callback__transition_key;
        end if;
 
        v_str := 'select ' || execute_time_callback__callback || '(' || 
                 execute_time_callback__case_id || ',' || 
                 quote_literal(execute_time_callback__transition_key) || ',' || 
                 coalesce(quote_literal(execute_time_callback__custom_arg),'null') || ') as trigger_time';

        for v_rec in execute v_str
        LOOP
            return v_rec.trigger_time;
        end LOOP;

        return null;
     
end;$$ language plpgsql;