| 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 | 381µs | 816µs | DBIx::Class::Relationship::HasOne::_validate_has_one_condition | 
| 11 | 1 | 1 | 212µs | 2.54ms | DBIx::Class::Relationship::HasOne::_has_one | 
| 11 | 11 | 6 | 69µs | 2.61ms | DBIx::Class::Relationship::HasOne::might_have | 
| 11 | 1 | 1 | 37µs | 37µs | DBIx::Class::Relationship::HasOne::CORE:match (opcode) | 
| 1 | 1 | 1 | 15µs | 24µs | DBIx::Class::Relationship::HasOne::BEGIN@4 | 
| 1 | 1 | 1 | 10µs | 50µs | DBIx::Class::Relationship::HasOne::BEGIN@6 | 
| 1 | 1 | 1 | 10µs | 16µs | DBIx::Class::Relationship::HasOne::BEGIN@5 | 
| 1 | 1 | 1 | 9µs | 40µs | DBIx::Class::Relationship::HasOne::BEGIN@7 | 
| 1 | 1 | 1 | 8µs | 122µs | DBIx::Class::Relationship::HasOne::BEGIN@8 | 
| 0 | 0 | 0 | 0s | 0s | DBIx::Class::Relationship::HasOne::__ANON__[:42] | 
| 0 | 0 | 0 | 0s | 0s | DBIx::Class::Relationship::HasOne::__ANON__[:48] | 
| 0 | 0 | 0 | 0s | 0s | DBIx::Class::Relationship::HasOne::has_one | 
| Line | State ments  | 
      Time on line  | 
      Calls | Time in subs  | 
      Code | 
|---|---|---|---|---|---|
| 1 | package # hide from PAUSE | ||||
| 2 | DBIx::Class::Relationship::HasOne; | ||||
| 3 | |||||
| 4 | 2 | 32µs | # spent 24µs (15+8) within DBIx::Class::Relationship::HasOne::BEGIN@4 which was called:
#    once (15µs+8µs) by Class::C3::Componentised::ensure_class_loaded at line 4 # spent    24µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@4
# spent     8µs making 1 call to strict::import  | ||
| 5 | 2 | 22µs | # spent 16µs (10+6) within DBIx::Class::Relationship::HasOne::BEGIN@5 which was called:
#    once (10µs+6µs) by Class::C3::Componentised::ensure_class_loaded at line 5 # spent    16µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@5
# spent     6µs making 1 call to warnings::import  | ||
| 6 | 2 | 90µs | # spent 50µs (10+40) within DBIx::Class::Relationship::HasOne::BEGIN@6 which was called:
#    once (10µs+40µs) by Class::C3::Componentised::ensure_class_loaded at line 6 # spent    50µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@6
# spent    40µs making 1 call to DBIx::Class::Carp::import  | ||
| 7 | 2 | 70µs | # spent 40µs (9+30) within DBIx::Class::Relationship::HasOne::BEGIN@7 which was called:
#    once (9µs+30µs) by Class::C3::Componentised::ensure_class_loaded at line 7 # spent    40µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@7
# spent    30µs making 1 call to Exporter::import  | ||
| 8 | 2 | 235µs | # spent 122µs (8+113) within DBIx::Class::Relationship::HasOne::BEGIN@8 which was called:
#    once (8µs+113µs) by Class::C3::Componentised::ensure_class_loaded at line 8 # spent   122µs making 1 call to DBIx::Class::Relationship::HasOne::BEGIN@8
# spent   113µ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.61ms (69µs+2.54) within DBIx::Class::Relationship::HasOne::might_have which was called 11 times, avg 237µs/call:
#    once (9µs+371µs) by Class::C3::Componentised::ensure_class_loaded at line 160 of Koha/Schema/Result/Itemtype.pm
#    once (9µs+274µs) by Class::C3::Componentised::ensure_class_loaded at line 393 of Koha/Schema/Result/Branch.pm
#    once (5µs+269µs) by Class::C3::Componentised::ensure_class_loaded at line 551 of Koha/Schema/Result/Item.pm
#    once (8µs+247µs) by Class::C3::Componentised::ensure_class_loaded at line 367 of Koha/Schema/Result/Aqorder.pm
#    once (9µs+246µs) by Class::C3::Componentised::ensure_class_loaded at line 248 of Koha/Schema/Result/Category.pm
#    once (8µs+232µs) by Class::C3::Componentised::ensure_class_loaded at line 466 of Koha/Schema/Result/Item.pm
#    once (3µs+216µs) by Class::C3::Componentised::ensure_class_loaded at line 566 of Koha/Schema/Result/Item.pm
#    once (9µs+193µs) by Class::C3::Componentised::ensure_class_loaded at line 981 of Koha/Schema/Result/Borrower.pm
#    once (3µs+168µs) by Class::C3::Componentised::ensure_class_loaded at line 496 of Koha/Schema/Result/Item.pm
#    once (2µs+167µs) by Class::C3::Componentised::ensure_class_loaded at line 382 of Koha/Schema/Result/Aqorder.pm
#    once (3µs+158µs) by Class::C3::Componentised::ensure_class_loaded at line 626 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 231µs/call  | ||
| 17 | } | ||||
| 18 | |||||
| 19 | sub has_one { | ||||
| 20 | shift->_has_one(undef() => @_); | ||||
| 21 | } | ||||
| 22 | |||||
| 23 | # spent 2.54ms (212µs+2.33) within DBIx::Class::Relationship::HasOne::_has_one which was called 11 times, avg 231µs/call:
# 11 times (212µs+2.33ms) by DBIx::Class::Relationship::HasOne::might_have at line 16, avg 231µ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 | 816µs |   $class->_validate_has_one_condition($cond);   # spent   816µs making 11 calls to DBIx::Class::Relationship::HasOne::_validate_has_one_condition, avg 74µ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.51ms |      %{$attrs || {}} });      # spent  1.51ms making 11 calls to DBIx::Class::ResultSourceProxy::add_relationship, avg 138µs/call  | ||
| 83 | 1; | ||||
| 84 | } | ||||
| 85 | |||||
| 86 | # spent 816µs (381+435) within DBIx::Class::Relationship::HasOne::_validate_has_one_condition which was called 11 times, avg 74µs/call:
# 11 times (381µs+435µs) by DBIx::Class::Relationship::HasOne::_has_one at line 71, avg 74µ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 | 202µs |     $class->throw_exception("Defining rel on ${class} that includes '$key' but no such column defined here yet")     # spent   202µs making 11 calls to DBIx::Class::ResultSourceProxy::has_column, avg 18µs/call  | ||
| 100 | unless $class->has_column($key); | ||||
| 101 | 11 | 196µs |     my $column_info = $class->column_info($key);     # spent   196µs making 11 calls to DBIx::Class::ResultSourceProxy::column_info, avg 18µ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 | 145µs | 1; # spent   145µ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  |