1-- test warnings and errors from plperl
2
3create or replace function perl_elog(text) returns void language plperl as $$
4
5  my $msg = shift;
6  elog(NOTICE,$msg);
7
8$$;
9
10select perl_elog('explicit elog');
11
12create or replace function perl_warn(text) returns void language plperl as $$
13
14  my $msg = shift;
15  warn($msg);
16
17$$;
18
19select perl_warn('implicit elog via warn');
20
21-- test strict mode on/off
22
23SET plperl.use_strict = true;
24
25create or replace function uses_global() returns text language plperl as $$
26
27  $global = 1;
28  $other_global = 2;
29  return 'uses_global worked';
30
31$$;
32
33select uses_global();
34
35SET plperl.use_strict = false;
36
37create or replace function uses_global() returns text language plperl as $$
38
39  $global = 1;
40  $other_global=2;
41  return 'uses_global worked';
42
43$$;
44
45select uses_global();
46
47-- make sure we don't choke on readonly values
48do language plperl $$ elog(NOTICE, ${^TAINT}); $$;
49
50-- test recovery after "die"
51
52create or replace function just_die() returns void language plperl AS $$
53die "just die";
54$$;
55
56select just_die();
57
58create or replace function die_caller() returns int language plpgsql as $$
59BEGIN
60  BEGIN
61    PERFORM just_die();
62  EXCEPTION WHEN OTHERS THEN
63    RAISE NOTICE 'caught die';
64  END;
65  RETURN 1;
66END;
67$$;
68
69select die_caller();
70
71create or replace function indirect_die_caller() returns int language plperl as $$
72my $prepared = spi_prepare('SELECT die_caller() AS fx');
73my $a = spi_exec_prepared($prepared)->{rows}->[0]->{fx};
74my $b = spi_exec_prepared($prepared)->{rows}->[0]->{fx};
75return $a + $b;
76$$;
77
78select indirect_die_caller();
79
80-- Test non-ASCII error messages
81--
82-- Note: this test case is known to fail if the database encoding is
83-- EUC_CN, EUC_JP, EUC_KR, or EUC_TW, for lack of any equivalent to
84-- U+00A0 (no-break space) in those encodings.  However, testing with
85-- plain ASCII data would be rather useless, so we must live with that.
86
87SET client_encoding TO UTF8;
88
89create or replace function error_with_nbsp() returns void language plperl as $$
90  elog(ERROR, "this message contains a no-break space");
91$$;
92
93select error_with_nbsp();
94