File tree Expand file tree Collapse file tree 3 files changed +70
-2
lines changed Expand file tree Collapse file tree 3 files changed +70
-2
lines changed Original file line number Diff line number Diff line change @@ -17,3 +17,49 @@ CONTEXT: PL/Perl function "bar"
1717SELECT * FROM foo(); -- used to cause backend crash (after switching to plperlu)
1818ERROR: syntax error at or near "invalid" at line 4. at line 2.
1919CONTEXT: PL/Perl function "foo"
20+ -- test redefinition of specific SP switching languages
21+ -- http://archives.postgresql.org/pgsql-bugs/2010-01/msg00116.php
22+ -- plperl first
23+ create or replace function foo(text) returns text language plperl as 'shift';
24+ select foo('hey');
25+ foo
26+ -----
27+ hey
28+ (1 row)
29+
30+ create or replace function foo(text) returns text language plperlu as 'shift';
31+ select foo('hey');
32+ foo
33+ -----
34+ hey
35+ (1 row)
36+
37+ create or replace function foo(text) returns text language plperl as 'shift';
38+ select foo('hey');
39+ foo
40+ -----
41+ hey
42+ (1 row)
43+
44+ -- plperlu first
45+ create or replace function bar(text) returns text language plperlu as 'shift';
46+ select bar('hey');
47+ bar
48+ -----
49+ hey
50+ (1 row)
51+
52+ create or replace function bar(text) returns text language plperl as 'shift';
53+ select bar('hey');
54+ bar
55+ -----
56+ hey
57+ (1 row)
58+
59+ create or replace function bar(text) returns text language plperlu as 'shift';
60+ select bar('hey');
61+ bar
62+ -----
63+ hey
64+ (1 row)
65+
Original file line number Diff line number Diff line change 11/**********************************************************************
22 * plperl.c - perl as a procedural language for PostgreSQL
33 *
4- * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.163 2010/01/30 01:46:57 adunstan Exp $
4+ * $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.164 2010/02/12 04:31:14 adunstan Exp $
55 *
66 **********************************************************************/
77
@@ -1762,8 +1762,11 @@ compile_plperl_function(Oid fn_oid, bool is_trigger)
17621762 {
17631763 hash_search (plperl_proc_hash , internal_proname ,
17641764 HASH_REMOVE , NULL );
1765- if (prodesc -> reference )
1765+ if (prodesc -> reference ) {
1766+ select_perl_context (prodesc -> lanpltrusted );
17661767 SvREFCNT_dec (prodesc -> reference );
1768+ restore_context (oldcontext );
1769+ }
17671770 free (prodesc -> proname );
17681771 free (prodesc );
17691772 prodesc = NULL ;
Original file line number Diff line number Diff line change @@ -16,3 +16,22 @@ $$ LANGUAGE plperlu; -- compile plperlu code
1616SELECT * FROM bar(); -- throws exception normally (running plperl)
1717SELECT * FROM foo(); -- used to cause backend crash (after switching to plperlu)
1818
19+ -- test redefinition of specific SP switching languages
20+ -- http://archives.postgresql.org/pgsql-bugs/2010-01/msg00116.php
21+
22+ -- plperl first
23+ create or replace function foo (text ) returns text language plperl as ' shift' ;
24+ select foo(' hey' );
25+ create or replace function foo (text ) returns text language plperlu as ' shift' ;
26+ select foo(' hey' );
27+ create or replace function foo (text ) returns text language plperl as ' shift' ;
28+ select foo(' hey' );
29+
30+ -- plperlu first
31+ create or replace function bar (text ) returns text language plperlu as ' shift' ;
32+ select bar(' hey' );
33+ create or replace function bar (text ) returns text language plperl as ' shift' ;
34+ select bar(' hey' );
35+ create or replace function bar (text ) returns text language plperlu as ' shift' ;
36+ select bar(' hey' );
37+
You can’t perform that action at this time.
0 commit comments