1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-27 12:41:57 +03:00

Fix broken ruleutils support for function TRANSFORM clauses.

I chanced to notice that this dumped core due to a faulty Assert.
To add insult to injury, the output has been misformatted since v11.
Obviously we need some regression testing here.

Discussion: https://postgr.es/m/d1cc628c-3953-4209-957b-29427acc38c8@www.fastmail.com
This commit is contained in:
Tom Lane
2021-01-25 13:03:11 -05:00
parent d18e75664a
commit 07d46fceb4
8 changed files with 66 additions and 13 deletions

View File

@ -52,7 +52,7 @@ SELECT perl2undef() IS NULL AS p;
--- test transforming to perl
CREATE FUNCTION bool2perl(bool, bool, bool) RETURNS void
LANGUAGE plperl
TRANSFORM FOR TYPE bool
TRANSFORM FOR TYPE bool, for type boolean -- duplicate to test ruleutils
AS $$
my ($x, $y, $z) = @_;
@ -68,6 +68,21 @@ SELECT bool2perl (true, false, NULL);
(1 row)
--- test ruleutils
\sf bool2perl
CREATE OR REPLACE FUNCTION public.bool2perl(boolean, boolean, boolean)
RETURNS void
TRANSFORM FOR TYPE boolean, FOR TYPE boolean
LANGUAGE plperl
AS $function$
my ($x, $y, $z) = @_;
die("NULL mistransformed") if (defined($z));
die("TRUE mistransformed to UNDEF") if (!defined($x));
die("FALSE mistransformed to UNDEF") if (!defined($y));
die("TRUE mistransformed") if (!$x);
die("FALSE mistransformed") if ($y);
$function$
--- test selecting bool through SPI
CREATE FUNCTION spi_test() RETURNS void
LANGUAGE plperl

View File

@ -52,7 +52,7 @@ SELECT perl2undef() IS NULL AS p;
--- test transforming to perl
CREATE FUNCTION bool2perl(bool, bool, bool) RETURNS void
LANGUAGE plperlu
TRANSFORM FOR TYPE bool
TRANSFORM FOR TYPE bool, for type boolean -- duplicate to test ruleutils
AS $$
my ($x, $y, $z) = @_;
@ -68,6 +68,21 @@ SELECT bool2perl (true, false, NULL);
(1 row)
--- test ruleutils
\sf bool2perl
CREATE OR REPLACE FUNCTION public.bool2perl(boolean, boolean, boolean)
RETURNS void
TRANSFORM FOR TYPE boolean, FOR TYPE boolean
LANGUAGE plperlu
AS $function$
my ($x, $y, $z) = @_;
die("NULL mistransformed") if (defined($z));
die("TRUE mistransformed to UNDEF") if (!defined($x));
die("FALSE mistransformed to UNDEF") if (!defined($y));
die("TRUE mistransformed") if (!$x);
die("FALSE mistransformed") if ($y);
$function$
--- test selecting bool through SPI
CREATE FUNCTION spi_test() RETURNS void
LANGUAGE plperlu