1 package DBIx::Class::CDBICompat::ColumnGroups;
6 use base qw/DBIx::Class::Row/;
8 __PACKAGE__->mk_classdata('_column_groups' => { });
12 my $class = ref $proto || $proto;
13 my $group = shift || "All";
14 $class->_add_column_group($group => @_) if @_;
15 return $class->all_columns if $group eq "All";
16 return $class->primary_column if $group eq "Primary";
17 return keys %{$class->_column_groups->{$group}};
20 sub _add_column_group {
21 my ($class, $group, @cols) = @_;
22 $class->add_columns(@cols);
23 $class->_register_column_group($group => @cols);
26 sub _register_column_group {
27 my ($class, $group, @cols) = @_;
29 my $groups = { %{$class->_column_groups} };
31 if ($group eq 'Primary') {
32 $class->set_primary_key(@cols);
33 $groups->{'Essential'}{$_} ||= {} for @cols;
36 if ($group eq 'All') {
37 unless (exists $class->_column_groups->{'Primary'}) {
38 $groups->{'Primary'}{$cols[0]} = {};
39 $class->set_primary_key($cols[0]);
41 unless (exists $class->_column_groups->{'Essential'}) {
42 #$class->_register_column_group('Essential' => $cols[0]);
43 $groups->{'Essential'}{$cols[0]} = {};
44 #$groups->{'Essential'}{$_} ||= {} for keys %{ $class->_primaries || {} };
48 $groups->{$group}{$_} ||= {} for @cols;
49 #if ($group eq 'Essential') {
50 # $groups->{$group}{$_} ||= {} for keys %{ $class->_primaries || {} };
53 $class->_column_groups($groups);
56 sub all_columns { return keys %{$_[0]->_columns}; }
60 my @pri = $class->primary_columns;
61 return wantarray ? @pri : $pri[0];
65 my ($class, $col) = @_;
66 return $col if $class->has_column($col);
71 return bless({ class => $class}, 'DBIx::Class::CDBICompat::ColumnGroups::GrouperShim');
75 my ($class, @col) = @_;
76 return map { $class->find_column($_) } @col;
79 package DBIx::Class::CDBICompat::ColumnGroups::GrouperShim;
82 my ($self, @cols) = @_;
84 foreach my $col (@cols) {
85 foreach my $group (keys %{$self->{class}->_column_groups}) {
86 $groups{$group} = 1 if $self->{class}->_column_groups->{$group}->{$col};