SELECT
   count(*)
FROM beneficiari_progetti
NATURAL JOIN beneficiari
NATURAL JOIN progetti
WHERE COALESCE(codice_fiscale = upper(:cf), TRUE)
  AND COALESCE(beneficiario_ultimo ILIKE :ben, TRUE)
  AND COALESCE(:ben_adv % ANY(rs_sign_array(beneficiario_ultimo)), TRUE)
  AND COALESCE(titolo_progetto ~* (:titoloprogetto), TRUE)
  AND COALESCE(:codiceunicoprogetto = ANY(ARRAY[cup_cipe, cup_docup, cup_docup_std, cup_st, cup_artea, id_progetto]), :codiceunicoprogetto IS NULL)
  AND COALESCE(comune_sede_legale = :comunesl, :comunesl IS NULL)
  AND COALESCE(provincia_sede_legale = :provinciasl, :provinciasl IS NULL)
  AND COALESCE(comune_unita_locale_progetto = :comuneloc, :comuneloc IS NULL)
  AND COALESCE(provincia_unita_locale_progetto = :provincialoc, :provincialoc IS NULL)
  AND COALESCE((:dattobando, :nattobando)::atto = atto_approvazione_bando, (:dattobando, :nattobando)::atto IS NULL)
  AND COALESCE((:dattograd, :nattograd)::atto = ANY(atto_concessione_definitiva), (:dattograd, :nattograd)::atto IS NULL)
  AND COALESCE(programma = :programma, :programma IS NULL)
  AND COALESCE(linea = :linea, :linea IS NULL)
  AND COALESCE(tipologia_aiuto = :tipologiaaiuto, :tipologiaaiuto IS NULL)
  AND COALESCE(tipo_agevolazione = :formaagevolazione, :formaagevolazione IS NULL)
  AND COALESCE(data_effettiva_fine_progetto <= :finanziatoa::timestamp, :finanziatoa IS NULL)
  AND (:finanziatoil::text IS NULL OR COALESCE(:finanziatoil::integer = ANY(array(SELECT extract(year FROM (unnest(atto_concessione_definitiva)).data)::integer)), FALSE))
  AND (:finanziatoda::text IS NULL OR COALESCE(:finanziatoda::integer <= ANY(array(SELECT extract(year FROM (unnest(atto_concessione_definitiva)).data)::integer)), FALSE))
  AND COALESCE(codice_ateco_2007 = :ateco, :ateco IS NULL)
  AND CASE WHEN :ricerca::text IS NOT NULL THEN tipo_linea = 'Ricerca' ELSE TRUE END
