Determining Array size. (HACK)

Поиск
Список
Период
Сортировка
От James Carpenter
Тема Determining Array size. (HACK)
Дата
Msg-id 4.3.1.2.20000617022916.03ae5bc0@jfca.com
обсуждение исходный текст
Список pgsql-sql
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';

В списке pgsql-sql по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Null parm to a function
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: [BUGS] Some problem with inet type on PostgreSQL-7.0