From 7badf1b25d0d1b5422b215ad6ef7cd2094b4a244 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Tue, 27 Jul 2010 04:18:28 +0000
Subject: [PATCH] Ensure $_SHARED is declared in the main:: namespace, per bugs
 #5570 and #5571.

Author: Alex Hunsaker
---
 src/pl/plperl/expected/plperl_shared.out | 19 +++++++++++++++++++
 src/pl/plperl/plc_perlboot.pl            |  4 ++--
 src/pl/plperl/sql/plperl_shared.sql      | 11 +++++++++++
 3 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/pl/plperl/expected/plperl_shared.out b/src/pl/plperl/expected/plperl_shared.out
index d054985cb84..1a6bf5ee4d4 100644
--- a/src/pl/plperl/expected/plperl_shared.out
+++ b/src/pl/plperl/expected/plperl_shared.out
@@ -36,3 +36,22 @@ select getme('on_init');
  42
 (1 row)
 
+-- verify that we can use $_SHARED in strict mode
+create or replace function perl_shared() returns int as $$
+use strict;
+my $val = $_SHARED{'stuff'};
+$_SHARED{'stuff'} = '1';
+return $val;
+$$ language plperl;
+select perl_shared();
+ perl_shared 
+-------------
+            
+(1 row)
+
+select perl_shared();
+ perl_shared 
+-------------
+           1
+(1 row)
+
diff --git a/src/pl/plperl/plc_perlboot.pl b/src/pl/plperl/plc_perlboot.pl
index 379d4bfa5b7..72e96d1a796 100644
--- a/src/pl/plperl/plc_perlboot.pl
+++ b/src/pl/plperl/plc_perlboot.pl
@@ -1,7 +1,8 @@
 
-#  $PostgreSQL: pgsql/src/pl/plperl/plc_perlboot.pl,v 1.6 2010/05/13 16:39:43 adunstan Exp $
+#  $PostgreSQL: pgsql/src/pl/plperl/plc_perlboot.pl,v 1.7 2010/07/27 04:18:28 alvherre Exp $
 
 use 5.008001;
+use vars qw(%_SHARED);
 
 PostgreSQL::InServer::Util::bootstrap();
 
@@ -9,7 +10,6 @@ package PostgreSQL::InServer;
 
 use strict;
 use warnings;
-use vars qw(%_SHARED);
 
 sub plperl_warn {
 	(my $msg = shift) =~ s/\(eval \d+\) //g;
diff --git a/src/pl/plperl/sql/plperl_shared.sql b/src/pl/plperl/sql/plperl_shared.sql
index a617b46a7af..d367d32ff08 100644
--- a/src/pl/plperl/sql/plperl_shared.sql
+++ b/src/pl/plperl/sql/plperl_shared.sql
@@ -29,3 +29,14 @@ select setme('ourkey','ourval');
 select getme('ourkey');
 
 select getme('on_init');
+
+-- verify that we can use $_SHARED in strict mode
+create or replace function perl_shared() returns int as $$
+use strict;
+my $val = $_SHARED{'stuff'};
+$_SHARED{'stuff'} = '1';
+return $val;
+$$ language plperl;
+
+select perl_shared();
+select perl_shared();
-- 
GitLab