use strict;
use warnings;
-use Sub::Name ();
-use List::Util ();
use base qw/DBIx::Class::Row/;
+use List::Util ();
+use DBIx::Class::_Util 'set_subname';
+use namespace::clean;
+
__PACKAGE__->mk_classdata('_column_groups' => { });
sub columns {
no strict 'refs';
my $existing_accessor = *{$class .'::'. $name}{CODE};
- return $existing_accessor && !$our_accessors{$existing_accessor};
+
+ return(
+ defined $existing_accessor
+ and
+ ! $our_accessors{$existing_accessor}
+ and
+ # under 5.8 mro the CODE slot may simply be a "cached method"
+ ! (
+ DBIx::Class::_ENV_::OLD_MRO
+ and
+ grep {
+ $_ ne $class
+ and
+ ($_->can($name)||0) == $existing_accessor
+ } @{mro::get_linear_isa($class)}
+ )
+ )
}
sub _deploy_accessor {
no strict 'refs';
no warnings 'redefine';
my $fullname = join '::', $class, $name;
- *$fullname = Sub::Name::subname $fullname, $accessor;
+ *$fullname = set_subname $fullname, $accessor;
}
$our_accessors{$accessor}++;
($name, $field) = @$field if ref $field;
- my $accessor = $class->$maker($group, $field);
- my $alias = "_${name}_accessor";
-
- # warn " $field $alias\n";
- {
- no strict 'refs';
-
- $class->_deploy_accessor($name, $accessor);
- $class->_deploy_accessor($alias, $accessor);
+ for( $name, "_${name}_accessor" ) {
+ $class->_deploy_accessor(
+ $_,
+ $class->$maker($group, $field, $_)
+ );
}
}
}