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