34 lines
1.3 KiB
PL/PgSQL
34 lines
1.3 KiB
PL/PgSQL
-- Migración: agregar flag p_all a _dash_responses
|
|
-- UUID especial '00000000-0000-0000-0000-000000000000' = todos los surveys
|
|
CREATE OR REPLACE FUNCTION public._dash_responses(
|
|
p_survey_id uuid,
|
|
p_depto text DEFAULT NULL,
|
|
p_genero text[] DEFAULT NULL,
|
|
p_etario text[] DEFAULT NULL,
|
|
p_modalidad text[] DEFAULT NULL
|
|
)
|
|
RETURNS TABLE(response_id uuid)
|
|
LANGUAGE sql STABLE SECURITY DEFINER
|
|
SET search_path = public
|
|
AS $$
|
|
SELECT r.id
|
|
FROM public.responses r
|
|
WHERE (p_survey_id = '00000000-0000-0000-0000-000000000000'
|
|
OR r.survey_id = p_survey_id)
|
|
AND (p_depto IS NULL OR r.qi_zone = p_depto)
|
|
AND (p_genero IS NULL OR cardinality(p_genero) = 0 OR EXISTS (
|
|
SELECT 1 FROM public.answers a
|
|
JOIN public.questions q ON q.id = a.question_id
|
|
WHERE a.response_id = r.id AND q.code = 'A6'
|
|
AND a.value #>> '{}' = ANY(p_genero)
|
|
))
|
|
AND (p_etario IS NULL OR cardinality(p_etario) = 0
|
|
OR r.qi_age_bucket = ANY(p_etario))
|
|
AND (p_modalidad IS NULL OR cardinality(p_modalidad) = 0 OR EXISTS (
|
|
SELECT 1 FROM public.answers a
|
|
JOIN public.questions q ON q.id = a.question_id
|
|
WHERE a.response_id = r.id AND q.code = 'A7'
|
|
AND a.value #>> '{}' = ANY(p_modalidad)
|
|
));
|
|
$$;
|