Remove anonymous blesses to avoid major speed hit on Fedora Core 5, or 'the anti...
Daniel Westermann-Clark [Fri, 28 Jul 2006 03:30:28 +0000 (03:30 +0000)]
Changes
lib/DBIx/Class/CDBICompat/ColumnGroups.pm
lib/DBIx/Class/DB.pm
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/ResultSource.pm
lib/DBIx/Class/Row.pm
lib/DBIx/Class/Schema.pm
lib/DBIx/Class/Storage.pm
lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/Statistics.pm

diff --git a/Changes b/Changes
index 51dd4ed..ae5087f 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,6 +1,9 @@
 Revision history for DBIx::Class
 
 0.07001
+        - remove anonymous blesses to avoid major speed hit on Fedora Core 5's
+          Perl and possibly others; for more information see:
+          https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=196836
         - fix a pathological prefetch case
         - table case fix for Oracle in columns_info_for
 
index 911fe2a..98e6508 100644 (file)
@@ -64,7 +64,8 @@ sub find_column {
 
 sub __grouper {
   my ($class) = @_;
-  return bless({ class => $class}, 'DBIx::Class::CDBICompat::ColumnGroups::GrouperShim');
+  my $grouper = { class => $class };
+  return bless($grouper, 'DBIx::Class::CDBICompat::ColumnGroups::GrouperShim');
 }
 
 sub _find_columns {
index 0fb7e8a..007c82a 100644 (file)
@@ -93,7 +93,8 @@ register themselves with it.
 
 sub setup_schema_instance {
   my $class = shift;
-  my $schema = bless({}, 'DBIx::Class::Schema');
+  my $schema = {};
+  bless $schema, 'DBIx::Class::Schema';
   $class->mk_classdata('schema_instance' => $schema);
 }
 
index 1ee7fb6..daf7e03 100644 (file)
@@ -95,14 +95,18 @@ sub new {
 
   $attrs->{alias} ||= 'me';
 
-  bless {
+  my $self = {
     result_source => $source,
     result_class => $attrs->{result_class} || $source->result_class,
     cond => $attrs->{where},
     count => undef,
     pager => undef,
     attrs => $attrs
-  }, $class;
+  };
+
+  bless $self, $class;
+
+  return $self;
 }
 
 =head2 search
index 1e95cba..659948f 100644 (file)
@@ -45,7 +45,10 @@ Creates a new ResultSource object.  Not normally called directly by end users.
 sub new {
   my ($class, $attrs) = @_;
   $class = ref $class if ref $class;
-  my $new = bless({ %{$attrs || {}}, _resultset => undef }, $class);
+
+  my $new = { %{$attrs || {}}, _resultset => undef };
+  bless $new, $class;
+
   $new->{resultset_class} ||= 'DBIx::Class::ResultSet';
   $new->{resultset_attributes} = { %{$new->{resultset_attributes} || {}} };
   $new->{_ordered_columns} = [ @{$new->{_ordered_columns}||[]}];
index 3efe418..ceed5a6 100644 (file)
@@ -34,7 +34,10 @@ Creates a new row object from column => value mappings passed as a hash ref
 sub new {
   my ($class, $attrs) = @_;
   $class = ref $class if ref $class;
-  my $new = bless { _column_data => {} }, $class;
+
+  my $new = { _column_data => {} };
+  bless $new, $class;
+
   if ($attrs) {
     $new->throw_exception("attrs must be a hashref")
       unless ref($attrs) eq 'HASH';
@@ -44,6 +47,7 @@ sub new {
       $new->store_column($k => $attrs->{$k});
     }
   }
+
   return $new;
 }
 
@@ -265,7 +269,10 @@ sub copy {
     delete $col_data->{$col}
       if $self->result_source->column_info($col)->{is_auto_increment};
   }
-  my $new = bless { _column_data => $col_data }, ref $self;
+
+  my $new = { _column_data => $col_data };
+  bless $new, ref $self;
+
   $new->result_source($self->result_source);
   $new->set_columns($changes);
   $new->insert;
@@ -310,11 +317,13 @@ Called by ResultSet to inflate a result from storage
 sub inflate_result {
   my ($class, $source, $me, $prefetch) = @_;
   #use Data::Dumper; print Dumper(@_);
-  my $new = bless({ result_source => $source,
-                    _column_data => $me,
-                    _in_storage => 1
-                  },
-                  ref $class || $class);
+  my $new = {
+    result_source => $source,
+    _column_data => $me,
+    _in_storage => 1
+  };
+  bless $new, (ref $class || $class);
+
   my $schema;
   foreach my $pre (keys %{$prefetch||{}}) {
     my $pre_val = $prefetch->{$pre};
index 47e78cf..d35b211 100644 (file)
@@ -625,7 +625,9 @@ copy.
 
 sub clone {
   my ($self) = @_;
-  my $clone = bless({ (ref $self ? %$self : ()) }, ref $self || $self);
+  my $clone = { (ref $self ? %$self : ()) };
+  bless $clone, (ref $self || $self);
+
   foreach my $moniker ($self->sources) {
     my $source = $self->source($moniker);
     my $new = $source->new($source);
index 9b3dd72..735006c 100644 (file)
@@ -35,7 +35,8 @@ use overload '"' => sub {
 
 sub new {
   my $class = shift;
-  return bless {}, $class;
+  my $self = {};
+  return bless $self, $class;
 }
 
 1;
index 9077631..5984c94 100644 (file)
@@ -275,7 +275,9 @@ This class represents the connection to the database
 =cut
 
 sub new {
-  my $new = bless({}, ref $_[0] || $_[0]);
+  my $new = {};
+  bless $new, (ref $_[0] || $_[0]);
+
   $new->cursor("DBIx::Class::Storage::DBI::Cursor");
   $new->transaction_depth(0);
 
index 0599ed6..eaa3ee9 100644 (file)
@@ -30,7 +30,8 @@ Returns a new L<DBIx::Class::Storage::Statistics> object.
 
 =cut
 sub new {
-    my $self = bless({}, ref($_[0]) || $_[0]);
+    my $self = {};
+    bless $self, (ref($_[0]) || $_[0]);
 
     return $self;
 }