From 13e7453135189a32f9f12c4bebd0cd97a0a5d908 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Tue, 14 Jun 2016 15:49:32 -0400
Subject: [PATCH] Update xml2 extension for parallel query.

All functions provided by this extension are PARALLEL SAFE.

Andreas Karlsson
---
 contrib/xml2/Makefile                         |  2 +-
 contrib/xml2/xml2--1.0--1.1.sql               | 18 ++++++++++++
 contrib/xml2/{xml2--1.0.sql => xml2--1.1.sql} | 28 +++++++++----------
 contrib/xml2/xml2.control                     |  2 +-
 4 files changed, 34 insertions(+), 16 deletions(-)
 create mode 100644 contrib/xml2/xml2--1.0--1.1.sql
 rename contrib/xml2/{xml2--1.0.sql => xml2--1.1.sql} (70%)

diff --git a/contrib/xml2/Makefile b/contrib/xml2/Makefile
index 2f7a08cff1a..68fd9c42af4 100644
--- a/contrib/xml2/Makefile
+++ b/contrib/xml2/Makefile
@@ -4,7 +4,7 @@ MODULE_big = pgxml
 OBJS = xpath.o xslt_proc.o $(WIN32RES)
 
 EXTENSION = xml2
-DATA = xml2--1.0.sql xml2--unpackaged--1.0.sql
+DATA = xml2--1.1.sql xml2--1.0--1.1.sql xml2--unpackaged--1.0.sql
 PGFILEDESC = "xml2 - XPath querying and XSLT"
 
 REGRESS = xml2
diff --git a/contrib/xml2/xml2--1.0--1.1.sql b/contrib/xml2/xml2--1.0--1.1.sql
new file mode 100644
index 00000000000..350afb01383
--- /dev/null
+++ b/contrib/xml2/xml2--1.0--1.1.sql
@@ -0,0 +1,18 @@
+/* contrib/xml2/xml2--1.0--1.1.sql */
+
+-- complain if script is sourced in psql, rather than via ALTER EXTENSION
+\echo Use "ALTER EXTENSION xml2 UPDATE TO '1.1'" to load this file. \quit
+
+ALTER FUNCTION xml_valid(text) PARALLEL SAFE;
+ALTER FUNCTION xml_encode_special_chars(text) PARALLEL SAFE;
+ALTER FUNCTION xpath_string(text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_nodeset(text, text, text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_number(text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_bool(text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_list(text, text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_list(text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_nodeset(text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_nodeset(text, text, text) PARALLEL SAFE;
+ALTER FUNCTION xpath_table(text, text, text, text, text) PARALLEL SAFE;
+ALTER FUNCTION xslt_process(text, text, text) PARALLEL SAFE;
+ALTER FUNCTION xslt_process(text, text) PARALLEL SAFE;
diff --git a/contrib/xml2/xml2--1.0.sql b/contrib/xml2/xml2--1.1.sql
similarity index 70%
rename from contrib/xml2/xml2--1.0.sql
rename to contrib/xml2/xml2--1.1.sql
index 0b6afc63d05..671372cb271 100644
--- a/contrib/xml2/xml2--1.0.sql
+++ b/contrib/xml2/xml2--1.1.sql
@@ -1,4 +1,4 @@
-/* contrib/xml2/xml2--1.0.sql */
+/* contrib/xml2/xml2--1.1.sql */
 
 -- complain if script is sourced in psql, rather than via CREATE EXTENSION
 \echo Use "CREATE EXTENSION xml2" to load this file. \quit
@@ -8,66 +8,66 @@
 -- deprecated old name for xml_is_well_formed
 CREATE FUNCTION xml_valid(text) RETURNS bool
 AS 'xml_is_well_formed'
-LANGUAGE INTERNAL STRICT STABLE;
+LANGUAGE INTERNAL STRICT STABLE PARALLEL SAFE;
 
 CREATE FUNCTION xml_encode_special_chars(text) RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_string(text,text) RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_nodeset(text,text,text,text) RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_number(text,text) RETURNS float4
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_bool(text,text) RETURNS boolean
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 -- List function
 
 CREATE FUNCTION xpath_list(text,text,text) RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_list(text,text) RETURNS text
 AS 'SELECT xpath_list($1,$2,'','')'
-LANGUAGE SQL STRICT IMMUTABLE;
+LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE;
 
 -- Wrapper functions for nodeset where no tags needed
 
 CREATE FUNCTION xpath_nodeset(text,text)
 RETURNS text
 AS 'SELECT xpath_nodeset($1,$2,'''','''')'
-LANGUAGE SQL STRICT IMMUTABLE;
+LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE;
 
 CREATE FUNCTION xpath_nodeset(text,text,text)
 RETURNS text
 AS 'SELECT xpath_nodeset($1,$2,'''',$3)'
-LANGUAGE SQL STRICT IMMUTABLE;
+LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE;
 
 -- Table function
 
 CREATE FUNCTION xpath_table(text,text,text,text,text)
 RETURNS setof record
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT STABLE;
+LANGUAGE C STRICT STABLE PARALLEL SAFE;
 
 -- XSLT functions
 
 CREATE FUNCTION xslt_process(text,text,text)
 RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT VOLATILE;
+LANGUAGE C STRICT VOLATILE PARALLEL SAFE;
 
 -- the function checks for the correct argument count
 CREATE FUNCTION xslt_process(text,text)
 RETURNS text
 AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT IMMUTABLE;
+LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE;
diff --git a/contrib/xml2/xml2.control b/contrib/xml2/xml2.control
index 51de678d5fb..91e6547f015 100644
--- a/contrib/xml2/xml2.control
+++ b/contrib/xml2/xml2.control
@@ -1,6 +1,6 @@
 # xml2 extension
 comment = 'XPath querying and XSLT'
-default_version = '1.0'
+default_version = '1.1'
 module_pathname = '$libdir/pgxml'
 # non-relocatable because xml2--unpackaged--1.0.sql needs to use @extschema@
 relocatable = false
-- 
GitLab