From 075ced2a4c09fad1a27ec545ab632cf1504e534f Mon Sep 17 00:00:00 2001
From: Noah Misch <noah@leadboat.com>
Date: Sat, 11 Nov 2017 13:07:46 -0800
Subject: [PATCH] Fix previous commit's test, for non-UTF8 databases with
 non-XML builds.

To ensure stable output, catch one more configuration-specific error.
Back-patch to 9.3, like the commit that added the test.
---
 src/test/regress/expected/xml.out   | 16 ++++++++++------
 src/test/regress/expected/xml_1.out | 20 ++++++++++----------
 src/test/regress/expected/xml_2.out | 16 ++++++++++------
 src/test/regress/sql/xml.sql        | 16 ++++++++++------
 4 files changed, 40 insertions(+), 28 deletions(-)

diff --git a/src/test/regress/expected/xml.out b/src/test/regress/expected/xml.out
index f7a8c38bdea..7fa13091087 100644
--- a/src/test/regress/expected/xml.out
+++ b/src/test/regress/expected/xml.out
@@ -677,11 +677,12 @@ DECLARE
   degree_symbol text;
   res xml[];
 BEGIN
-  -- Per the documentation, xpath() doesn't work on non-ASCII data when
-  -- the server encoding is not UTF8.  The EXCEPTION block below,
-  -- currently dead code, will be relevant if we remove this limitation.
+  -- 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 xml',
+    RAISE LOG 'skip: encoding % unsupported for xpath',
       current_setting('server_encoding');
     RETURN;
   END IF;
@@ -696,9 +697,12 @@ BEGIN
   END IF;
 EXCEPTION
   -- character with byte sequence 0xc2 0xb0 in encoding "UTF8" has no equivalent in encoding "LATIN8"
-  WHEN untranslatable_character THEN RAISE LOG 'skip: %', SQLERRM;
+  WHEN untranslatable_character
   -- default conversion function for encoding "UTF8" to "MULE_INTERNAL" does not exist
-  WHEN undefined_function THEN RAISE LOG 'skip: %', SQLERRM;
+  OR undefined_function
+  -- unsupported XML feature
+  OR feature_not_supported THEN
+    RAISE LOG 'skip: %', SQLERRM;
 END
 $$;
 -- Test xmlexists and xpath_exists
diff --git a/src/test/regress/expected/xml_1.out b/src/test/regress/expected/xml_1.out
index 1a9efa2ea02..970ab26fcef 100644
--- a/src/test/regress/expected/xml_1.out
+++ b/src/test/regress/expected/xml_1.out
@@ -583,11 +583,12 @@ DECLARE
   degree_symbol text;
   res xml[];
 BEGIN
-  -- Per the documentation, xpath() doesn't work on non-ASCII data when
-  -- the server encoding is not UTF8.  The EXCEPTION block below,
-  -- currently dead code, will be relevant if we remove this limitation.
+  -- 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 xml',
+    RAISE LOG 'skip: encoding % unsupported for xpath',
       current_setting('server_encoding');
     RETURN;
   END IF;
@@ -602,15 +603,14 @@ BEGIN
   END IF;
 EXCEPTION
   -- character with byte sequence 0xc2 0xb0 in encoding "UTF8" has no equivalent in encoding "LATIN8"
-  WHEN untranslatable_character THEN RAISE LOG 'skip: %', SQLERRM;
+  WHEN untranslatable_character
   -- default conversion function for encoding "UTF8" to "MULE_INTERNAL" does not exist
-  WHEN undefined_function THEN RAISE LOG 'skip: %', SQLERRM;
+  OR undefined_function
+  -- unsupported XML feature
+  OR feature_not_supported THEN
+    RAISE LOG 'skip: %', SQLERRM;
 END
 $$;
-ERROR:  unsupported XML feature
-DETAIL:  This functionality requires the server to be built with libxml support.
-HINT:  You need to rebuild PostgreSQL using --with-libxml.
-CONTEXT:  PL/pgSQL function inline_code_block line 17 at assignment
 -- 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
diff --git a/src/test/regress/expected/xml_2.out b/src/test/regress/expected/xml_2.out
index 3868da1a0d5..112ebe47cd0 100644
--- a/src/test/regress/expected/xml_2.out
+++ b/src/test/regress/expected/xml_2.out
@@ -657,11 +657,12 @@ DECLARE
   degree_symbol text;
   res xml[];
 BEGIN
-  -- Per the documentation, xpath() doesn't work on non-ASCII data when
-  -- the server encoding is not UTF8.  The EXCEPTION block below,
-  -- currently dead code, will be relevant if we remove this limitation.
+  -- 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 xml',
+    RAISE LOG 'skip: encoding % unsupported for xpath',
       current_setting('server_encoding');
     RETURN;
   END IF;
@@ -676,9 +677,12 @@ BEGIN
   END IF;
 EXCEPTION
   -- character with byte sequence 0xc2 0xb0 in encoding "UTF8" has no equivalent in encoding "LATIN8"
-  WHEN untranslatable_character THEN RAISE LOG 'skip: %', SQLERRM;
+  WHEN untranslatable_character
   -- default conversion function for encoding "UTF8" to "MULE_INTERNAL" does not exist
-  WHEN undefined_function THEN RAISE LOG 'skip: %', SQLERRM;
+  OR undefined_function
+  -- unsupported XML feature
+  OR feature_not_supported THEN
+    RAISE LOG 'skip: %', SQLERRM;
 END
 $$;
 -- Test xmlexists and xpath_exists
diff --git a/src/test/regress/sql/xml.sql b/src/test/regress/sql/xml.sql
index fdb51c9edec..cb96e180053 100644
--- a/src/test/regress/sql/xml.sql
+++ b/src/test/regress/sql/xml.sql
@@ -196,11 +196,12 @@ DECLARE
   degree_symbol text;
   res xml[];
 BEGIN
-  -- Per the documentation, xpath() doesn't work on non-ASCII data when
-  -- the server encoding is not UTF8.  The EXCEPTION block below,
-  -- currently dead code, will be relevant if we remove this limitation.
+  -- 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 xml',
+    RAISE LOG 'skip: encoding % unsupported for xpath',
       current_setting('server_encoding');
     RETURN;
   END IF;
@@ -215,9 +216,12 @@ BEGIN
   END IF;
 EXCEPTION
   -- character with byte sequence 0xc2 0xb0 in encoding "UTF8" has no equivalent in encoding "LATIN8"
-  WHEN untranslatable_character THEN RAISE LOG 'skip: %', SQLERRM;
+  WHEN untranslatable_character
   -- default conversion function for encoding "UTF8" to "MULE_INTERNAL" does not exist
-  WHEN undefined_function THEN RAISE LOG 'skip: %', SQLERRM;
+  OR undefined_function
+  -- unsupported XML feature
+  OR feature_not_supported THEN
+    RAISE LOG 'skip: %', SQLERRM;
 END
 $$;
 
-- 
GitLab