X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCDBICompat%2FColumnGroups.pm;h=51a40f9e7f9921563c9cc187114f2e3de2ee1d16;hb=902133a323b09153549d1a54983ae3f98da2c4ec;hp=911fe2a3b2d79407c3ac5fa41a6c25d5434347ed;hpb=75d079145a507a0e5ff89b2676d383f4fd1a5511;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/CDBICompat/ColumnGroups.pm b/lib/DBIx/Class/CDBICompat/ColumnGroups.pm index 911fe2a..51a40f9 100644 --- a/lib/DBIx/Class/CDBICompat/ColumnGroups.pm +++ b/lib/DBIx/Class/CDBICompat/ColumnGroups.pm @@ -4,6 +4,8 @@ package # hide from PAUSE use strict; use warnings; +use Storable 'dclone'; + use base qw/DBIx::Class::Row/; __PACKAGE__->mk_classdata('_column_groups' => { }); @@ -12,6 +14,8 @@ sub columns { my $proto = shift; my $class = ref $proto || $proto; my $group = shift || "All"; + $class->_init_result_source_instance(); + $class->_add_column_group($group => @_) if @_; return $class->all_columns if $group eq "All"; return $class->primary_column if $group eq "Primary"; @@ -27,24 +31,26 @@ sub _add_column_group { sub _register_column_group { my ($class, $group, @cols) = @_; - my $groups = { %{$class->_column_groups} }; + # Must do a complete deep copy else column groups + # might accidentally be shared. + my $groups = dclone $class->_column_groups; if ($group eq 'Primary') { $class->set_primary_key(@cols); - $groups->{'Essential'}{$_} ||= {} for @cols; + $groups->{'Essential'}{$_} ||= 1 for @cols; } if ($group eq 'All') { unless (exists $class->_column_groups->{'Primary'}) { - $groups->{'Primary'}{$cols[0]} = {}; + $groups->{'Primary'}{$cols[0]} = 1; $class->set_primary_key($cols[0]); } unless (exists $class->_column_groups->{'Essential'}) { - $groups->{'Essential'}{$cols[0]} = {}; + $groups->{'Essential'}{$cols[0]} = 1; } } - $groups->{$group}{$_} ||= {} for @cols; + $groups->{$group}{$_} ||= 1 for @cols; $class->_column_groups($groups); } @@ -57,6 +63,10 @@ sub primary_column { return wantarray ? @pri : $pri[0]; } +sub _essential { + return shift->columns("Essential"); +} + sub find_column { my ($class, $col) = @_; return $col if $class->has_column($col); @@ -64,7 +74,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 {