Skip to content

Commit fdfe0b1

Browse files
committed
PL/Perl: Add alternative expected file for Perl 5.22
1 parent 33018d0 commit fdfe0b1

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
-- test warnings and errors from plperl
2+
create or replace function perl_elog(text) returns void language plperl as $$
3+
4+
my $msg = shift;
5+
elog(NOTICE,$msg);
6+
7+
$$;
8+
select perl_elog('explicit elog');
9+
NOTICE: explicit elog
10+
CONTEXT: PL/Perl function "perl_elog"
11+
perl_elog
12+
-----------
13+
14+
(1 row)
15+
16+
create or replace function perl_warn(text) returns void language plperl as $$
17+
18+
my $msg = shift;
19+
warn($msg);
20+
21+
$$;
22+
select perl_warn('implicit elog via warn');
23+
WARNING: implicit elog via warn at line 4.
24+
CONTEXT: PL/Perl function "perl_warn"
25+
perl_warn
26+
-----------
27+
28+
(1 row)
29+
30+
-- test strict mode on/off
31+
SET plperl.use_strict = true;
32+
create or replace function uses_global() returns text language plperl as $$
33+
34+
$global = 1;
35+
$other_global = 2;
36+
return 'uses_global worked';
37+
38+
$$;
39+
ERROR: Global symbol "$global" requires explicit package name (did you forget to declare "my $global"?) at line 3.
40+
Global symbol "$other_global" requires explicit package name (did you forget to declare "my $other_global"?) at line 4.
41+
CONTEXT: compilation of PL/Perl function "uses_global"
42+
select uses_global();
43+
ERROR: function uses_global() does not exist
44+
LINE 1: select uses_global();
45+
^
46+
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
47+
SET plperl.use_strict = false;
48+
create or replace function uses_global() returns text language plperl as $$
49+
50+
$global = 1;
51+
$other_global=2;
52+
return 'uses_global worked';
53+
54+
$$;
55+
select uses_global();
56+
uses_global
57+
--------------------
58+
uses_global worked
59+
(1 row)
60+
61+
-- test recovery after "die"
62+
create or replace function just_die() returns void language plperl AS $$
63+
die "just die";
64+
$$;
65+
select just_die();
66+
ERROR: just die at line 2.
67+
CONTEXT: PL/Perl function "just_die"
68+
create or replace function die_caller() returns int language plpgsql as $$
69+
BEGIN
70+
BEGIN
71+
PERFORM just_die();
72+
EXCEPTION WHEN OTHERS THEN
73+
RAISE NOTICE 'caught die';
74+
END;
75+
RETURN 1;
76+
END;
77+
$$;
78+
select die_caller();
79+
NOTICE: caught die
80+
die_caller
81+
------------
82+
1
83+
(1 row)
84+
85+
create or replace function indirect_die_caller() returns int language plperl as $$
86+
my $prepared = spi_prepare('SELECT die_caller() AS fx');
87+
my $a = spi_exec_prepared($prepared)->{rows}->[0]->{fx};
88+
my $b = spi_exec_prepared($prepared)->{rows}->[0]->{fx};
89+
return $a + $b;
90+
$$;
91+
select indirect_die_caller();
92+
NOTICE: caught die
93+
CONTEXT: SQL statement "SELECT die_caller() AS fx"
94+
PL/Perl function "indirect_die_caller"
95+
NOTICE: caught die
96+
CONTEXT: SQL statement "SELECT die_caller() AS fx"
97+
PL/Perl function "indirect_die_caller"
98+
indirect_die_caller
99+
---------------------
100+
2
101+
(1 row)
102+

0 commit comments

Comments
 (0)