-- SELECT *
-- FROM pg_type;
CREATE OR REPLACE FUNCTION f_merge_ranges(oid, text, text)
RETURNS text
IMMUTABLE
STRICT
LANGUAGE plpgsql
AS $$
DECLARE
raw_range text;
merged_ranges text;
BEGIN
IF $1 = 23 THEN
raw_range := 'int4range(' || $2 || ', ' || $3 || ')';
ELSIF $1 = 1082 THEN
raw_range := 'daterange(' || quote_literal($2) || ', ' || quote_literal($3) || ')';
ELSE
RAISE '';
END IF;
EXECUTE 'SELECT ' || raw_range || '::text;' INTO merged_ranges;
RETURN merged_ranges;
END;
$$;
-- SELECT f_merge_ranges(1082, '2022-01-01', '2022-02-01');
EXPLAIN ANALYZE
SELECT 1
FROM generate_series(1, 200000) s
-- WHERE CASE
-- WHEN s >= 30000 AND s < 50000 THEN TRUE
-- WHEN s >= 50000 AND s < 70000 THEN TRUE
-- WHEN s >= 70000 AND s < 90000 THEN TRUE
-- ELSE FALSE END
WHERE s <@ int4range(30000, 90000);