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 по дате отправления: