1-- test plperl/plperlu interaction
2
3-- the language and call ordering of this test sequence is useful
4
5CREATE OR REPLACE FUNCTION bar() RETURNS integer AS $$
6    #die 'BANG!'; # causes server process to exit(2)
7    # alternative - causes server process to exit(255)
8    spi_exec_query("invalid sql statement");
9$$ language plperl; -- compile plperl code
10
11CREATE OR REPLACE FUNCTION foo() RETURNS integer AS $$
12    spi_exec_query("SELECT * FROM bar()");
13    return 1;
14$$ LANGUAGE plperlu; -- compile plperlu code
15
16SELECT * FROM bar(); -- throws exception normally (running plperl)
17SELECT * FROM foo(); -- used to cause backend crash (after switching to plperlu)
18
19-- test redefinition of specific SP switching languages
20-- http://archives.postgresql.org/pgsql-bugs/2010-01/msg00116.php
21
22-- plperl first
23create or replace function foo(text) returns text language plperl  as 'shift';
24select foo('hey');
25create or replace function foo(text) returns text language plperlu as 'shift';
26select foo('hey');
27create or replace function foo(text) returns text language plperl  as 'shift';
28select foo('hey');
29
30-- plperlu first
31create or replace function bar(text) returns text language plperlu as 'shift';
32select bar('hey');
33create or replace function bar(text) returns text language plperl  as 'shift';
34select bar('hey');
35create or replace function bar(text) returns text language plperlu as 'shift';
36select bar('hey');
37
38--
39-- Make sure we can't use/require things in plperl
40--
41
42CREATE OR REPLACE FUNCTION use_plperlu() RETURNS void LANGUAGE plperlu
43AS $$
44use Errno;
45$$;
46
47CREATE OR REPLACE FUNCTION use_plperl() RETURNS void LANGUAGE plperl
48AS $$
49use Errno;
50$$;
51
52-- make sure our overloaded require op gets restored/set correctly
53select use_plperlu();
54
55CREATE OR REPLACE FUNCTION use_plperl() RETURNS void LANGUAGE plperl
56AS $$
57use Errno;
58$$;
59