Lazily load DBD::Pg in ::Storage::DBI::Pg, only when typing is required
Peter Rabbitson [Fri, 11 Mar 2011 17:54:25 +0000 (18:54 +0100)]
lib/DBIx/Class/Storage/DBI/Pg.pm

index 785a67b..128db75 100644 (file)
@@ -8,7 +8,6 @@ use base qw/
 /;
 use mro 'c3';
 
-use DBD::Pg qw(:pg_types);
 use Scope::Guard ();
 use Context::Preserve 'preserve_context';
 use namespace::clean;
@@ -17,10 +16,6 @@ __PACKAGE__->sql_limit_dialect ('LimitOffset');
 __PACKAGE__->sql_quote_char ('"');
 __PACKAGE__->datetime_parser_type ('DateTime::Format::Pg');
 
-# Ask for a DBD::Pg with array support
-warn __PACKAGE__.": DBD::Pg 2.9.2 or greater is strongly recommended\n"
-  if ($DBD::Pg::VERSION < 2.009002);  # pg uses (used?) version::qv()
-
 sub _determine_supports_insert_returning {
   return shift->_server_info->{normalized_dbms_version} >= 8.002
     ? 1
@@ -167,12 +162,20 @@ sub sqlt_type {
   return 'PostgreSQL';
 }
 
+my $bind_attributes;
 sub bind_attribute_by_data_type {
   my ($self,$data_type) = @_;
 
-  my $bind_attributes = {
-    bytea => { pg_type => DBD::Pg::PG_BYTEA },
-    blob  => { pg_type => DBD::Pg::PG_BYTEA },
+  $bind_attributes ||= do {
+    require DBD::Pg;
+
+    # Ask for a DBD::Pg with array support
+    warn __PACKAGE__.": DBD::Pg 2.9.2 or greater is strongly recommended\n"
+      if ($DBD::Pg::VERSION < 2.009002);  # pg uses (used?) version::qv()
+    {
+      bytea => { pg_type => DBD::Pg::PG_BYTEA() },
+      blob  => { pg_type => DBD::Pg::PG_BYTEA() },
+    };
   };
 
   if( defined $bind_attributes->{$data_type} ) {