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 379     379   159951 use strict;
  379         833  
  379         10163  
5 379     379   1505 use warnings;
  379         692  
  379         8460  
6 379     379   1431 use Try::Tiny;
  379         712  
  379         21423  
7 379     379   1776 use namespace::clean;
  379         823  
  379         2309  
8              
9             our %_pod_inherit_config =
10             (
11             class_map => { 'DBIx::Class::Relationship::HasMany' => 'DBIx::Class::Relationship' }
12             );
13              
14             sub has_many {
15 12333     12333 0 93321 my ($class, $rel, $f_class, $cond, $attrs) = @_;
16              
17 12333 100       26304 unless (ref $cond) {
18              
19 7337         168483 my $pri = $class->result_source_instance->_single_pri_col_or_die;
20              
21 7337         7908 my ($f_key,$guess);
22 7337 100 66     30073 if (defined $cond && length $cond) {
23 4950         6908 $f_key = $cond;
24 4950         10077 $guess = "caller specified foreign key '$f_key'";
25             } else {
26 2387         11463 $class =~ /([^\:]+)$/; # match is safe - $class can't be ''
27 2387         5704 $f_key = lc $1; # go ahead and guess; best we can do
28 2387         4738 $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 = try { $f_class->result_source_instance } ) {
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 7337         31446 $cond = { "foreign.${f_key}" => "self.${pri}" };
40             }
41              
42 12333 100       28080 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 12333 100       16643 %{$attrs||{}}
  12333         126076  
51             });
52             }
53              
54             1;