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

declare
  execute_hold_timeout_callback__callback               alias for $1;  
  execute_hold_timeout_callback__custom_arg             alias for $2;  
  execute_hold_timeout_callback__case_id                alias for $3;  
  execute_hold_timeout_callback__transition_key         alias for $4;  
  v_hold_timeout                                        timestamptz;
  v_rec                                                 record;
  v_str                                                 text;
begin
        if execute_hold_timeout_callback__callback = '' or execute_hold_timeout_callback__callback is null then
            return null;
        end if;
 
        v_str := 'select ' || execute_hold_timeout_callback__callback 
              || '(' ||
              execute_hold_timeout_callback__case_id || ',' ||
              quote_literal(execute_hold_timeout_callback__transition_key) || 
              ',' ||
              coalesce(quote_literal(execute_hold_timeout_callback__custom_arg),'null') || ') as hold_timeout';

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

        return null;
     
end;$$ language plpgsql;