Thread: Array to rowset function

Array to rowset function

From
laurie.burrow@powerconv.alstom.com
Date:
I have a function to convert a single dimension array to a row set

CREATE OR REPLACE FUNCTION arraytotable(anyarray)
  RETURNS SETOF anyelement AS
'
DECLARE

theData ALIAS FOR $1;
count integer;
start integer;

BEGIN
      start :=array_lower(theData,1);
      count :=array_upper(theData,1);
      IF start is not null THEN
      FOR i IN start..count LOOP
            RETURN NEXT theData[i];
      END LOOP;
      END IF;

RETURN;
END
'
  LANGUAGE 'plpgsql' IMMUTABLE STRICT;

Is there a more efficient way I can do this and are there any user defined
C functions available for this sort of array manipulation?

Thanks for any help
Laurie


:.________________
CONFIDENTIALITY : This  e-mail  and  any attachments are confidential and
may be privileged. If  you are not a named recipient, please notify the
sender immediately and do not disclose the contents to another person, use
it for any purpose or store or copy the information in any medium.



Re: Array to rowset function

From
Mike Rylander
Date:
 John Hansen posted a C implementaion of the UNNEST function that does
this.  It is in the archives here:
http://archives.postgresql.org/pgsql-hackers/2004-11/msg00158.php and
http://archives.postgresql.org/pgsql-hackers/2004-11/msg00327.php .
I've been using it for the last few months and it's been working great
for me.

On Mon, 17 Jan 2005 14:03:56 +0000, laurie.burrow@powerconv.alstom.com
<laurie.burrow@powerconv.alstom.com> wrote:
> I have a function to convert a single dimension array to a row set
>
> CREATE OR REPLACE FUNCTION arraytotable(anyarray)
>   RETURNS SETOF anyelement AS
> '
> DECLARE
>
> theData ALIAS FOR $1;
> count integer;
> start integer;
>
> BEGIN
>       start :=array_lower(theData,1);
>       count :=array_upper(theData,1);
>       IF start is not null THEN
>       FOR i IN start..count LOOP
>             RETURN NEXT theData[i];
>       END LOOP;
>       END IF;
>
> RETURN;
> END
> '
>   LANGUAGE 'plpgsql' IMMUTABLE STRICT;
>
> Is there a more efficient way I can do this and are there any user defined
> C functions available for this sort of array manipulation?
>
> Thanks for any help
> Laurie
>
> :.________________
> CONFIDENTIALITY : This  e-mail  and  any attachments are confidential and
> may be privileged. If  you are not a named recipient, please notify the
> sender immediately and do not disclose the contents to another person, use
> it for any purpose or store or copy the information in any medium.
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html
>


--
Mike Rylander
mrylander@gmail.com
GPLS -- PINES Development
Database Developer
http://open-ils.org