On Mon, Feb 1, 2010 at 5:23 PM, Andrew Dunstan <andrew@dunslane.net> wrote:
> Robert Haas wrote:
>> (2) add a very, very large warning that this will crash if you do
>> almost anything with it.
>
> I think that's an exaggeration. Certain people are known to be using it
> quite successfully.
Hmm. Well, all I know is that the first thing I tried crashed the server.
CREATE TABLE xpath_test (id integer NOT NULL, t xml);
INSERT INTO xpath_test VALUES (1, '<doc><int>1</int></doc>');
SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
as t(id int4);
It doesn't crash if you change the type of t from xml to text; instead
you get a warning about some sort of memory allocation problem.
DROP TABLE xpath_test;
CREATE TABLE xpath_test (id integer NOT NULL, t text);
INSERT INTO xpath_test VALUES (1, '<doc><int>1</int></doc>');
SELECT * FROM xpath_table('id', 't', 'xpath_test', '/doc/int', 'true')
as t(id int4);
yields:
WARNING: problem in alloc set ExprContext: bogus aset link in block
0x14645e0, chunk 0x14648b8
And then there's this (see also bug #5285):
DELETE FROM xpath_test;
INSERT INTO xpath_test VALUES (1, '<rowlist><row a="1"/><row a="2"
b="oops"/></rowlist>');
SELECT * FROM xpath_table('id', 't', 'xpath_test',
'/rowlist/row/@a|/rowlist/row/@b', 'true') as t(id int4, a text, b
text);
which yields an answer that is, at least, extremely surprising, if not
flat-out wrong:
id | a | b
----+---+------ 1 | 1 | oops 1 | 2 |
(2 rows)
Bugs #4953 and #5079 can also be reproduced in CVS HEAD. Both crash the server.
...Robert