[SQL] Determining Array size

2000-06-15 Thread James Carpenter

I am trying to determine the number of elements in an array.

I looked through the list of loaded functions, and was unable to find one that 
seemed to provide this functionality. 

Is there some other means to detemine this?

I am new to postgresql and am still trying to learn the 'ordbms way' :-) 


thanks,

- james -

-
 PostgreSQL 7.0.1 on i686-pc-linux-gnu, compiled by gcc egcs-2.91.66   



[SQL] Determining Array size. (HACK)

2000-06-17 Thread James Carpenter

I previously asked about determining array sizes. I got a couple of direct replies.. 
they didn't fit my need.

I am trying to get some code finished so I hacked a couple of functions together with 
plpgsql to 
solve my immediate problem. They make the assumption that NULL's are not allowed in 
the array. 

In the future I will dig into the array code and add the methods I need in 'CA'. I 
just won't have time until after July. 

So, I thought I would post them and you can use them.. or not :-)

I figured if I posted something and someone had a better way.. they would reply. 

- james -


/*
create a custom datatype that is an array of text.
use the builtin conversion routines.
*/
CREATE TYPE textarray (
INPUT = array_in,
OUTPUT = array_out,
INTERNALLENGTH = VARIABLE,
ELEMENT = text,
DEFAULT = '{}'
);


/*
try to figure out the number of elements in this
text array. This assumes that NULL elements
are not allowed in the array and mark the end
of the array.

USAGE:
size(textarray)
*/
CREATE FUNCTION size(textarray)
RETURNS int4
AS '


DECLARE
data_array ALIAS FOR $1;
array_element text;
counter int4;
BEGIN   
-- set the counter
counter := 0;

-- loop until we terminate
WHILE true LOOP
-- get the element from the array
array_element := data_array[counter + 1];  -- 1 based arrays

-- exit the loop if no more data
IF (array_element IS NULL) THEN
EXIT;   -- exit the  loop
END IF;


-- increment the counter
counter := counter + 1; 
END LOOP;
RETURN counter;
END;
' LANGUAGE 'plpgsql';



/*
try to figure out the number of elements in this
integer array. This assumes that NULL elements
are not allowed in the array and mark the end
of the array.

USAGE:
size(_int4)
*/
CREATE FUNCTION size(_int4)
RETURNS int4
AS '


DECLARE
data_array ALIAS FOR $1;
array_element int4;
counter int4;
BEGIN   
-- set the counter
counter := 0;

-- loop until we terminate
WHILE true LOOP
-- get the element from the array
array_element := data_array[counter + 1];  -- 1 based arrays

-- exit the loop if no more data
IF (array_element IS NULL) THEN
EXIT;   -- exit the  loop
END IF;


-- increment the counter
counter := counter + 1; 
END LOOP;
RETURN counter;
END;
' LANGUAGE 'plpgsql';