Hi all,

While dealing with libxml2 things today, I have been reminded that we
have a regression test output for the case where we don't compile with
libxml2, which is error-prone (I also forgot xml_1.out; and managed to
forget about xml_2.out until massasauga has reminded me about it).

The only location where we use USE_LIBXML is in the backend's xml.c,
so we need some imagination for an \if query that can trigger an early
exit.  And it is simply possible to check if we have some data in the
table where the initial inserts are done at the top of the test, which
is what the attached patch is doing.

With this patch in place, we don't need to care about updating the
output file when not building with libxml2, leading to these numbers:
 4 files changed, 16 insertions(+), 1482 deletions(-)

I'd like to backpatch that down to v14, to ease future maintenance.
Any comments and/or objections?
--
Michael
From 585bec6a1ef1ae3e5126d5cfdbc39f6dc9952bd7 Mon Sep 17 00:00:00 2001
From: Michael Paquier <[email protected]>
Date: Fri, 12 Jun 2026 16:41:35 +0900
Subject: [PATCH] Skip xml tests when not compiling with libxml2

Two expected test outputs still need to be updated, as these are
required when building with libxml2.  The expected output trimmed here
shaves a lot of lines.
---
 src/test/regress/expected/xml.out   |    4 +
 src/test/regress/expected/xml_1.out | 1485 +--------------------------
 src/test/regress/expected/xml_2.out |    4 +
 src/test/regress/sql/xml.sql        |    5 +
 4 files changed, 16 insertions(+), 1482 deletions(-)

diff --git a/src/test/regress/expected/xml.out 
b/src/test/regress/expected/xml.out
index 3e80a7ff465d..ba7f6d82f7ed 100644
--- a/src/test/regress/expected/xml.out
+++ b/src/test/regress/expected/xml.out
@@ -11,6 +11,10 @@ LINE 1: INSERT INTO xmltest VALUES (3, '<wrong');
 DETAIL:  line 1: Couldn't find end of Start Tag wrong line 1
 <wrong
       ^
+SELECT count(*) = 0 AS skip_test FROM xmltest \gset
+\if :skip_test
+\quit
+\endif
 SELECT * FROM xmltest;
  id |        data        
 ----+--------------------
diff --git a/src/test/regress/expected/xml_1.out 
b/src/test/regress/expected/xml_1.out
index 2697c68a5116..a6df91e24c95 100644
--- a/src/test/regress/expected/xml_1.out
+++ b/src/test/regress/expected/xml_1.out
@@ -17,1485 +17,6 @@ ERROR:  unsupported XML feature
 LINE 1: INSERT INTO xmltest VALUES (3, '<wrong');
                                        ^
 DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT * FROM xmltest;
- id | data 
-----+------
-(0 rows)
-
--- test non-throwing API, too
-SELECT pg_input_is_valid('<value>one</value>', 'xml');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT pg_input_is_valid('<value>one</', 'xml');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT message FROM pg_input_error_info('<value>one</', 'xml');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT pg_input_is_valid('<?xml version="1.0" standalone="y"?><foo/>', 'xml');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT message FROM pg_input_error_info('<?xml version="1.0" 
standalone="y"?><foo/>', 'xml');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlcomment('test');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlcomment('-test');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlcomment('test-');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlcomment('--test');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlcomment('te st');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat(xmlcomment('hello'),
-                 xmlelement(NAME qux, 'foo'),
-                 xmlcomment('world'));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat('hello', 'you');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlconcat('hello', 'you');
-                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat(1, 2);
-ERROR:  argument of XMLCONCAT must be type xml, not type integer
-LINE 1: SELECT xmlconcat(1, 2);
-                         ^
-SELECT xmlconcat('bad', '<syntax');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlconcat('bad', '<syntax');
-                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat('<foo/>', NULL, '<?xml version="1.1" 
standalone="no"?><bar/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlconcat('<foo/>', NULL, '<?xml version="1.1" standa...
-                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat('<?xml version="1.1"?><foo/>', NULL, '<?xml version="1.1" 
standalone="no"?><bar/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlconcat('<?xml version="1.1"?><foo/>', NULL, '<?xml...
-                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlconcat(NULL);
- xmlconcat 
------------
- 
-(1 row)
-
-SELECT xmlconcat(NULL, NULL);
- xmlconcat 
------------
- 
-(1 row)
-
-SELECT xmlelement(name element,
-                  xmlattributes (1 as one, 'deuce' as two),
-                  'content');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name element,
-                  xmlattributes ('unnamed and wrong'));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name element, xmlelement(name nested, 'stuff'));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name employee, xmlforest(name, age, salary as pay)) FROM emp;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name duplicate, xmlattributes(1 as a, 2 as b, 3 as a));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name num, 37);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, text 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xml 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, text 'b<a/>r');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xml 'b<a/>r');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, array[1, 2, 3]);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET xmlbinary TO base64;
-SELECT xmlelement(name foo, bytea 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET xmlbinary TO hex;
-SELECT xmlelement(name foo, bytea 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xmlattributes(true as bar));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xmlattributes('2009-04-09 00:24:37'::timestamp as 
bar));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xmlattributes('infinity'::timestamp as bar));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlelement(name foo, xmlattributes('<>&"''' as funny, xml 'b<a/>r' as 
funnier));
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '  ');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content 'abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<abc>x</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<invalidentity>&</invalidentity>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<undefinedentity>&idontexist;</undefinedentity>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<invalidns xmlns=''&lt;''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<relativens xmlns=''relative''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<twoerrors>&idontexist;</unbalanced>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(content '<nosuchprefix:tag/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '   ');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document 'abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<abc>x</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<invalidentity>&</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<undefinedentity>&idontexist;</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<invalidns xmlns=''&lt;''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<relativens xmlns=''relative''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<twoerrors>&idontexist;</unbalanced>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlparse(document '<nosuchprefix:tag/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name foo);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name xml);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name xmlstuff);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name foo, 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name foo, 'in?>valid');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name foo, null);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name xml, null);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name xmlstuff, null);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name "xml-stylesheet", 'href="mystyle.css" type="text/css"');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name foo, '   bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot(xml '<foo/>', version no value, standalone no value);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot(xml '<foo/>', version no value, standalone no...
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot(xml '<foo/>', version '2.0');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot(xml '<foo/>', version '2.0');
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot(xml '<foo/>', version no value, standalone yes);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot(xml '<foo/>', version no value, standalone ye...
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot(xml '<?xml version="1.1"?><foo/>', version no value, standalone 
yes);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot(xml '<?xml version="1.1"?><foo/>', version no...
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot(xmlroot(xml '<foo/>', version '1.0'), version '1.1', standalone 
no);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot(xmlroot(xml '<foo/>', version '1.0'), version...
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>', version no 
value, standalone no);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>...
-                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>', version no 
value, standalone no value);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>...
-                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>', version no 
value);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlroot('<?xml version="1.1" standalone="yes"?><foo/>...
-                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlroot (
-  xmlelement (
-    name gazonk,
-    xmlattributes (
-      'val' AS name,
-      1 + 1 AS num
-    ),
-    xmlelement (
-      NAME qux,
-      'foo'
-    )
-  ),
-  version '1.0',
-  standalone yes
-);
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(content data as character varying(20)) FROM xmltest;
- xmlserialize 
---------------
-(0 rows)
-
-SELECT xmlserialize(content 'good' as char(10));
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(content 'good' as char(10));
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(document 'bad' as text);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(document 'bad' as text);
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent
-SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS 
text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val></bar></foo>' AS 
text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- no indent
-SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS 
text NO INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val></bar></foo>' AS 
text NO INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent non singly-rooted xml
-SELECT xmlserialize(DOCUMENT '<foo>73</foo><bar><val x="y">42</val></bar>' AS 
text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo>73</foo><bar><val x="y">4...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo>73</foo><bar><val x="y">42</val></bar>' AS 
text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo>73</foo><bar><val x="y">4...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent non singly-rooted xml with mixed contents
-SELECT xmlserialize(DOCUMENT 'text node<foo>73</foo>text node<bar><val 
x="y">42</val></bar>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT 'text node<foo>73</foo>text nod...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  'text node<foo>73</foo>text node<bar><val 
x="y">42</val></bar>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  'text node<foo>73</foo>text nod...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent singly-rooted xml with mixed contents
-SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val><val x="y">text 
node<val>73</val></val></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val><val x="y">text 
node<val>73</val></val></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent empty string
-SELECT xmlserialize(DOCUMENT '' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '' AS text INDENT);
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '' AS text INDENT);
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- whitespaces
-SELECT xmlserialize(DOCUMENT '  ' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '  ' AS text INDENT);
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '  ' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '  ' AS text INDENT);
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent null
-SELECT xmlserialize(DOCUMENT NULL AS text INDENT);
- xmlserialize 
---------------
- 
-(1 row)
-
-SELECT xmlserialize(CONTENT  NULL AS text INDENT);
- xmlserialize 
---------------
- 
-(1 row)
-
--- indent with XML declaration
-SELECT xmlserialize(DOCUMENT '<?xml version="1.0" 
encoding="UTF-8"?><foo><bar><val>73</val></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<?xml version="1.0" encoding="...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<?xml version="1.0" 
encoding="UTF-8"?><foo><bar><val>73</val></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<?xml version="1.0" encoding="...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent containing DOCTYPE declaration
-SELECT xmlserialize(DOCUMENT '<!DOCTYPE a><a/>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<!DOCTYPE a><a/>' AS text INDE...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<!DOCTYPE a><a/>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<!DOCTYPE a><a/>' AS text INDE...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent xml with empty element
-SELECT xmlserialize(DOCUMENT '<foo><bar></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo><bar></bar></foo>' AS tex...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo><bar></bar></foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo><bar></bar></foo>' AS tex...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- 'no indent' = not using 'no indent'
-SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS 
text) = xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val></bar></foo>' AS 
text NO INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val></bar></foo>' AS 
text) = xmlserialize(CONTENT '<foo><bar><val x="y">42</val></bar></foo>' AS 
text NO INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  '<foo><bar><val x="y">42</val><...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- indent xml strings containing blank nodes
-SELECT xmlserialize(DOCUMENT '<foo>   <bar></bar>    </foo>' AS text INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(DOCUMENT '<foo>   <bar></bar>    </foo>'...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlserialize(CONTENT  'text node<foo>    <bar></bar>   </foo>' AS text 
INDENT);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmlserialize(CONTENT  'text node<foo>    <bar></bar> ...
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<foo>bar</foo>' IS DOCUMENT;
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<foo>bar</foo>' IS DOCUMENT;
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<foo>bar</foo><bar>foo</bar>' IS DOCUMENT;
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<foo>bar</foo><bar>foo</bar>' IS DOCUMENT;
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<abc/>' IS NOT DOCUMENT;
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<abc/>' IS NOT DOCUMENT;
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml 'abc' IS NOT DOCUMENT;
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml 'abc' IS NOT DOCUMENT;
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT '<>' IS NOT DOCUMENT;
-ERROR:  unsupported XML feature
-LINE 1: SELECT '<>' IS NOT DOCUMENT;
-               ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlagg(data) FROM xmltest;
- xmlagg 
---------
- 
-(1 row)
-
-SELECT xmlagg(data) FROM xmltest WHERE id > 10;
- xmlagg 
---------
- 
-(1 row)
-
-SELECT xmlelement(name employees, xmlagg(xmlelement(name name, name))) FROM 
emp;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- Check mapping SQL identifier to XML name
-SELECT xmlpi(name ":::_xml_abc135.%-&_");
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlpi(name "123");
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-PREPARE foo (xml) AS SELECT xmlconcat('<foo/>', $1);
-ERROR:  unsupported XML feature
-LINE 1: PREPARE foo (xml) AS SELECT xmlconcat('<foo/>', $1);
-                                              ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET XML OPTION DOCUMENT;
-EXECUTE foo ('<bar/>');
-ERROR:  prepared statement "foo" does not exist
-EXECUTE foo ('bad');
-ERROR:  prepared statement "foo" does not exist
-SELECT xml '<!DOCTYPE a><a/><b/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!DOCTYPE a><a/><b/>';
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET XML OPTION CONTENT;
-EXECUTE foo ('<bar/>');
-ERROR:  prepared statement "foo" does not exist
-EXECUTE foo ('good');
-ERROR:  prepared statement "foo" does not exist
-SELECT xml '<!-- in SQL:2006+ a doc is content too--> <?y z?> <!DOCTYPE 
a><a/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!-- in SQL:2006+ a doc is content too--> <?y z?...
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<?xml version="1.0"?> <!-- hi--> <!DOCTYPE a><a/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<?xml version="1.0"?> <!-- hi--> <!DOCTYPE a><a/...
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<!DOCTYPE a><a/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!DOCTYPE a><a/>';
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<!-- hi--> oops <!DOCTYPE a><a/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!-- hi--> oops <!DOCTYPE a><a/>';
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<!-- hi--> <oops/> <!DOCTYPE a><a/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!-- hi--> <oops/> <!DOCTYPE a><a/>';
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml '<!DOCTYPE a><a/><b/>';
-ERROR:  unsupported XML feature
-LINE 1: SELECT xml '<!DOCTYPE a><a/><b/>';
-                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- Test backwards parsing
-CREATE VIEW xmlview1 AS SELECT xmlcomment('test');
-CREATE VIEW xmlview2 AS SELECT xmlconcat('hello', 'you');
-ERROR:  unsupported XML feature
-LINE 1: CREATE VIEW xmlview2 AS SELECT xmlconcat('hello', 'you');
-                                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview3 AS SELECT xmlelement(name element, xmlattributes (1 as 
":one:", 'deuce' as two), 'content&');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview4 AS SELECT xmlelement(name employee, xmlforest(name, age, 
salary as pay)) FROM emp;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview5 AS SELECT xmlparse(content '<abc>x</abc>');
-CREATE VIEW xmlview6 AS SELECT xmlpi(name foo, 'bar');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview7 AS SELECT xmlroot(xml '<foo/>', version no value, 
standalone yes);
-ERROR:  unsupported XML feature
-LINE 1: CREATE VIEW xmlview7 AS SELECT xmlroot(xml '<foo/>', version...
-                                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview8 AS SELECT xmlserialize(content 'good' as char(10));
-ERROR:  unsupported XML feature
-LINE 1: ...EATE VIEW xmlview8 AS SELECT xmlserialize(content 'good' as ...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview9 AS SELECT xmlserialize(content 'good' as text);
-ERROR:  unsupported XML feature
-LINE 1: ...EATE VIEW xmlview9 AS SELECT xmlserialize(content 'good' as ...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview10 AS SELECT xmlserialize(document 
'<foo><bar>42</bar></foo>' AS text indent);
-ERROR:  unsupported XML feature
-LINE 1: ...TE VIEW xmlview10 AS SELECT xmlserialize(document '<foo><bar...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmlview11 AS SELECT xmlserialize(document 
'<foo><bar>42</bar></foo>' AS character varying no indent);
-ERROR:  unsupported XML feature
-LINE 1: ...TE VIEW xmlview11 AS SELECT xmlserialize(document '<foo><bar...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT table_name, view_definition FROM information_schema.views
-  WHERE table_name LIKE 'xmlview%' ORDER BY 1;
- table_name |                                view_definition                   
              
-------------+--------------------------------------------------------------------------------
- xmlview1   |  SELECT xmlcomment('test'::text) AS xmlcomment;
- xmlview5   |  SELECT XMLPARSE(CONTENT '<abc>x</abc>'::text STRIP WHITESPACE) 
AS "xmlparse";
-(2 rows)
-
--- Text XPath expressions evaluation
-SELECT xpath('/value', data) FROM xmltest;
- xpath 
--------
-(0 rows)
-
-SELECT xpath(NULL, NULL) IS NULL FROM xmltest;
- ?column? 
-----------
-(0 rows)
-
-SELECT xpath('', '<!-- error -->');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('', '<!-- error -->');
-                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//text()', '<local:data 
xmlns:local="http://127.0.0.1";><local:piece id="1">number 
one</local:piece><local:piece id="2" /></local:data>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//text()', '<local:data xmlns:local="http://12...
-                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//loc:piece/@id', '<local:data 
xmlns:local="http://127.0.0.1";><local:piece id="1">number 
one</local:piece><local:piece id="2" /></local:data>', ARRAY[ARRAY['loc', 
'http://127.0.0.1']]);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//loc:piece/@id', '<local:data xmlns:local="ht...
-                                        ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//loc:piece', '<local:data 
xmlns:local="http://127.0.0.1";><local:piece id="1">number 
one</local:piece><local:piece id="2" /></local:data>', ARRAY[ARRAY['loc', 
'http://127.0.0.1']]);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//loc:piece', '<local:data xmlns:local="http:/...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//loc:piece', '<local:data xmlns:local="http://127.0.0.1"; 
xmlns="http://127.0.0.2";><local:piece id="1"><internal>number 
one</internal><internal2/></local:piece><local:piece id="2" /></local:data>', 
ARRAY[ARRAY['loc', 'http://127.0.0.1']]);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//loc:piece', '<local:data xmlns:local="http:/...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//b', '<a>one <b>two</b> three <b>etc</b></a>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//b', '<a>one <b>two</b> three <b>etc</b></a>'...
-                            ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//text()', '<root>&lt;</root>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//text()', '<root>&lt;</root>');
-                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//@value', '<root value="&lt;"/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//@value', '<root value="&lt;"/>');
-                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('''<<invalid>>''', '<root/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('''<<invalid>>''', '<root/>');
-                                        ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('count(//*)', '<root><sub/><sub/></root>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('count(//*)', '<root><sub/><sub/></root>');
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('count(//*)=0', '<root><sub/><sub/></root>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('count(//*)=0', '<root><sub/><sub/></root>');
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('count(//*)=3', '<root><sub/><sub/></root>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('count(//*)=3', '<root><sub/><sub/></root>');
-                                     ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('name(/*)', '<root><sub/><sub/></root>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('name(/*)', '<root><sub/><sub/></root>');
-                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('/nosuchtag', '<root/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('/nosuchtag', '<root/>');
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('root', '<root/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('root', '<root/>');
-                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath('//namespace::foo', '<root xmlns:foo="http://127.0.0.1"/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('//namespace::foo', '<root xmlns:foo="http://12...
-                                         ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- Round-trip non-ASCII data through xpath().
-DO $$
-DECLARE
-  xml_declaration text := '<?xml version="1.0" encoding="ISO-8859-1"?>';
-  degree_symbol text;
-  res xml[];
-BEGIN
-  -- Per the documentation, except when the server encoding is UTF8, xpath()
-  -- may not work on non-ASCII data.  The untranslatable_character and
-  -- undefined_function traps below, currently dead code, will become relevant
-  -- if we remove this limitation.
-  IF current_setting('server_encoding') <> 'UTF8' THEN
-    RAISE LOG 'skip: encoding % unsupported for xpath',
-      current_setting('server_encoding');
-    RETURN;
-  END IF;
-
-  degree_symbol := convert_from('\xc2b0', 'UTF8');
-  res := xpath('text()', (xml_declaration ||
-    '<x>' || degree_symbol || '</x>')::xml);
-  IF degree_symbol <> res[1]::text THEN
-    RAISE 'expected % (%), got % (%)',
-      degree_symbol, convert_to(degree_symbol, 'UTF8'),
-      res[1], convert_to(res[1]::text, 'UTF8');
-  END IF;
-EXCEPTION
-  -- character with byte sequence 0xc2 0xb0 in encoding "UTF8" has no 
equivalent in encoding "LATIN8"
-  WHEN undefined_function
-  -- unsupported XML feature
-  OR feature_not_supported THEN
-    RAISE LOG 'skip: %', SQLERRM;
-END
-$$;
--- Test xmlexists and xpath_exists
-SELECT xmlexists('//town[text() = ''Toronto'']' PASSING BY REF 
'<towns><town>Bidford-on-Avon</town><town>Cwmbran</town><town>Bristol</town></towns>');
-ERROR:  unsupported XML feature
-LINE 1: ...sts('//town[text() = ''Toronto'']' PASSING BY REF '<towns><t...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlexists('//town[text() = ''Cwmbran'']' PASSING BY REF 
'<towns><town>Bidford-on-Avon</town><town>Cwmbran</town><town>Bristol</town></towns>');
-ERROR:  unsupported XML feature
-LINE 1: ...sts('//town[text() = ''Cwmbran'']' PASSING BY REF '<towns><t...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmlexists('count(/nosuchtag)' PASSING BY REF '<root/>');
-ERROR:  unsupported XML feature
-LINE 1: ...LECT xmlexists('count(/nosuchtag)' PASSING BY REF '<root/>')...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath_exists('//town[text() = 
''Toronto'']','<towns><town>Bidford-on-Avon</town><town>Cwmbran</town><town>Bristol</town></towns>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: ...ELECT xpath_exists('//town[text() = ''Toronto'']','<towns><t...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath_exists('//town[text() = 
''Cwmbran'']','<towns><town>Bidford-on-Avon</town><town>Cwmbran</town><town>Bristol</town></towns>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: ...ELECT xpath_exists('//town[text() = ''Cwmbran'']','<towns><t...
-                                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xpath_exists('count(/nosuchtag)', '<root/>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath_exists('count(/nosuchtag)', '<root/>'::xml);
-                                                 ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest VALUES (4, 
'<menu><beers><name>Budvar</name><cost>free</cost><name>Carling</name><cost>lots</cost></beers></menu>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest VALUES (4, '<menu><beers><name>Budvar</n...
-                                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest VALUES (5, 
'<menu><beers><name>Molson</name><cost>free</cost><name>Carling</name><cost>lots</cost></beers></menu>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest VALUES (5, '<menu><beers><name>Molson</n...
-                                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest VALUES (6, '<myns:menu 
xmlns:myns="http://myns.com";><myns:beers><myns:name>Budvar</myns:name><myns:cost>free</myns:cost><myns:name>Carling</myns:name><myns:cost>lots</myns:cost></myns:beers></myns:menu>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest VALUES (6, '<myns:menu xmlns:myns="http:...
-                                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest VALUES (7, '<myns:menu 
xmlns:myns="http://myns.com";><myns:beers><myns:name>Molson</myns:name><myns:cost>free</myns:cost><myns:name>Carling</myns:name><myns:cost>lots</myns:cost></myns:beers></myns:menu>'::xml);
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest VALUES (7, '<myns:menu xmlns:myns="http:...
-                                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT COUNT(id) FROM xmltest WHERE xmlexists('/menu/beer' PASSING data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xmlexists('/menu/beer' PASSING BY REF data 
BY REF);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xmlexists('/menu/beers' PASSING BY REF 
data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xmlexists('/menu/beers/name[text() = 
''Molson'']' PASSING BY REF data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xpath_exists('/menu/beer',data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xpath_exists('/menu/beers',data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE xpath_exists('/menu/beers/name[text() = 
''Molson'']',data);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE 
xpath_exists('/myns:menu/myns:beer',data,ARRAY[ARRAY['myns','http://myns.com']]);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE 
xpath_exists('/myns:menu/myns:beers',data,ARRAY[ARRAY['myns','http://myns.com']]);
- count 
--------
-     0
-(1 row)
-
-SELECT COUNT(id) FROM xmltest WHERE 
xpath_exists('/myns:menu/myns:beers/myns:name[text() = 
''Molson'']',data,ARRAY[ARRAY['myns','http://myns.com']]);
- count 
--------
-     0
-(1 row)
-
-CREATE TABLE query ( expr TEXT );
-INSERT INTO query VALUES ('/menu/beers/cost[text() = ''lots'']');
-SELECT COUNT(id) FROM xmltest, query WHERE xmlexists(expr PASSING BY REF data);
- count 
--------
-     0
-(1 row)
-
--- Test xml_is_well_formed and variants
-SELECT xml_is_well_formed_document('<foo>bar</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed_document('abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed_content('<foo>bar</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed_content('abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET xmloption TO DOCUMENT;
-SELECT xml_is_well_formed('abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<abc/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<foo>bar</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<foo>bar</foo');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<foo><bar>baz</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<local:data 
xmlns:local="http://127.0.0.1";><local:piece id="1">number 
one</local:piece><local:piece id="2" /></local:data>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<pg:foo 
xmlns:pg="http://postgresql.org/stuff";>bar</my:foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<pg:foo 
xmlns:pg="http://postgresql.org/stuff";>bar</pg:foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<invalidentity>&</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<undefinedentity>&idontexist;</abc>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<invalidns xmlns=''&lt;''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<relativens xmlns=''relative''/>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xml_is_well_formed('<twoerrors>&idontexist;</unbalanced>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SET xmloption TO CONTENT;
-SELECT xml_is_well_formed('abc');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- Since xpath() deals with namespaces, it's a bit stricter about
--- what's well-formed and what's not. If we don't obey these rules
--- (i.e. ignore namespace-related errors from libxml), xpath()
--- fails in subtle ways. The following would for example produce
--- the xml value
---   <invalidns xmlns='<'/>
--- which is invalid because '<' may not appear un-escaped in
--- attribute values.
--- Since different libxml versions emit slightly different
--- error messages, we suppress the DETAIL in this test.
-\set VERBOSITY terse
-SELECT xpath('/*', '<invalidns xmlns=''&lt;''/>');
-ERROR:  unsupported XML feature at character 20
-\set VERBOSITY default
--- Again, the XML isn't well-formed for namespace purposes
-SELECT xpath('/*', '<nosuchprefix:tag/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('/*', '<nosuchprefix:tag/>');
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- XPath deprecates relative namespaces, but they're not supposed to
--- throw an error, only a warning.
-SELECT xpath('/*', '<relativens xmlns=''relative''/>');
-ERROR:  unsupported XML feature
-LINE 1: SELECT xpath('/*', '<relativens xmlns=''relative''/>');
-                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- External entity references should not leak filesystem information.
-SELECT XMLPARSE(DOCUMENT '<!DOCTYPE foo [<!ENTITY c SYSTEM 
"/etc/passwd">]><foo>&c;</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT XMLPARSE(DOCUMENT '<!DOCTYPE foo [<!ENTITY c SYSTEM 
"/etc/no.such.file">]><foo>&c;</foo>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- This might or might not load the requested DTD, but it mustn't throw error.
-SELECT XMLPARSE(DOCUMENT '<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML 
V4.1.2//EN" 
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd";><chapter>&nbsp;</chapter>');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- XMLPATH tests
-CREATE TABLE xmldata(data xml);
-INSERT INTO xmldata VALUES('<ROWS>
-<ROW id="1">
-  <COUNTRY_ID>AU</COUNTRY_ID>
-  <COUNTRY_NAME>Australia</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID>
-</ROW>
-<ROW id="2">
-  <COUNTRY_ID>CN</COUNTRY_ID>
-  <COUNTRY_NAME>China</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID>
-</ROW>
-<ROW id="3">
-  <COUNTRY_ID>HK</COUNTRY_ID>
-  <COUNTRY_NAME>HongKong</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID>
-</ROW>
-<ROW id="4">
-  <COUNTRY_ID>IN</COUNTRY_ID>
-  <COUNTRY_NAME>India</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID>
-</ROW>
-<ROW id="5">
-  <COUNTRY_ID>JP</COUNTRY_ID>
-  <COUNTRY_NAME>Japan</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID><PREMIER_NAME>Sinzo Abe</PREMIER_NAME>
-</ROW>
-<ROW id="6">
-  <COUNTRY_ID>SG</COUNTRY_ID>
-  <COUNTRY_NAME>Singapore</COUNTRY_NAME>
-  <REGION_ID>3</REGION_ID><SIZE unit="km">791</SIZE>
-</ROW>
-</ROWS>');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmldata VALUES('<ROWS>
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- XMLTABLE with columns
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME/text()' 
NOT NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
-CREATE VIEW xmltableview1 AS SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME/text()' 
NOT NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
-SELECT * FROM xmltableview1;
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
-\sv xmltableview1
-CREATE OR REPLACE VIEW public.xmltableview1 AS
- SELECT "xmltable".id,
-    "xmltable"._id,
-    "xmltable".country_name,
-    "xmltable".country_id,
-    "xmltable".region_id,
-    "xmltable".size,
-    "xmltable".unit,
-    "xmltable".premier_name
-   FROM ( SELECT xmldata.data
-           FROM xmldata) x,
-    LATERAL XMLTABLE(('/ROWS/ROW'::text) PASSING (x.data) COLUMNS id integer 
PATH ('@id'::text), _id FOR ORDINALITY, country_name text PATH 
('COUNTRY_NAME/text()'::text) NOT NULL, country_id text PATH 
('COUNTRY_ID'::text), region_id integer PATH ('REGION_ID'::text), size double 
precision PATH ('SIZE'::text), unit text PATH ('SIZE/@unit'::text), 
premier_name text DEFAULT ('not specified'::text) PATH ('PREMIER_NAME'::text))
-EXPLAIN (COSTS OFF) SELECT * FROM xmltableview1;
-               QUERY PLAN                
------------------------------------------
- Nested Loop
-   ->  Seq Scan on xmldata
-   ->  Table Function Scan on "xmltable"
-(3 rows)
-
-EXPLAIN (COSTS OFF, VERBOSE) SELECT * FROM xmltableview1;
-                                                                               
                                                                                
                                                             QUERY PLAN         
                                                                                
                                                                                
                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Nested Loop
-   Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-   ->  Seq Scan on public.xmldata
-         Output: xmldata.data
-   ->  Table Function Scan on "xmltable"
-         Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-         Table Function Call: XMLTABLE(('/ROWS/ROW'::text) PASSING 
(xmldata.data) COLUMNS id integer PATH ('@id'::text), _id FOR ORDINALITY, 
country_name text PATH ('COUNTRY_NAME/text()'::text) NOT NULL, country_id text 
PATH ('COUNTRY_ID'::text), region_id integer PATH ('REGION_ID'::text), size 
double precision PATH ('SIZE'::text), unit text PATH ('SIZE/@unit'::text), 
premier_name text DEFAULT ('not specified'::text) PATH ('PREMIER_NAME'::text))
-(7 rows)
-
--- errors
-SELECT * FROM XMLTABLE (ROW () PASSING null COLUMNS v1 timestamp) AS f (v1, 
v2);
-ERROR:  XMLTABLE function has 1 columns available but 2 columns specified
-SELECT * FROM XMLTABLE (ROW () PASSING null COLUMNS v1 timestamp 
__pg__is_not_null 1) AS f (v1);
-ERROR:  option name "__pg__is_not_null" cannot be used in XMLTABLE
-LINE 1: ...MLTABLE (ROW () PASSING null COLUMNS v1 timestamp __pg__is_n...
-                                                             ^
--- XMLNAMESPACES tests
-SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' AS zz),
-                      '/zz:rows/zz:row'
-                      PASSING '<rows 
xmlns="http://x.y";><row><a>10</a></row></rows>'
-                      COLUMNS a int PATH 'zz:a');
-ERROR:  unsupported XML feature
-LINE 3:                       PASSING '<rows xmlns="http://x.y";><row...
-                                      ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE VIEW xmltableview2 AS SELECT * FROM XMLTABLE(XMLNAMESPACES('http://x.y' 
AS "Zz"),
-                      '/Zz:rows/Zz:row'
-                      PASSING '<rows 
xmlns="http://x.y";><row><a>10</a></row></rows>'
-                      COLUMNS a int PATH 'Zz:a');
-ERROR:  unsupported XML feature
-LINE 3:                       PASSING '<rows xmlns="http://x.y";><row...
-                                      ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT * FROM xmltableview2;
-ERROR:  relation "xmltableview2" does not exist
-LINE 1: SELECT * FROM xmltableview2;
-                      ^
-\sv xmltableview2
-ERROR:  relation "xmltableview2" does not exist
-SELECT * FROM XMLTABLE(XMLNAMESPACES(DEFAULT 'http://x.y'),
-                      '/rows/row'
-                      PASSING '<rows 
xmlns="http://x.y";><row><a>10</a></row></rows>'
-                      COLUMNS a int PATH 'a');
-ERROR:  unsupported XML feature
-LINE 3:                       PASSING '<rows xmlns="http://x.y";><row...
-                                      ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT * FROM XMLTABLE('.'
-                       PASSING '<foo/>'
-                       COLUMNS a text PATH 'foo/namespace::node()');
-ERROR:  unsupported XML feature
-LINE 2:                        PASSING '<foo/>'
-                                       ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- used in prepare statements
-PREPARE pp AS
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
-EXECUTE pp;
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS "COUNTRY_NAME" text, "REGION_ID" int);
- COUNTRY_NAME | REGION_ID 
---------------+-----------
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id FOR ORDINALITY, "COUNTRY_NAME" text, "REGION_ID" int);
- id | COUNTRY_NAME | REGION_ID 
-----+--------------+-----------
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id int PATH '@id', "COUNTRY_NAME" text, "REGION_ID" int);
- id | COUNTRY_NAME | REGION_ID 
-----+--------------+-----------
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id int PATH '@id');
- id 
-----
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id FOR ORDINALITY);
- id 
-----
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id int PATH '@id', "COUNTRY_NAME" text, "REGION_ID" int, rawdata xml 
PATH '.');
- id | COUNTRY_NAME | REGION_ID | rawdata 
-----+--------------+-----------+---------
-(0 rows)
-
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS id int PATH '@id', "COUNTRY_NAME" text, "REGION_ID" int, rawdata xml 
PATH './*');
- id | COUNTRY_NAME | REGION_ID | rawdata 
-----+--------------+-----------+---------
-(0 rows)
-
-SELECT * FROM xmltable('/root' passing '<root><element>a1a<!-- aaaa 
-->a2a<?aaaaa?> <!--z-->  bbbb<x>xxx</x>cccc</element></root>' COLUMNS element 
text);
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM xmltable('/root' passing '<root><element>a1a<!...
-                                               ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT * FROM xmltable('/root' passing '<root><element>a1a<!-- aaaa 
-->a2a<?aaaaa?> <!--z-->  bbbb<x>xxx</x>cccc</element></root>' COLUMNS element 
text PATH 'element/text()'); -- should fail
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM xmltable('/root' passing '<root><element>a1a<!...
-                                               ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- CDATA test
-select * from xmltable('d/r' passing '<d><r><c><![CDATA[<hello> 
&"<>!<a>foo</a>]]></c></r><r><c>2</c></r></d>' columns c text);
-ERROR:  unsupported XML feature
-LINE 1: select * from xmltable('d/r' passing '<d><r><c><![CDATA[<hel...
-                                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- XML builtin entities
-SELECT * FROM xmltable('/x/a' PASSING 
'<x><a><ent>&apos;</ent></a><a><ent>&quot;</ent></a><a><ent>&amp;</ent></a><a><ent>&lt;</ent></a><a><ent>&gt;</ent></a></x>'
 COLUMNS ent text);
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM xmltable('/x/a' PASSING '<x><a><ent>&apos;</en...
-                                              ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT * FROM xmltable('/x/a' PASSING 
'<x><a><ent>&apos;</ent></a><a><ent>&quot;</ent></a><a><ent>&amp;</ent></a><a><ent>&lt;</ent></a><a><ent>&gt;</ent></a></x>'
 COLUMNS ent xml);
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM xmltable('/x/a' PASSING '<x><a><ent>&apos;</en...
-                                              ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-EXPLAIN (VERBOSE, COSTS OFF)
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
-                                                                               
                                                                                
                                                         QUERY PLAN             
                                                                                
                                                                                
                                            
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Nested Loop
-   Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-   ->  Seq Scan on public.xmldata
-         Output: xmldata.data
-   ->  Table Function Scan on "xmltable"
-         Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-         Table Function Call: XMLTABLE(('/ROWS/ROW'::text) PASSING 
(xmldata.data) COLUMNS id integer PATH ('@id'::text), _id FOR ORDINALITY, 
country_name text PATH ('COUNTRY_NAME'::text) NOT NULL, country_id text PATH 
('COUNTRY_ID'::text), region_id integer PATH ('REGION_ID'::text), size double 
precision PATH ('SIZE'::text), unit text PATH ('SIZE/@unit'::text), 
premier_name text DEFAULT ('not specified'::text) PATH ('PREMIER_NAME'::text))
-(7 rows)
-
--- test qual
-SELECT xmltable.* FROM xmldata, LATERAL 
xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or COUNTRY_NAME="India"]' PASSING data 
COLUMNS "COUNTRY_NAME" text, "REGION_ID" int) WHERE "COUNTRY_NAME" = 'Japan';
- COUNTRY_NAME | REGION_ID 
---------------+-----------
-(0 rows)
-
-EXPLAIN (VERBOSE, COSTS OFF)
-SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or 
COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" 
int) AS f WHERE "COUNTRY_NAME" = 'Japan';
-                                                                               
     QUERY PLAN                                                                 
                   
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Nested Loop
-   Output: f."COUNTRY_NAME", f."REGION_ID"
-   ->  Seq Scan on public.xmldata
-         Output: xmldata.data
-   ->  Table Function Scan on "xmltable" f
-         Output: f."COUNTRY_NAME", f."REGION_ID"
-         Table Function Call: XMLTABLE(('/ROWS/ROW[COUNTRY_NAME="Japan" or 
COUNTRY_NAME="India"]'::text) PASSING (xmldata.data) COLUMNS "COUNTRY_NAME" 
text, "REGION_ID" integer)
-         Filter: (f."COUNTRY_NAME" = 'Japan'::text)
-(8 rows)
-
-EXPLAIN (VERBOSE, FORMAT JSON, COSTS OFF)
-SELECT f.* FROM xmldata, LATERAL xmltable('/ROWS/ROW[COUNTRY_NAME="Japan" or 
COUNTRY_NAME="India"]' PASSING data COLUMNS "COUNTRY_NAME" text, "REGION_ID" 
int) AS f WHERE "COUNTRY_NAME" = 'Japan';
-                                                                               
            QUERY PLAN                                                          
                                  
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- [                                                                             
                                                                                
                                 +
-   {                                                                           
                                                                                
                                 +
-     "Plan": {                                                                 
                                                                                
                                 +
-       "Node Type": "Nested Loop",                                             
                                                                                
                                 +
-       "Parallel Aware": false,                                                
                                                                                
                                 +
-       "Async Capable": false,                                                 
                                                                                
                                 +
-       "Join Type": "Inner",                                                   
                                                                                
                                 +
-       "Disabled": false,                                                      
                                                                                
                                 +
-       "Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""],                    
                                                                                
                                 +
-       "Inner Unique": false,                                                  
                                                                                
                                 +
-       "Plans": [                                                              
                                                                                
                                 +
-         {                                                                     
                                                                                
                                 +
-           "Node Type": "Seq Scan",                                            
                                                                                
                                 +
-           "Parent Relationship": "Outer",                                     
                                                                                
                                 +
-           "Parallel Aware": false,                                            
                                                                                
                                 +
-           "Async Capable": false,                                             
                                                                                
                                 +
-           "Relation Name": "xmldata",                                         
                                                                                
                                 +
-           "Schema": "public",                                                 
                                                                                
                                 +
-           "Alias": "xmldata",                                                 
                                                                                
                                 +
-           "Disabled": false,                                                  
                                                                                
                                 +
-           "Output": ["xmldata.data"]                                          
                                                                                
                                 +
-         },                                                                    
                                                                                
                                 +
-         {                                                                     
                                                                                
                                 +
-           "Node Type": "Table Function Scan",                                 
                                                                                
                                 +
-           "Parent Relationship": "Inner",                                     
                                                                                
                                 +
-           "Parallel Aware": false,                                            
                                                                                
                                 +
-           "Async Capable": false,                                             
                                                                                
                                 +
-           "Table Function Name": "xmltable",                                  
                                                                                
                                 +
-           "Alias": "f",                                                       
                                                                                
                                 +
-           "Disabled": false,                                                  
                                                                                
                                 +
-           "Output": ["f.\"COUNTRY_NAME\"", "f.\"REGION_ID\""],                
                                                                                
                                 +
-           "Table Function Call": "XMLTABLE(('/ROWS/ROW[COUNTRY_NAME=\"Japan\" 
or COUNTRY_NAME=\"India\"]'::text) PASSING (xmldata.data) COLUMNS 
\"COUNTRY_NAME\" text, \"REGION_ID\" integer)",+
-           "Filter": "(f.\"COUNTRY_NAME\" = 'Japan'::text)"                    
                                                                                
                                 +
-         }                                                                     
                                                                                
                                 +
-       ]                                                                       
                                                                                
                                 +
-     }                                                                         
                                                                                
                                 +
-   }                                                                           
                                                                                
                                 +
- ]
-(1 row)
-
--- should to work with more data
-INSERT INTO xmldata VALUES('<ROWS>
-<ROW id="10">
-  <COUNTRY_ID>CZ</COUNTRY_ID>
-  <COUNTRY_NAME>Czech Republic</COUNTRY_NAME>
-  <REGION_ID>2</REGION_ID><PREMIER_NAME>Milos Zeman</PREMIER_NAME>
-</ROW>
-<ROW id="11">
-  <COUNTRY_ID>DE</COUNTRY_ID>
-  <COUNTRY_NAME>Germany</COUNTRY_NAME>
-  <REGION_ID>2</REGION_ID>
-</ROW>
-<ROW id="12">
-  <COUNTRY_ID>FR</COUNTRY_ID>
-  <COUNTRY_NAME>France</COUNTRY_NAME>
-  <REGION_ID>2</REGION_ID>
-</ROW>
-</ROWS>');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmldata VALUES('<ROWS>
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmldata VALUES('<ROWS>
-<ROW id="20">
-  <COUNTRY_ID>EG</COUNTRY_ID>
-  <COUNTRY_NAME>Egypt</COUNTRY_NAME>
-  <REGION_ID>1</REGION_ID>
-</ROW>
-<ROW id="21">
-  <COUNTRY_ID>SD</COUNTRY_ID>
-  <COUNTRY_NAME>Sudan</COUNTRY_NAME>
-  <REGION_ID>1</REGION_ID>
-</ROW>
-</ROWS>');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmldata VALUES('<ROWS>
-                                   ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified')
-  WHERE region_id = 2;
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
-EXPLAIN (VERBOSE, COSTS OFF)
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE',
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified')
-  WHERE region_id = 2;
-                                                                               
                                                                                
                                                         QUERY PLAN             
                                                                                
                                                                                
                                            
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- Nested Loop
-   Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-   ->  Seq Scan on public.xmldata
-         Output: xmldata.data
-   ->  Table Function Scan on "xmltable"
-         Output: "xmltable".id, "xmltable"._id, "xmltable".country_name, 
"xmltable".country_id, "xmltable".region_id, "xmltable".size, "xmltable".unit, 
"xmltable".premier_name
-         Table Function Call: XMLTABLE(('/ROWS/ROW'::text) PASSING 
(xmldata.data) COLUMNS id integer PATH ('@id'::text), _id FOR ORDINALITY, 
country_name text PATH ('COUNTRY_NAME'::text) NOT NULL, country_id text PATH 
('COUNTRY_ID'::text), region_id integer PATH ('REGION_ID'::text), size double 
precision PATH ('SIZE'::text), unit text PATH ('SIZE/@unit'::text), 
premier_name text DEFAULT ('not specified'::text) PATH ('PREMIER_NAME'::text))
-         Filter: ("xmltable".region_id = 2)
-(8 rows)
-
--- should fail, NULL value
-SELECT  xmltable.*
-   FROM (SELECT data FROM xmldata) x,
-        LATERAL XMLTABLE('/ROWS/ROW'
-                         PASSING data
-                         COLUMNS id int PATH '@id',
-                                  _id FOR ORDINALITY,
-                                  country_name text PATH 'COUNTRY_NAME' NOT 
NULL,
-                                  country_id text PATH 'COUNTRY_ID',
-                                  region_id int PATH 'REGION_ID',
-                                  size float PATH 'SIZE' NOT NULL,
-                                  unit text PATH 'SIZE/@unit',
-                                  premier_name text PATH 'PREMIER_NAME' 
DEFAULT 'not specified');
- id | _id | country_name | country_id | region_id | size | unit | premier_name 
-----+-----+--------------+------------+-----------+------+------+--------------
-(0 rows)
-
--- if all is ok, then result is empty
--- one line xml test
-WITH
-   x AS (SELECT proname, proowner, procost::numeric, pronargs,
-                array_to_string(proargnames,',') as proargnames,
-                case when proargtypes <> '' then 
array_to_string(proargtypes::oid[],',') end as proargtypes
-           FROM pg_proc WHERE proname = 'f_leak'),
-   y AS (SELECT xmlelement(name proc,
-                           xmlforest(proname, proowner,
-                                     procost, pronargs,
-                                     proargnames, proargtypes)) as proc
-           FROM x),
-   z AS (SELECT xmltable.*
-           FROM y,
-                LATERAL xmltable('/proc' PASSING proc
-                                 COLUMNS proname name,
-                                         proowner oid,
-                                         procost float,
-                                         pronargs int,
-                                         proargnames text,
-                                         proargtypes text))
-   SELECT * FROM z
-   EXCEPT SELECT * FROM x;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
--- multi line xml test, result should be empty too
-WITH
-   x AS (SELECT proname, proowner, procost::numeric, pronargs,
-                array_to_string(proargnames,',') as proargnames,
-                case when proargtypes <> '' then 
array_to_string(proargtypes::oid[],',') end as proargtypes
-           FROM pg_proc),
-   y AS (SELECT xmlelement(name data,
-                           xmlagg(xmlelement(name proc,
-                                             xmlforest(proname, proowner, 
procost,
-                                                       pronargs, proargnames, 
proargtypes)))) as doc
-           FROM x),
-   z AS (SELECT xmltable.*
-           FROM y,
-                LATERAL xmltable('/data/proc' PASSING doc
-                                 COLUMNS proname name,
-                                         proowner oid,
-                                         procost float,
-                                         pronargs int,
-                                         proargnames text,
-                                         proargtypes text))
-   SELECT * FROM z
-   EXCEPT SELECT * FROM x;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-CREATE TABLE xmltest2(x xml, _path text);
-INSERT INTO xmltest2 VALUES('<d><r><ac>1</ac></r></d>', 'A');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest2 VALUES('<d><r><ac>1</ac></r></d>', 'A')...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest2 VALUES('<d><r><bc>2</bc></r></d>', 'B');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest2 VALUES('<d><r><bc>2</bc></r></d>', 'B')...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest2 VALUES('<d><r><cc>3</cc></r></d>', 'C');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest2 VALUES('<d><r><cc>3</cc></r></d>', 'C')...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-INSERT INTO xmltest2 VALUES('<d><r><dc>2</dc></r></d>', 'D');
-ERROR:  unsupported XML feature
-LINE 1: INSERT INTO xmltest2 VALUES('<d><r><dc>2</dc></r></d>', 'D')...
-                                    ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltable.* FROM xmltest2, LATERAL xmltable('/d/r' PASSING x COLUMNS a 
int PATH '' || lower(_path) || 'c');
- a 
----
-(0 rows)
-
-SELECT xmltable.* FROM xmltest2, LATERAL xmltable(('/d/r/' || lower(_path) || 
'c') PASSING x COLUMNS a int PATH '.');
- a 
----
-(0 rows)
-
-SELECT xmltable.* FROM xmltest2, LATERAL xmltable(('/d/r/' || lower(_path) || 
'c') PASSING x COLUMNS a int PATH 'x' DEFAULT ascii(_path) - 54);
- a 
----
-(0 rows)
-
--- XPath result can be boolean or number too
-SELECT * FROM XMLTABLE('*' PASSING '<a>a</a>' COLUMNS a xml PATH '.', b text 
PATH '.', c text PATH '"hi"', d boolean PATH '. = "a"', e integer PATH 
'string-length(.)');
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM XMLTABLE('*' PASSING '<a>a</a>' COLUMNS a xml ...
-                                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-\x
-SELECT * FROM XMLTABLE('*' PASSING '<e>pre<!--c1--><?pi 
arg?><![CDATA[&ent1]]><n2>&amp;deep</n2>post</e>' COLUMNS x xml PATH '/e/n2', y 
xml PATH '/');
-ERROR:  unsupported XML feature
-LINE 1: SELECT * FROM XMLTABLE('*' PASSING '<e>pre<!--c1--><?pi arg?...
-                                           ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-\x
-SELECT * FROM XMLTABLE('.' PASSING XMLELEMENT(NAME a) columns a varchar(20) 
PATH '"<foo/>"', b xml PATH '"<foo/>"');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltext(NULL);
- xmltext 
----------
- 
-(1 row)
-
-SELECT xmltext('');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltext('  ');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltext('foo `$_-+?=*^%!|/\()[]{}');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltext('foo & <"bar">');
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml 
support.
-SELECT xmltext('x'|| '<P>73</P>'::xml || .42 || true || 'j'::char);
-ERROR:  unsupported XML feature
-LINE 1: SELECT xmltext('x'|| '<P>73</P>'::xml || .42 || true || 'j':...
-                             ^
-DETAIL:  This functionality requires the server to be built with libxml 
support.
+SELECT count(*) = 0 AS skip_test FROM xmltest \gset
+\if :skip_test
+\quit
diff --git a/src/test/regress/expected/xml_2.out 
b/src/test/regress/expected/xml_2.out
index f51ad196e159..4b5eb8388808 100644
--- a/src/test/regress/expected/xml_2.out
+++ b/src/test/regress/expected/xml_2.out
@@ -9,6 +9,10 @@ ERROR:  invalid XML content
 LINE 1: INSERT INTO xmltest VALUES (3, '<wrong');
                                        ^
 DETAIL:  line 1: Couldn't find end of Start Tag wrong line 1
+SELECT count(*) = 0 AS skip_test FROM xmltest \gset
+\if :skip_test
+\quit
+\endif
 SELECT * FROM xmltest;
  id |        data        
 ----+--------------------
diff --git a/src/test/regress/sql/xml.sql b/src/test/regress/sql/xml.sql
index 2b8445e499ec..9fece0b874f6 100644
--- a/src/test/regress/sql/xml.sql
+++ b/src/test/regress/sql/xml.sql
@@ -7,6 +7,11 @@ INSERT INTO xmltest VALUES (1, '<value>one</value>');
 INSERT INTO xmltest VALUES (2, '<value>two</value>');
 INSERT INTO xmltest VALUES (3, '<wrong');
 
+SELECT count(*) = 0 AS skip_test FROM xmltest \gset
+\if :skip_test
+\quit
+\endif
+
 SELECT * FROM xmltest;
 
 -- test non-throwing API, too
-- 
2.54.0

Attachment: signature.asc
Description: PGP signature

Reply via email to