File Coverage

blib/lib/DBIx/Class/Relationship/HasMany.pm
Criterion Covered Total %
statement 26 26 100.0
branch 8 8 100.0
condition 2 3 66.6
subroutine 5 5 100.0
pod 0 1 0.0
total 41 43 95.3


line stmt bran cond sub pod time code
1             package # hide from PAUSE
2             DBIx::Class::Relationship::HasMany;
3              
4 312     312   96923 use strict;
  312         728  
  312         8194  
5 312     312   1582 use warnings;
  312         644  
  312         8079  
6 312     312   1679 use DBIx::Class::_Util 'dbic_internal_try';
  312         670  
  312         15699  
7 312     312   1798 use namespace::clean;
  312         702  
  312         2050  
8              
9             our %_pod_inherit_config =
10             (
11             class_map => { 'DBIx::Class::Relationship::HasMany' => 'DBIx::Class::Relationship' }
12             );
13              
14             sub has_many {
15 10371     10371 0 349079 my ($class, $rel, $f_class, $cond, $attrs) = @_;
16              
17 10371 100       35257 unless (ref $cond) {
18              
19 6122         43929 my $pri = $class->result_source->_single_pri_col_or_die;
20              
21 6122         13527 my ($f_key,$guess);
22 6122 100 66     29143 if (defined $cond && length $cond) {
23 4204         10119 $f_key = $cond;
24 4204         13800 $guess = "caller specified foreign key '$f_key'";
25             } else {
26 1918         11129 $class =~ /([^\:]+)$/; # match is safe - $class can't be ''
27 1918         6871 $f_key = lc $1; # go ahead and guess; best we can do
28 1918         5860 $guess = "using our class name '$class' as foreign key source";
29             }
30              
31             # FIXME - this check needs to be moved to schema-composition time...
32             # # only perform checks if the far side appears already loaded
33             # if (my $f_rsrc = dbic_internal_try { $f_class->result_source } ) {
34             # $class->throw_exception(
35             # "No such column '$f_key' on foreign class ${f_class} ($guess)"
36             # ) if !$f_rsrc->has_column($f_key);
37             # }
38              
39 6122         28282 $cond = { "foreign.${f_key}" => "self.${pri}" };
40             }
41              
42 10371 100       37656 my $default_cascade = ref $cond eq 'CODE' ? 0 : 1;
43              
44             $class->add_relationship($rel, $f_class, $cond, {
45             accessor => 'multi',
46             join_type => 'LEFT',
47             cascade_delete => $default_cascade,
48             cascade_copy => $default_cascade,
49             is_depends_on => 0,
50 10371 100       28275 %{$attrs||{}}
  10371         162346  
51             });
52             }
53              
54             1;