Filename | /usr/share/perl5/DBIx/Class/Relationship/HasOne.pm |
Statements | Executed 0 statements in 0s |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
11 | 1 | 1 | 463µs | 923µs | _validate_has_one_condition | DBIx::Class::Relationship::HasOne::
11 | 1 | 1 | 188µs | 2.54ms | _has_one | DBIx::Class::Relationship::HasOne::
11 | 11 | 6 | 62µs | 2.60ms | might_have | DBIx::Class::Relationship::HasOne::
11 | 1 | 1 | 37µs | 37µs | CORE:match (opcode) | DBIx::Class::Relationship::HasOne::
1 | 1 | 1 | 21µs | 201µs | BEGIN@8 | DBIx::Class::Relationship::HasOne::
1 | 1 | 1 | 15µs | 22µs | BEGIN@4 | DBIx::Class::Relationship::HasOne::
1 | 1 | 1 | 10µs | 49µs | BEGIN@6 | DBIx::Class::Relationship::HasOne::
1 | 1 | 1 | 9µs | 13µs | BEGIN@5 | DBIx::Class::Relationship::HasOne::
1 | 1 | 1 | 8µs | 30µs | BEGIN@7 | DBIx::Class::Relationship::HasOne::
0 | 0 | 0 | 0s | 0s | __ANON__[:42] | DBIx::Class::Relationship::HasOne::
0 | 0 | 0 | 0s | 0s | __ANON__[:48] | DBIx::Class::Relationship::HasOne::
0 | 0 | 0 | 0s | 0s | has_one | DBIx::Class::Relationship::HasOne::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package # hide from PAUSE | ||||
2 | DBIx::Class::Relationship::HasOne; | ||||
3 | |||||
4 | 2 | 29µs | # spent 22µs (15+7) within DBIx::Class::Relationship::HasOne::BEGIN@4 which was called:
# once (15µs+7µs) by Class::C3::Componentised::ensure_class_loaded at line 4 # spent 22µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@4
# spent 7µs making 1 call to strict::import | ||
5 | 2 | 18µs | # spent 13µs (9+4) within DBIx::Class::Relationship::HasOne::BEGIN@5 which was called:
# once (9µs+4µs) by Class::C3::Componentised::ensure_class_loaded at line 5 # spent 13µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@5
# spent 4µs making 1 call to warnings::import | ||
6 | 2 | 88µs | # spent 49µs (10+39) within DBIx::Class::Relationship::HasOne::BEGIN@6 which was called:
# once (10µs+39µs) by Class::C3::Componentised::ensure_class_loaded at line 6 # spent 49µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@6
# spent 39µs making 1 call to DBIx::Class::Carp::import | ||
7 | 2 | 51µs | # spent 30µs (8+22) within DBIx::Class::Relationship::HasOne::BEGIN@7 which was called:
# once (8µs+22µs) by Class::C3::Componentised::ensure_class_loaded at line 7 # spent 30µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@7
# spent 22µs making 1 call to Exporter::import | ||
8 | 2 | 381µs | # spent 201µs (21+180) within DBIx::Class::Relationship::HasOne::BEGIN@8 which was called:
# once (21µs+180µs) by Class::C3::Componentised::ensure_class_loaded at line 8 # spent 201µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@8
# spent 180µs making 1 call to namespace::clean::import | ||
9 | |||||
10 | our %_pod_inherit_config = | ||||
11 | ( | ||||
12 | class_map => { 'DBIx::Class::Relationship::HasOne' => 'DBIx::Class::Relationship' } | ||||
13 | ); | ||||
14 | |||||
15 | # spent 2.60ms (62µs+2.54) within DBIx::Class::Relationship::HasOne::might_have which was called 11 times, avg 236µs/call:
# once (8µs+389µs) by Class::C3::Componentised::ensure_class_loaded at line 367 of Koha/Schema/Result/Aqorder.pm
# once (6µs+310µs) by Class::C3::Componentised::ensure_class_loaded at line 551 of Koha/Schema/Result/Item.pm
# once (10µs+242µs) by Class::C3::Componentised::ensure_class_loaded at line 160 of Koha/Schema/Result/Itemtype.pm
# once (8µs+240µs) by Class::C3::Componentised::ensure_class_loaded at line 248 of Koha/Schema/Result/Category.pm
# once (7µs+235µs) by Class::C3::Componentised::ensure_class_loaded at line 393 of Koha/Schema/Result/Branch.pm
# once (7µs+213µs) by Class::C3::Componentised::ensure_class_loaded at line 981 of Koha/Schema/Result/Borrower.pm
# once (7µs+211µs) by Class::C3::Componentised::ensure_class_loaded at line 466 of Koha/Schema/Result/Item.pm
# once (2µs+182µs) by Class::C3::Componentised::ensure_class_loaded at line 566 of Koha/Schema/Result/Item.pm
# once (3µs+174µs) by Class::C3::Componentised::ensure_class_loaded at line 626 of Koha/Schema/Result/Item.pm
# once (2µs+170µs) by Class::C3::Componentised::ensure_class_loaded at line 382 of Koha/Schema/Result/Aqorder.pm
# once (3µs+168µs) by Class::C3::Componentised::ensure_class_loaded at line 496 of Koha/Schema/Result/Item.pm | ||||
16 | 11 | 2.54ms | shift->_has_one('LEFT' => @_); # spent 2.54ms making 11 calls to DBIx::Class::Relationship::HasOne::_has_one, avg 230µs/call | ||
17 | } | ||||
18 | |||||
19 | sub has_one { | ||||
20 | shift->_has_one(undef() => @_); | ||||
21 | } | ||||
22 | |||||
23 | # spent 2.54ms (188µs+2.35) within DBIx::Class::Relationship::HasOne::_has_one which was called 11 times, avg 230µs/call:
# 11 times (188µs+2.35ms) by DBIx::Class::Relationship::HasOne::might_have at line 16, avg 230µs/call | ||||
24 | my ($class, $join_type, $rel, $f_class, $cond, $attrs) = @_; | ||||
25 | unless (ref $cond) { | ||||
26 | my $pri = $class->result_source_instance->_single_pri_col_or_die; | ||||
27 | |||||
28 | my ($f_key,$guess,$f_rsrc); | ||||
29 | if (defined $cond && length $cond) { | ||||
30 | $f_key = $cond; | ||||
31 | $guess = "caller specified foreign key '$f_key'"; | ||||
32 | } | ||||
33 | else { | ||||
34 | # at this point we need to load the foreigner, expensive or not | ||||
35 | $class->ensure_class_loaded($f_class); | ||||
36 | |||||
37 | $f_rsrc = try { | ||||
38 | my $r = $f_class->result_source_instance; | ||||
39 | die "There got to be some columns by now... (exception caught and rewritten by catch below)" | ||||
40 | unless $r->columns; | ||||
41 | $r; | ||||
42 | } | ||||
43 | catch { | ||||
44 | $class->throw_exception( | ||||
45 | "Foreign class '$f_class' does not seem to be a Result class " | ||||
46 | . "(or it simply did not load entirely due to a circular relation chain)" | ||||
47 | ); | ||||
48 | }; | ||||
49 | |||||
50 | if ($f_rsrc->has_column($rel)) { | ||||
51 | $f_key = $rel; | ||||
52 | $guess = "using given relationship name '$rel' as foreign key column name"; | ||||
53 | } | ||||
54 | else { | ||||
55 | $f_key = $f_rsrc->_single_pri_col_or_die; | ||||
56 | $guess = "using primary key of foreign class for foreign key"; | ||||
57 | } | ||||
58 | } | ||||
59 | |||||
60 | # FIXME - this check needs to be moved to schema-composition time... | ||||
61 | # # only perform checks if the far side was not preloaded above *AND* | ||||
62 | # # appears to have been loaded by something else (has a rsrc_instance) | ||||
63 | # if (! $f_rsrc and $f_rsrc = try { $f_class->result_source_instance }) { | ||||
64 | # $class->throw_exception( | ||||
65 | # "No such column '$f_key' on foreign class ${f_class} ($guess)" | ||||
66 | # ) if !$f_rsrc->has_column($f_key); | ||||
67 | # } | ||||
68 | |||||
69 | $cond = { "foreign.${f_key}" => "self.${pri}" }; | ||||
70 | } | ||||
71 | 11 | 923µs | $class->_validate_has_one_condition($cond); # spent 923µs making 11 calls to DBIx::Class::Relationship::HasOne::_validate_has_one_condition, avg 84µs/call | ||
72 | |||||
73 | my $default_cascade = ref $cond eq 'CODE' ? 0 : 1; | ||||
74 | |||||
75 | $class->add_relationship($rel, $f_class, | ||||
76 | $cond, | ||||
77 | { accessor => 'single', | ||||
78 | cascade_update => $default_cascade, | ||||
79 | cascade_delete => $default_cascade, | ||||
80 | is_depends_on => 0, | ||||
81 | ($join_type ? ('join_type' => $join_type) : ()), | ||||
82 | 11 | 1.42ms | %{$attrs || {}} }); # spent 1.42ms making 11 calls to DBIx::Class::ResultSourceProxy::add_relationship, avg 129µs/call | ||
83 | 1; | ||||
84 | } | ||||
85 | |||||
86 | # spent 923µs (463+460) within DBIx::Class::Relationship::HasOne::_validate_has_one_condition which was called 11 times, avg 84µs/call:
# 11 times (463µs+460µs) by DBIx::Class::Relationship::HasOne::_has_one at line 71, avg 84µs/call | ||||
87 | my ($class, $cond ) = @_; | ||||
88 | |||||
89 | return if $ENV{DBIC_DONT_VALIDATE_RELS}; | ||||
90 | return unless 'HASH' eq ref $cond; | ||||
91 | foreach my $foreign_id ( keys %$cond ) { | ||||
92 | my $self_id = $cond->{$foreign_id}; | ||||
93 | |||||
94 | # we can ignore a bad $self_id because add_relationship handles this | ||||
95 | # exception | ||||
96 | 11 | 37µs | return unless $self_id =~ /^self\.(.*)$/; # spent 37µs making 11 calls to DBIx::Class::Relationship::HasOne::CORE:match, avg 3µs/call | ||
97 | |||||
98 | my $key = $1; | ||||
99 | 11 | 203µs | $class->throw_exception("Defining rel on ${class} that includes '$key' but no such column defined here yet") # spent 203µs making 11 calls to DBIx::Class::ResultSourceProxy::has_column, avg 18µs/call | ||
100 | unless $class->has_column($key); | ||||
101 | 11 | 220µs | my $column_info = $class->column_info($key); # spent 220µs making 11 calls to DBIx::Class::ResultSourceProxy::column_info, avg 20µs/call | ||
102 | if ( $column_info->{is_nullable} ) { | ||||
103 | carp(qq'"might_have/has_one" must not be on columns with is_nullable set to true ($class/$key). This might indicate an incorrect use of those relationship helpers instead of belongs_to.'); | ||||
104 | } | ||||
105 | } | ||||
106 | } | ||||
107 | |||||
108 | 1 | 238µs | 1; # spent 238µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__ | ||
# spent 37µs within DBIx::Class::Relationship::HasOne::CORE:match which was called 11 times, avg 3µs/call:
# 11 times (37µs+0s) by DBIx::Class::Relationship::HasOne::_validate_has_one_condition at line 96, avg 3µs/call |