Le mardi 12 novembre 2024, 09:30:30 heure normale d’Europe centrale Michael Paquier a écrit : > On Thu, Nov 07, 2024 at 10:06:37AM +0900, Michael Paquier wrote: > > Good point. Checking all these contrib updates one-by-one is an ant's > > work, but I'll see if I can get at least some of them done on HEAD. > > I've begun looking at that a bit, and there are a couple of things > that we could do better with xml2 in 0005 at least in the context of > this patch: xpath_nodeset() and xpath_list() don't have any test > coverage. That's not an issue directly related to this patch, but > perhaps we should add something for the functions that we are > manipulating after this upgrade path at least? That's one way to > automatically make sure that these changes work the same way as the > original. > > The same argument comes up with lo_oid() in 0006.
Ok, please find attached a new complete patch series including tests for the uncovered functions. Tests pass both before and after the move to SQL-body functions. > > 0004 for pg_freespace is fine regarding that for example as we have > calls of pg_freespace(regclass) in its sql/. I've applied it to begin > with something. Thank you for this one, removed from the new series. > > Tomas Vondra has posted a patch for a bug fix with pageinspect, so > this would create some conflicts noise for him if 0003 was applied > today, so let's wait a bit: > https://www.postgresql.org/message-id/3385a58f-5484-49d0-b790-9a198a0bf236@v > ondra.me Agreed, let's wait on this one. I did not include it in the series. > > 0001 and 0002 are much larger than the 4 others, and I'm lacking the > > steam to check them in more details today. Thanks ! -- Ronan Dunklau
>From 48f04a556536426fc7022ac33477f1629a31ca51 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Wed, 13 Nov 2024 08:28:37 +0100 Subject: [PATCH v4 1/6] Add tests for xpath_nodeset and xpath_list functions. --- contrib/xml2/expected/xml2.out | 30 ++++++++++++++++++++++++++++++ contrib/xml2/sql/xml2.sql | 8 ++++++++ 2 files changed, 38 insertions(+) diff --git a/contrib/xml2/expected/xml2.out b/contrib/xml2/expected/xml2.out index eba6ae60364..5b292090982 100644 --- a/contrib/xml2/expected/xml2.out +++ b/contrib/xml2/expected/xml2.out @@ -222,3 +222,33 @@ $$<xsl:stylesheet version="1.0" </xsl:template> </xsl:stylesheet>$$); ERROR: failed to apply stylesheet +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', 'result', 'item') from articles; + xpath_nodeset +----------------------------------------------------------------------------------- + <result><item><author>test</author></item><item><pages>37</pages></item></result> +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', 'item_without_toptag') from articles; + xpath_nodeset +------------------------------------------------------------------------------------------------------------------------------ + <item_without_toptag><author>test</author></item_without_toptag><item_without_toptag><pages>37</pages></item_without_toptag> +(1 row) + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages') from articles; + xpath_nodeset +---------------------------------------- + <author>test</author><pages>37</pages> +(1 row) + +SELECT xpath_list(article_xml::text, '/article/author|/article/pages') from articles; + xpath_list +------------ + test,37 +(1 row) + +SELECT xpath_list(article_xml::text, '/article/author|/article/pages', '|') from articles; + xpath_list +------------ + test|37 +(1 row) + diff --git a/contrib/xml2/sql/xml2.sql b/contrib/xml2/sql/xml2.sql index ac49cfa7c52..5eae992b55b 100644 --- a/contrib/xml2/sql/xml2.sql +++ b/contrib/xml2/sql/xml2.sql @@ -137,3 +137,11 @@ $$<xsl:stylesheet version="1.0" </sax:output> </xsl:template> </xsl:stylesheet>$$); + +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', 'result', 'item') from articles; +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages', 'item_without_toptag') from articles; +SELECT xpath_nodeset(article_xml::text, '/article/author|/article/pages') from articles; + +SELECT xpath_list(article_xml::text, '/article/author|/article/pages') from articles; +SELECT xpath_list(article_xml::text, '/article/author|/article/pages', '|') from articles; + -- 2.47.0
>From 5f027b8c4021c13c8e97d1dc56fa6548824c90c9 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Wed, 13 Nov 2024 08:45:13 +0100 Subject: [PATCH v4 2/6] Add test for lo_oid function --- contrib/lo/expected/lo.out | 6 ++++++ contrib/lo/sql/lo.sql | 2 ++ 2 files changed, 8 insertions(+) diff --git a/contrib/lo/expected/lo.out b/contrib/lo/expected/lo.out index c63e4b1c704..65798205a5a 100644 --- a/contrib/lo/expected/lo.out +++ b/contrib/lo/expected/lo.out @@ -47,4 +47,10 @@ SELECT lo_get(43214); DELETE FROM image; SELECT lo_get(43214); ERROR: large object 43214 does not exist +SELECT lo_oid(1::lo); + lo_oid +-------- + 1 +(1 row) + DROP TABLE image; diff --git a/contrib/lo/sql/lo.sql b/contrib/lo/sql/lo.sql index 77039509245..ca36cdb3098 100644 --- a/contrib/lo/sql/lo.sql +++ b/contrib/lo/sql/lo.sql @@ -27,4 +27,6 @@ DELETE FROM image; SELECT lo_get(43214); +SELECT lo_oid(1::lo); + DROP TABLE image; -- 2.47.0
>From 9c5235cd123eeb55b95b8bfd281dfcc37df197c5 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Mon, 28 Oct 2024 16:13:35 +0100 Subject: [PATCH v4 3/6] Use "new style" SQL function in citext extension Author: Tom Lane Discussion: https://www.postgresql.org/message-id/3395418.1618352794%40sss.pgh.pa.us --- contrib/citext/Makefile | 1 + contrib/citext/citext--1.7--1.8.sql | 60 +++++++++++++++++++++++++++++ contrib/citext/citext.control | 2 +- contrib/citext/meson.build | 1 + 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 contrib/citext/citext--1.7--1.8.sql diff --git a/contrib/citext/Makefile b/contrib/citext/Makefile index b9b3713f537..fc990607bf2 100644 --- a/contrib/citext/Makefile +++ b/contrib/citext/Makefile @@ -4,6 +4,7 @@ MODULES = citext EXTENSION = citext DATA = citext--1.4.sql \ + citext--1.7--1.8.sql \ citext--1.6--1.7.sql \ citext--1.5--1.6.sql \ citext--1.4--1.5.sql \ diff --git a/contrib/citext/citext--1.7--1.8.sql b/contrib/citext/citext--1.7--1.8.sql new file mode 100644 index 00000000000..7c95a9883aa --- /dev/null +++ b/contrib/citext/citext--1.7--1.8.sql @@ -0,0 +1,60 @@ +/* contrib/citext/citext--1.7--1.8.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION citext UPDATE TO '1.8'" to load this file. \quit + +CREATE OR REPLACE FUNCTION regexp_match(string citext, pattern citext) RETURNS TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, 'i' ); + +CREATE OR REPLACE FUNCTION regexp_match(string citext, pattern citext, flags text) RETURNS TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_match( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END ); + +CREATE OR REPLACE FUNCTION regexp_matches(string citext, pattern citext) RETURNS SETOF TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 1 +RETURN pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' ); + +CREATE OR REPLACE FUNCTION regexp_matches(string citext, pattern citext, flags text) RETURNS SETOF TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE ROWS 10 +RETURN pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END ); + +CREATE OR REPLACE FUNCTION regexp_replace(string citext, pattern citext, replacement text) returns TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, 'i'); + +CREATE OR REPLACE FUNCTION regexp_replace(string citext, pattern citext, replacement text, flags text) returns TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, CASE WHEN pg_catalog.strpos($4, 'c') = 0 THEN $4 || 'i' ELSE $4 END); + +CREATE OR REPLACE FUNCTION regexp_split_to_array(string citext, pattern citext) RETURNS TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, 'i' ); + +CREATE OR REPLACE FUNCTION regexp_split_to_array(string citext, pattern citext, flags text) RETURNS TEXT[] +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END ); + +CREATE OR REPLACE FUNCTION regexp_split_to_table(string citext, pattern citext) RETURNS SETOF TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, 'i' ); + +CREATE OR REPLACE FUNCTION regexp_split_to_table(string citext, pattern citext, flags text) RETURNS SETOF TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END ); + +CREATE OR REPLACE FUNCTION strpos( citext, citext ) RETURNS INT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.strpos( pg_catalog.lower( $1::pg_catalog.text ), pg_catalog.lower( $2::pg_catalog.text ) ); + +CREATE OR REPLACE FUNCTION replace( citext, citext, citext ) RETURNS TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.regexp_replace( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), $3::pg_catalog.text, 'gi' ); + +CREATE OR REPLACE FUNCTION split_part( citext, citext, int ) RETURNS TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN (pg_catalog.regexp_split_to_array( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), 'i'))[$3]; + +CREATE OR REPLACE FUNCTION translate( citext, citext, text ) RETURNS TEXT +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE +RETURN pg_catalog.translate( pg_catalog.translate( $1::pg_catalog.text, pg_catalog.lower($2::pg_catalog.text), $3), pg_catalog.upper($2::pg_catalog.text), $3); diff --git a/contrib/citext/citext.control b/contrib/citext/citext.control index f82265b3347..2b0f3fa8407 100644 --- a/contrib/citext/citext.control +++ b/contrib/citext/citext.control @@ -1,6 +1,6 @@ # citext extension comment = 'data type for case-insensitive character strings' -default_version = '1.7' +default_version = '1.8' module_pathname = '$libdir/citext' relocatable = true trusted = true diff --git a/contrib/citext/meson.build b/contrib/citext/meson.build index 40cdd0d2f18..ae87445e6a4 100644 --- a/contrib/citext/meson.build +++ b/contrib/citext/meson.build @@ -26,6 +26,7 @@ install_data( 'citext--1.4--1.5.sql', 'citext--1.5--1.6.sql', 'citext--1.6--1.7.sql', + 'citext--1.7--1.8.sql', kwargs: contrib_data_args, ) -- 2.47.0
>From a371f0be44a875d688a536fbae9ae2593d58154f Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Mon, 28 Oct 2024 15:34:45 +0100 Subject: [PATCH v4 4/6] Use "new style" SQL function in earthdistance extension. Since the sql_body is parsed at function definition time, and not when executing it, the namespace is resolved at that point. This solves a couple of bugs related to pg_restore failing to locate functions belonging to an extension once they are inline. The missing piece from the previous attempt was a syntax to reference another extension's schema, which has been introduced in PG16. It is then safe to fully-qualify every object reference either implicitly because it has just been created, or by the extension schema it belongs to. Author: Tom Lane Discussion: https://www.postgresql.org/message-id/3395418.1618352794%40sss.pgh.pa.us --- contrib/earthdistance/Makefile | 3 +- .../earthdistance/earthdistance--1.1--1.2.sql | 57 +++++++++++ contrib/earthdistance/earthdistance--1.2.sql | 98 +++++++++++++++++++ contrib/earthdistance/earthdistance.control | 2 +- contrib/earthdistance/meson.build | 1 + 5 files changed, 159 insertions(+), 2 deletions(-) create mode 100644 contrib/earthdistance/earthdistance--1.1--1.2.sql create mode 100644 contrib/earthdistance/earthdistance--1.2.sql diff --git a/contrib/earthdistance/Makefile b/contrib/earthdistance/Makefile index f93b7a925a2..0cf3fa379a2 100644 --- a/contrib/earthdistance/Makefile +++ b/contrib/earthdistance/Makefile @@ -3,7 +3,8 @@ MODULES = earthdistance EXTENSION = earthdistance -DATA = earthdistance--1.1.sql earthdistance--1.0--1.1.sql +DATA = earthdistance--1.1.sql earthdistance--1.0--1.1.sql \ + earthdistance--1.1--1.2.sql PGFILEDESC = "earthdistance - calculate distances on the surface of the Earth" REGRESS = earthdistance diff --git a/contrib/earthdistance/earthdistance--1.1--1.2.sql b/contrib/earthdistance/earthdistance--1.1--1.2.sql new file mode 100644 index 00000000000..16be60720ae --- /dev/null +++ b/contrib/earthdistance/earthdistance--1.1--1.2.sql @@ -0,0 +1,57 @@ +/* contrib/earthdistance/earthdistance--1.1--1.2.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION earthdistance UPDATE TO '1.2'" to load this file. \quit + +CREATE OR REPLACE FUNCTION earth() RETURNS float8 +LANGUAGE SQL IMMUTABLE PARALLEL SAFE +RETURN '6378168'::float8; + +CREATE OR REPLACE FUNCTION sec_to_gc(float8) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/(2*earth()) > 1 THEN pg_catalog.pi()*earth() ELSE 2*earth()*pg_catalog.asin($1/(2*earth())) END; + +CREATE OR REPLACE FUNCTION gc_to_sec(float8) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/earth() > pg_catalog.pi() THEN 2*earth() ELSE 2*earth()*pg_catalog.sin($1/(2*earth())) END; + +CREATE OR REPLACE FUNCTION ll_to_earth(float8, float8) +RETURNS earth +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN @extschema:cube@.cube(@extschema:cube@.cube(@extschema:cube@.cube(earth()*pg_catalog.cos(radians($1))*pg_catalog.cos(radians($2))),earth()*pg_catalog.cos(radians($1))*pg_catalog.sin(radians($2))),earth()*pg_catalog.sin(radians($1)))::earth; + +CREATE OR REPLACE FUNCTION latitude(earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN @extschema:cube@.cube_ll_coord($1, 3)/earth() < -1 THEN -90::float8 WHEN @extschema:cube@.cube_ll_coord($1, 3)/earth() > 1 THEN 90::float8 ELSE pg_catalog.degrees(pg_catalog.asin(@extschema:cube@.cube_ll_coord($1, 3)/earth())) END; + +CREATE OR REPLACE FUNCTION longitude(earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN pg_catalog.degrees(pg_catalog.atan2(@extschema:cube@.cube_ll_coord($1, 2), @extschema:cube@.cube_ll_coord($1, 1))); + +CREATE OR REPLACE FUNCTION earth_distance(earth, earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN sec_to_gc(@extschema:cube@.cube_distance($1, $2)); + +CREATE OR REPLACE FUNCTION earth_box(earth, float8) +RETURNS @extschema:cube@.cube +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN @extschema:cube@.cube_enlarge($1, gc_to_sec($2), 3); diff --git a/contrib/earthdistance/earthdistance--1.2.sql b/contrib/earthdistance/earthdistance--1.2.sql new file mode 100644 index 00000000000..fac15969ad4 --- /dev/null +++ b/contrib/earthdistance/earthdistance--1.2.sql @@ -0,0 +1,98 @@ +/* contrib/earthdistance/earthdistance--1.1.sql */ + +-- complain if script is sourced in psql, rather than via CREATE EXTENSION +\echo Use "CREATE EXTENSION earthdistance" to load this file. \quit + +-- earth() returns the radius of the earth in meters. This is the only +-- place you need to change things for the cube base distance functions +-- in order to use different units (or a better value for the Earth's radius). + +CREATE FUNCTION earth() RETURNS float8 +LANGUAGE SQL IMMUTABLE PARALLEL SAFE +RETURN '6378168'::float8; + +-- Astronomers may want to change the earth function so that distances will be +-- returned in degrees. To do this comment out the above definition and +-- uncomment the one below. Note that doing this will break the regression +-- tests. +-- +-- CREATE FUNCTION earth() RETURNS float8 +-- LANGUAGE SQL IMMUTABLE +-- AS 'SELECT 180/pi()'; + +-- Define domain for locations on the surface of the earth using a cube +-- datatype with constraints. cube provides 3D indexing. +-- The cube is restricted to be a point, no more than 3 dimensions +-- (for less than 3 dimensions 0 is assumed for the missing coordinates) +-- and that the point must be very near the surface of the sphere +-- centered about the origin with the radius of the earth. + +CREATE DOMAIN earth AS $extschema:cube@.cube + CONSTRAINT not_point check($extschema:cube@.cube_is_point(value)) + CONSTRAINT not_3d check($extschema:cube@.cube_dim(value) <= 3) + CONSTRAINT on_surface check(abs($extschema:cube@.cube_distance(value, '(0)'::$extschema:cube@.cube) / + earth() - '1'::float8) < '10e-7'::float8); + +CREATE FUNCTION sec_to_gc(float8) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/(2*earth()) > 1 THEN pg_catalog.pi()*earth() ELSE 2*earth()*pg_catalog.asin($1/(2*earth())) END; + +CREATE FUNCTION gc_to_sec(float8) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/earth() > pg_catalog.pi() THEN 2*earth() ELSE 2*earth()*pg_catalog.sin($1/(2*earth())) END; + +CREATE FUNCTION ll_to_earth(float8, float8) +RETURNS earth +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN @extschema:cube@.cube(@extschema:cube@.cube(@extschema:cube@.cube(earth()*pg_catalog.cos(radians($1))*pg_catalog.cos(radians($2))),earth()*pg_catalog.cos(radians($1))*pg_catalog.sin(radians($2))),earth()*pg_catalog.sin(radians($1)))::earth; + +CREATE FUNCTION latitude(earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN CASE WHEN @extschema:cube@.cube_ll_coord($1, 3)/earth() < -1 THEN -90::float8 WHEN @extschema:cube@.cube_ll_coord($1, 3)/earth() > 1 THEN 90::float8 ELSE pg_catalog.degrees(pg_catalog.asin(@extschema:cube@.cube_ll_coord($1, 3)/earth())) END; + +CREATE FUNCTION longitude(earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN pg_catalog.degrees(pg_catalog.atan2(@extschema:cube@.cube_ll_coord($1, 2), @extschema:cube@.cube_ll_coord($1, 1))); + +CREATE FUNCTION earth_distance(earth, earth) +RETURNS float8 +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN sec_to_gc(@extschema:cube@.cube_distance($1, $2)); + +CREATE FUNCTION earth_box(earth, float8) +RETURNS cube +LANGUAGE SQL +IMMUTABLE STRICT +PARALLEL SAFE +RETURN @extschema:cube@.cube_enlarge($1, gc_to_sec($2), 3); + +--------------- geo_distance + +CREATE FUNCTION geo_distance (point, point) +RETURNS float8 +LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE AS 'MODULE_PATHNAME'; + +--------------- geo_distance as operator <@> + +CREATE OPERATOR <@> ( + LEFTARG = point, + RIGHTARG = point, + PROCEDURE = geo_distance, + COMMUTATOR = <@> +); diff --git a/contrib/earthdistance/earthdistance.control b/contrib/earthdistance/earthdistance.control index 5816d22cdd9..de2465d487e 100644 --- a/contrib/earthdistance/earthdistance.control +++ b/contrib/earthdistance/earthdistance.control @@ -1,6 +1,6 @@ # earthdistance extension comment = 'calculate great-circle distances on the surface of the Earth' -default_version = '1.1' +default_version = '1.2' module_pathname = '$libdir/earthdistance' relocatable = true requires = 'cube' diff --git a/contrib/earthdistance/meson.build b/contrib/earthdistance/meson.build index 4e3c538f7aa..be63bf577c3 100644 --- a/contrib/earthdistance/meson.build +++ b/contrib/earthdistance/meson.build @@ -20,6 +20,7 @@ install_data( 'earthdistance.control', 'earthdistance--1.0--1.1.sql', 'earthdistance--1.1.sql', + 'earthdistance--1.1--1.2.sql', kwargs: contrib_data_args, ) -- 2.47.0
>From ca3f87189eaf060a91486b5d2167930ecdf7b541 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Mon, 28 Oct 2024 16:25:52 +0100 Subject: [PATCH v4 5/6] Use "new style" SQL function in xml2 extension Author: Tom Lane Discussion: https://www.postgresql.org/message-id/3395418.1618352794%40sss.pgh.pa.us --- contrib/xml2/Makefile | 4 +++- contrib/xml2/meson.build | 1 + contrib/xml2/xml2--1.1--1.2.sql | 18 ++++++++++++++++++ contrib/xml2/xml2.control | 2 +- 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 contrib/xml2/xml2--1.1--1.2.sql diff --git a/contrib/xml2/Makefile b/contrib/xml2/Makefile index 0d703fe0e8f..8597e9aa9c5 100644 --- a/contrib/xml2/Makefile +++ b/contrib/xml2/Makefile @@ -7,7 +7,9 @@ OBJS = \ xslt_proc.o EXTENSION = xml2 -DATA = xml2--1.1.sql xml2--1.0--1.1.sql +DATA = xml2--1.1.sql \ + xml2--1.1--1.2.sql \ + xml2--1.0--1.1.sql PGFILEDESC = "xml2 - XPath querying and XSLT" REGRESS = xml2 diff --git a/contrib/xml2/meson.build b/contrib/xml2/meson.build index 5e80e17f824..32d9ab53cbd 100644 --- a/contrib/xml2/meson.build +++ b/contrib/xml2/meson.build @@ -27,6 +27,7 @@ contrib_targets += xml2 install_data( 'xml2--1.0--1.1.sql', 'xml2--1.1.sql', + 'xml2--1.1--1.2.sql', 'xml2.control', kwargs: contrib_data_args, ) diff --git a/contrib/xml2/xml2--1.1--1.2.sql b/contrib/xml2/xml2--1.1--1.2.sql new file mode 100644 index 00000000000..12d00064e8f --- /dev/null +++ b/contrib/xml2/xml2--1.1--1.2.sql @@ -0,0 +1,18 @@ +/* contrib/xml2/xml2--1.1--1.2.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION xml2 UPDATE TO '1.2'" to load this file. \quit + +CREATE OR REPLACE FUNCTION xpath_list(text,text) RETURNS text +LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE +RETURN xpath_list($1,$2,','); + +CREATE OR REPLACE FUNCTION xpath_nodeset(text,text) +RETURNS text +LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE +RETURN xpath_nodeset($1,$2,'',''); + +CREATE OR REPLACE FUNCTION xpath_nodeset(text,text,text) +RETURNS text +LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE +RETURN xpath_nodeset($1,$2,'',$3); diff --git a/contrib/xml2/xml2.control b/contrib/xml2/xml2.control index ba2c0599a37..b32156c949e 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.1' +default_version = '1.2' module_pathname = '$libdir/pgxml' # XXX do we still need this to be non-relocatable? relocatable = false -- 2.47.0
>From 9230ccad6329745bbd3d789b75b350fb0e3387c0 Mon Sep 17 00:00:00 2001 From: Ronan Dunklau <ronan.dunk...@aiven.io> Date: Tue, 29 Oct 2024 07:53:02 +0100 Subject: [PATCH v4 6/6] Use "new style" SQL function in lo extension --- contrib/lo/Makefile | 2 +- contrib/lo/lo--1.1--1.2.sql | 8 ++++++++ contrib/lo/lo.control | 2 +- contrib/lo/meson.build | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 contrib/lo/lo--1.1--1.2.sql diff --git a/contrib/lo/Makefile b/contrib/lo/Makefile index 716893859eb..8cfff63d882 100644 --- a/contrib/lo/Makefile +++ b/contrib/lo/Makefile @@ -3,7 +3,7 @@ MODULES = lo EXTENSION = lo -DATA = lo--1.1.sql lo--1.0--1.1.sql +DATA = lo--1.1.sql lo--1.0--1.1.sql lo--1.1--1.2.sql PGFILEDESC = "lo - management for large objects" REGRESS = lo diff --git a/contrib/lo/lo--1.1--1.2.sql b/contrib/lo/lo--1.1--1.2.sql new file mode 100644 index 00000000000..a480923a3a6 --- /dev/null +++ b/contrib/lo/lo--1.1--1.2.sql @@ -0,0 +1,8 @@ +/* contrib/lo/lo--1.1--1.2.sql */ + +-- complain if script is sourced in psql, rather than via ALTER EXTENSION +\echo Use "ALTER EXTENSION lo UPDATE TO '1.2'" to load this file. \quit + +CREATE OR REPLACE FUNCTION lo_oid(lo) RETURNS pg_catalog.oid +LANGUAGE SQL STRICT IMMUTABLE PARALLEL SAFE +RETURN (SELECT $1::pg_catalog.oid); diff --git a/contrib/lo/lo.control b/contrib/lo/lo.control index f73f8b5fae5..3acb3665a4e 100644 --- a/contrib/lo/lo.control +++ b/contrib/lo/lo.control @@ -1,6 +1,6 @@ # lo extension comment = 'Large Object maintenance' -default_version = '1.1' +default_version = '1.2' module_pathname = '$libdir/lo' relocatable = true trusted = true diff --git a/contrib/lo/meson.build b/contrib/lo/meson.build index 4cc72b64578..1443a260b27 100644 --- a/contrib/lo/meson.build +++ b/contrib/lo/meson.build @@ -20,6 +20,7 @@ install_data( 'lo.control', 'lo--1.0--1.1.sql', 'lo--1.1.sql', + 'lo--1.1--1.2.sql', kwargs: contrib_data_args, ) -- 2.47.0