mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +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:
@ -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
|
||||
|
@ -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
|
||||
|
@ -33,7 +33,7 @@ SELECT perl2undef() IS NULL AS p;
|
||||
|
||||
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) = @_;
|
||||
|
||||
@ -46,6 +46,10 @@ $$;
|
||||
|
||||
SELECT bool2perl (true, false, NULL);
|
||||
|
||||
--- test ruleutils
|
||||
|
||||
\sf bool2perl
|
||||
|
||||
--- test selecting bool through SPI
|
||||
|
||||
CREATE FUNCTION spi_test() RETURNS void
|
||||
|
@ -33,7 +33,7 @@ SELECT perl2undef() IS NULL AS p;
|
||||
|
||||
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) = @_;
|
||||
|
||||
@ -46,6 +46,10 @@ $$;
|
||||
|
||||
SELECT bool2perl (true, false, NULL);
|
||||
|
||||
--- test ruleutils
|
||||
|
||||
\sf bool2perl
|
||||
|
||||
--- test selecting bool through SPI
|
||||
|
||||
CREATE FUNCTION spi_test() RETURNS void
|
||||
|
@ -47,19 +47,29 @@ SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
|
||||
(1 row)
|
||||
|
||||
-- test python -> hstore
|
||||
CREATE FUNCTION test2() RETURNS hstore
|
||||
CREATE FUNCTION test2(a int, b text) RETURNS hstore
|
||||
LANGUAGE plpythonu
|
||||
TRANSFORM FOR TYPE hstore
|
||||
AS $$
|
||||
val = {'a': 1, 'b': 'boo', 'c': None}
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$$;
|
||||
SELECT test2();
|
||||
SELECT test2(1, 'boo');
|
||||
test2
|
||||
---------------------------------
|
||||
"a"=>"1", "b"=>"boo", "c"=>NULL
|
||||
(1 row)
|
||||
|
||||
--- test ruleutils
|
||||
\sf test2
|
||||
CREATE OR REPLACE FUNCTION public.test2(a integer, b text)
|
||||
RETURNS hstore
|
||||
TRANSFORM FOR TYPE hstore
|
||||
LANGUAGE plpythonu
|
||||
AS $function$
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$function$
|
||||
-- test python -> hstore[]
|
||||
CREATE FUNCTION test2arr() RETURNS hstore[]
|
||||
LANGUAGE plpythonu
|
||||
|
@ -40,15 +40,18 @@ SELECT test1arr(array['aa=>bb, cc=>NULL'::hstore, 'dd=>ee']);
|
||||
|
||||
|
||||
-- test python -> hstore
|
||||
CREATE FUNCTION test2() RETURNS hstore
|
||||
CREATE FUNCTION test2(a int, b text) RETURNS hstore
|
||||
LANGUAGE plpythonu
|
||||
TRANSFORM FOR TYPE hstore
|
||||
AS $$
|
||||
val = {'a': 1, 'b': 'boo', 'c': None}
|
||||
val = {'a': a, 'b': b, 'c': None}
|
||||
return val
|
||||
$$;
|
||||
|
||||
SELECT test2();
|
||||
SELECT test2(1, 'boo');
|
||||
|
||||
--- test ruleutils
|
||||
\sf test2
|
||||
|
||||
|
||||
-- test python -> hstore[]
|
||||
|
Reference in New Issue
Block a user