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 $groups->{'Essential'}{$cols[0]} = {};
46 $groups->{$group}{$_} ||= {} for @cols;
48 $class->_column_groups($groups);
51 sub all_columns { return shift->result_source_instance->columns; }
55 my @pri = $class->primary_columns;
56 return wantarray ? @pri : $pri[0];
60 my ($class, $col) = @_;
61 return $col if $class->has_column($col);
66 return bless({ class => $class}, 'DBIx::Class::CDBICompat::ColumnGroups::GrouperShim');
70 my ($class, @col) = @_;
71 return map { $class->find_column($_) } @col;
74 package DBIx::Class::CDBICompat::ColumnGroups::GrouperShim;
77 my ($self, @cols) = @_;
79 foreach my $col (@cols) {
80 foreach my $group (keys %{$self->{class}->_column_groups}) {
81 $groups{$group} = 1 if $self->{class}->_column_groups->{$group}->{$col};