1CREATE EXTENSION bool_plperl CASCADE; 2NOTICE: installing required extension "plperl" 3--- test transforming from perl 4CREATE FUNCTION perl2int(int) RETURNS bool 5LANGUAGE plperl 6TRANSFORM FOR TYPE bool 7AS $$ 8return shift; 9$$; 10CREATE FUNCTION perl2text(text) RETURNS bool 11LANGUAGE plperl 12TRANSFORM FOR TYPE bool 13AS $$ 14return shift; 15$$; 16CREATE FUNCTION perl2undef() RETURNS bool 17LANGUAGE plperl 18TRANSFORM FOR TYPE bool 19AS $$ 20return undef; 21$$; 22SELECT perl2int(1); 23 perl2int 24---------- 25 t 26(1 row) 27 28SELECT perl2int(0); 29 perl2int 30---------- 31 f 32(1 row) 33 34SELECT perl2text('foo'); 35 perl2text 36----------- 37 t 38(1 row) 39 40SELECT perl2text(''); 41 perl2text 42----------- 43 f 44(1 row) 45 46SELECT perl2undef() IS NULL AS p; 47 p 48--- 49 t 50(1 row) 51 52--- test transforming to perl 53CREATE FUNCTION bool2perl(bool, bool, bool) RETURNS void 54LANGUAGE plperl 55TRANSFORM FOR TYPE bool, for type boolean -- duplicate to test ruleutils 56AS $$ 57my ($x, $y, $z) = @_; 58 59die("NULL mistransformed") if (defined($z)); 60die("TRUE mistransformed to UNDEF") if (!defined($x)); 61die("FALSE mistransformed to UNDEF") if (!defined($y)); 62die("TRUE mistransformed") if (!$x); 63die("FALSE mistransformed") if ($y); 64$$; 65SELECT bool2perl (true, false, NULL); 66 bool2perl 67----------- 68 69(1 row) 70 71--- test ruleutils 72\sf bool2perl 73CREATE OR REPLACE FUNCTION public.bool2perl(boolean, boolean, boolean) 74 RETURNS void 75 TRANSFORM FOR TYPE boolean, FOR TYPE boolean 76 LANGUAGE plperl 77AS $function$ 78my ($x, $y, $z) = @_; 79 80die("NULL mistransformed") if (defined($z)); 81die("TRUE mistransformed to UNDEF") if (!defined($x)); 82die("FALSE mistransformed to UNDEF") if (!defined($y)); 83die("TRUE mistransformed") if (!$x); 84die("FALSE mistransformed") if ($y); 85$function$ 86--- test selecting bool through SPI 87CREATE FUNCTION spi_test() RETURNS void 88LANGUAGE plperl 89TRANSFORM FOR TYPE bool 90AS $$ 91my $rv = spi_exec_query('SELECT true t, false f, NULL n')->{rows}->[0]; 92 93die("TRUE mistransformed to UNDEF in SPI") if (!defined ($rv->{t})); 94die("FALSE mistransformed to UNDEF in SPI") if (!defined ($rv->{f})); 95die("NULL mistransformed in SPI") if (defined ($rv->{n})); 96die("TRUE mistransformed in SPI") if (!$rv->{t}); 97die("FALSE mistransformed in SPI") if ($rv->{f}); 98$$; 99SELECT spi_test(); 100 spi_test 101---------- 102 103(1 row) 104 105DROP EXTENSION plperl CASCADE; 106NOTICE: drop cascades to 6 other objects 107DETAIL: drop cascades to function spi_test() 108drop cascades to extension bool_plperl 109drop cascades to function perl2int(integer) 110drop cascades to function perl2text(text) 111drop cascades to function perl2undef() 112drop cascades to function bool2perl(boolean,boolean,boolean) 113