Re: Array intersection

From: "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com>
To: "David Fetter" <david(at)fetter(dot)org>
Cc: "Josh Trutwin" <josh(at)trutwins(dot)homeip(dot)net>, pgsql-general(at)postgresql(dot)org
Subject: Re: Array intersection
Date: 2007-10-17 19:56:10
Message-ID: 162867790710171256m29f5151lccf0301989a8a90a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Lothar Behrens 2007-10-17 20:03:21 conditional alter table add ?
Previous Message Richard Huxton 2007-10-17 19:37:18 Re: Poor Plan selected w/ not provided a date/time but selecting date/time from a table