CREATE EXTENSION bool_plperlu CASCADE; NOTICE: installing required extension "plperlu" --- test transforming from perl CREATE FUNCTION perl2int(int) RETURNS bool LANGUAGE plperlu TRANSFORM FOR TYPE bool AS $$ return shift; $$; CREATE FUNCTION perl2text(text) RETURNS bool LANGUAGE plperlu TRANSFORM FOR TYPE bool AS $$ return shift; $$; CREATE FUNCTION perl2undef() RETURNS bool LANGUAGE plperlu TRANSFORM FOR TYPE bool AS $$ return undef; $$; SELECT perl2int(1); perl2int ---------- t (1 row) SELECT perl2int(0); perl2int ---------- f (1 row) SELECT perl2text('foo'); perl2text ----------- t (1 row) SELECT perl2text(''); perl2text ----------- f (1 row) SELECT perl2undef() IS NULL AS p; p --- t (1 row) --- test transforming to perl CREATE FUNCTION bool2perl(bool, bool, bool) RETURNS void LANGUAGE plperlu TRANSFORM FOR TYPE bool, for type boolean -- duplicate to test ruleutils AS $$ 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); $$; SELECT bool2perl (true, false, NULL); bool2perl ----------- (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 TRANSFORM FOR TYPE bool AS $$ my $rv = spi_exec_query('SELECT true t, false f, NULL n')->{rows}->[0]; die("TRUE mistransformed to UNDEF in SPI") if (!defined ($rv->{t})); die("FALSE mistransformed to UNDEF in SPI") if (!defined ($rv->{f})); die("NULL mistransformed in SPI") if (defined ($rv->{n})); die("TRUE mistransformed in SPI") if (!$rv->{t}); die("FALSE mistransformed in SPI") if ($rv->{f}); $$; SELECT spi_test(); spi_test ---------- (1 row) DROP EXTENSION plperlu CASCADE; NOTICE: drop cascades to 6 other objects DETAIL: drop cascades to function spi_test() drop cascades to extension bool_plperlu drop cascades to function perl2int(integer) drop cascades to function perl2text(text) drop cascades to function perl2undef() drop cascades to function bool2perl(boolean,boolean,boolean)