Greetings!
I have an xml aggregate function that always returns 'ERROR: invalid
XML content'. However an identical function that uses text produces
valid xml with the same inputs.
create schema kml;
CREATE FUNCTION kml.precon(text, text) RETURNS text AS $$ select
$1||$2 $$ LANGUAGE sql;
CREATE FUNCTION kml.precon(xml, xml) RETURNS xml AS $$ select
xmlconcat($1,$2) $$ LANGUAGE sql;
CREATE AGGREGATE kml.documentagg(text) ( SFUNC=kml.precon,
STYPE=text, INITCOND='');
CREATE AGGREGATE kml.documentagg(xml) (SFUNC=kml.precon, STYPE=xml,
INITCOND='');
with one as (
select '<Placemark><name>892033</name><description>MRIL-JULY-2012_RA
265/5-410</description><Point><coordinates>-76.801342826571982,17.98077767785141</coordinates></Point></Placemark>'
k
union
select '<Placemark><name>900527</name><description>MRIL-JULY-2012_RA
265/5-810 </description><Point><coordinates>-76.803804151610237,17.98304310341128</coordinates></Point></Placemark>'
union
select '<Placemark><name>920661</name><description>MRIL-JULY-2012_RA
001/6-310</description><Point><coordinates>-77.886619999671524,18.441619925883373</coordinates></Point></Placemark>'
)
select k from one ; /* returns 3 rows of text. expected*/
select k::xml from one ; /* returns 3 rows of xml. expected*/
select kml.documentagg(k) from one; /* returns one row text */
select kml.documentagg(k)::xml from one; /* returns one row xml */
select kml.documentagg(k::xml) from one ; /* ********** Error
********** ERROR: invalid XML content SQL state: 2200N */
Given that the text agg can be cast to xml without any errors I'm at a
loss as to why the xml agg is failing.
Regards,
Rhys