-- -- acs_sc_msg_type__parse_spec/2 -- create or replace function acs_sc_msg_type__parse_spec( character varying, character varying ) returns int4 as $$ declare p_msg_type_name alias for $1; p_msg_type_spec alias for $2; v_element varchar; v_element_type varchar; v_str_pos integer; v_element_name varchar; v_element_msg_type_name varchar; v_element_msg_type_isset_p boolean; v_element_pos integer; begin v_element_pos := 1; v_element := split(p_msg_type_spec, ',', v_element_pos); while v_element is not null loop v_str_pos = instr(v_element, ':', 1, 1); if v_str_pos > 0 then v_element_name := trim(substr(v_element, 1, v_str_pos-1)); v_element_type := trim(substr(v_element, v_str_pos+1, length(v_element) - v_str_pos)); if (instr(v_element_type, '[',1,1) = length(v_element_type)-1) and (instr(v_element_type, ']',1,1) = length(v_element_type)) then v_element_msg_type_isset_p := 't'; v_element_msg_type_name := trim(substr(v_element_type,1,length(v_element_type)-2)); if v_element_msg_type_name = '' then raise exception 'Wrong Format: Message Type Specification'; end if; else v_element_msg_type_isset_p := 'f'; v_element_msg_type_name := v_element_type; end if; else raise exception 'Wrong Format: Message Type Specification'; end if; perform acs_sc_msg_type__new_element( p_msg_type_name, -- msg_type_id v_element_name, -- element_name v_element_msg_type_name, -- element_msg_type_id v_element_msg_type_isset_p, -- element_msg_type_isset_p v_element_pos -- element_pos ); v_element_pos := v_element_pos + 1; v_element := split(p_msg_type_spec, ',', v_element_pos); end loop; return v_element_pos-1; end;$$ language plpgsql;