--
-- timezone__get_rawoffset/2
--
create or replace function timezone__get_rawoffset(
  p_tz_id integer,
  p_time timestamp with time zone
) returns interval as $$

DECLARE
  v_offset varchar;
BEGIN
  v_offset := '0';

  select
    case isdst_p
    when 't' then "interval" (gmt_offset || 'seconds') - '3600 seconds'
    else "interval" (gmt_offset || 'seconds')
    end
  into v_offset
  from   timezone_rules
  where  tz_id  = p_tz_id and p_time between utc_start and utc_end;

  return v_offset;
END;
$$ language plpgsql;