Re: Array intersection - Mailing list pgsql-general

From Pavel Stehule
Subject Re: Array intersection
Date
Msg-id 162867790710171256m29f5151lccf0301989a8a90a@mail.gmail.com
Whole thread Raw
In response to Re: Array intersection  (David Fetter <david@fetter.org>)
List pgsql-general
> > <snip>
> >
> > > CREATE OR REPLACE FUNCTION array_intersect(ANYARRAY, ANYARRAY)
> > > RETURNS ANYARRAY
> > > LANGUAGE SQL
> > > AS $$
> > > SELECT ARRAY(
> > >     SELECT $1[i] AS "the_intersection"
> > >     FROM generate_series(
> > >         array_lower($1,1),
> > >         array_upper($1,1)
> > >     ) AS i
> > >     INTERSECT
> > >     SELECT $2[j] AS "the_intersection"
> > >     FROM generate_series(
> > >         array_lower($2,1),
> > >         array_upper($2,1)
> > >     ) AS j
> > > );
> > > $$;
> >

nice :)

Maybe we can add function "generate_iterator"

CREATE OR REPLACE FUNCTION generate_iterator(ANYARRAY)
RETURNS SETOF integer AS
$$
   SELECT i
      FROM generate_series(array_lower($1, 1), array_upper($1,1)) AS i
$$ LANGUAGE SQL;

then
CREATE OR REPLACE FUNCTION array_intersect(ANYARRAY, ANYARRAY)
RETURNS ANYARRAY
LANGUAGE SQL AS
$$
  SELECT ARRAY(
                           SELECT $1[i]
                               FROM genarate_iterator($1) i
                           INTERSECT
                           SELECT $2[j]
                               FROM generate_iterator($2) j
                           )
$$ ;

Regars
Pavel

pgsql-general by date:

Previous
From: Richard Huxton
Date:
Subject: Re: Poor Plan selected w/ not provided a date/time but selecting date/time from a table
Next
From: Lothar Behrens
Date:
Subject: conditional alter table add ?