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