← Index
NYTProf Performance Profile   « line view »
For starman worker -M FindBin --max-requests 50 --workers 2 --user=kohadev-koha --group kohadev-koha --pid /var/run/koha/kohadev/plack.pid --daemonize --access-log /var/log/koha/kohadev/plack.log --error-log /var/log/koha/kohadev/plack-error.log -E deployment --socket /var/run/koha/kohadev/plack.sock /etc/koha/sites/kohadev/plack.psgi
  Run on Fri Jan 8 13:01:18 2016
Reported on Fri Jan 8 13:01:35 2016

Filename/usr/share/perl5/DBIx/Class/Relationship/ManyToMany.pm
StatementsExecuted 308 statements in 3.38ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
12129793µs1.72msDBIx::Class::Relationship::ManyToMany::::many_to_many DBIx::Class::Relationship::ManyToMany::many_to_many
11116µs24µsDBIx::Class::Relationship::ManyToMany::::BEGIN@4 DBIx::Class::Relationship::ManyToMany::BEGIN@4
11115µs37µsDBIx::Class::Relationship::ManyToMany::::BEGIN@10 DBIx::Class::Relationship::ManyToMany::BEGIN@10
11112µs19µsDBIx::Class::Relationship::ManyToMany::::BEGIN@30 DBIx::Class::Relationship::ManyToMany::BEGIN@30
11111µs40µsDBIx::Class::Relationship::ManyToMany::::BEGIN@8 DBIx::Class::Relationship::ManyToMany::BEGIN@8
11110µs28µsDBIx::Class::Relationship::ManyToMany::::BEGIN@9 DBIx::Class::Relationship::ManyToMany::BEGIN@9
1119µs139µsDBIx::Class::Relationship::ManyToMany::::BEGIN@11 DBIx::Class::Relationship::ManyToMany::BEGIN@11
1119µs26µsDBIx::Class::Relationship::ManyToMany::::BEGIN@31 DBIx::Class::Relationship::ManyToMany::BEGIN@31
1119µs43µsDBIx::Class::Relationship::ManyToMany::::BEGIN@7 DBIx::Class::Relationship::ManyToMany::BEGIN@7
1118µs13µsDBIx::Class::Relationship::ManyToMany::::BEGIN@5 DBIx::Class::Relationship::ManyToMany::BEGIN@5
0000s0sDBIx::Class::Relationship::ManyToMany::::__ANON__[:109] DBIx::Class::Relationship::ManyToMany::__ANON__[:109]
0000s0sDBIx::Class::Relationship::ManyToMany::::__ANON__[:127] DBIx::Class::Relationship::ManyToMany::__ANON__[:127]
0000s0sDBIx::Class::Relationship::ManyToMany::::__ANON__[:146] DBIx::Class::Relationship::ManyToMany::__ANON__[:146]
0000s0sDBIx::Class::Relationship::ManyToMany::::__ANON__[:70] DBIx::Class::Relationship::ManyToMany::__ANON__[:70]
0000s0sDBIx::Class::Relationship::ManyToMany::::__ANON__[:78] DBIx::Class::Relationship::ManyToMany::__ANON__[:78]
0000s0sKoha::Schema::Result::Aqbasket::::add_to_borrowernumbers Koha::Schema::Result::Aqbasket::add_to_borrowernumbers
0000s0sKoha::Schema::Result::Aqbasket::::borrowernumbers Koha::Schema::Result::Aqbasket::borrowernumbers
0000s0sKoha::Schema::Result::Aqbasket::::borrowernumbers_rs Koha::Schema::Result::Aqbasket::borrowernumbers_rs
0000s0sKoha::Schema::Result::Aqbasket::::remove_from_borrowernumbers Koha::Schema::Result::Aqbasket::remove_from_borrowernumbers
0000s0sKoha::Schema::Result::Aqbasket::::set_borrowernumbers Koha::Schema::Result::Aqbasket::set_borrowernumbers
0000s0sKoha::Schema::Result::Aqbudget::::add_to_borrowernumbers Koha::Schema::Result::Aqbudget::add_to_borrowernumbers
0000s0sKoha::Schema::Result::Aqbudget::::borrowernumbers Koha::Schema::Result::Aqbudget::borrowernumbers
0000s0sKoha::Schema::Result::Aqbudget::::borrowernumbers_rs Koha::Schema::Result::Aqbudget::borrowernumbers_rs
0000s0sKoha::Schema::Result::Aqbudget::::remove_from_borrowernumbers Koha::Schema::Result::Aqbudget::remove_from_borrowernumbers
0000s0sKoha::Schema::Result::Aqbudget::::set_borrowernumbers Koha::Schema::Result::Aqbudget::set_borrowernumbers
0000s0sKoha::Schema::Result::Aqorder::::add_to_borrowernumbers Koha::Schema::Result::Aqorder::add_to_borrowernumbers
0000s0sKoha::Schema::Result::Aqorder::::borrowernumbers Koha::Schema::Result::Aqorder::borrowernumbers
0000s0sKoha::Schema::Result::Aqorder::::borrowernumbers_rs Koha::Schema::Result::Aqorder::borrowernumbers_rs
0000s0sKoha::Schema::Result::Aqorder::::remove_from_borrowernumbers Koha::Schema::Result::Aqorder::remove_from_borrowernumbers
0000s0sKoha::Schema::Result::Aqorder::::set_borrowernumbers Koha::Schema::Result::Aqorder::set_borrowernumbers
0000s0sKoha::Schema::Result::Borrower::::add_to_basketnoes Koha::Schema::Result::Borrower::add_to_basketnoes
0000s0sKoha::Schema::Result::Borrower::::add_to_budgets Koha::Schema::Result::Borrower::add_to_budgets
0000s0sKoha::Schema::Result::Borrower::::add_to_courses Koha::Schema::Result::Borrower::add_to_courses
0000s0sKoha::Schema::Result::Borrower::::add_to_ordernumbers Koha::Schema::Result::Borrower::add_to_ordernumbers
0000s0sKoha::Schema::Result::Borrower::::basketnoes Koha::Schema::Result::Borrower::basketnoes
0000s0sKoha::Schema::Result::Borrower::::basketnoes_rs Koha::Schema::Result::Borrower::basketnoes_rs
0000s0sKoha::Schema::Result::Borrower::::budgets Koha::Schema::Result::Borrower::budgets
0000s0sKoha::Schema::Result::Borrower::::budgets_rs Koha::Schema::Result::Borrower::budgets_rs
0000s0sKoha::Schema::Result::Borrower::::courses Koha::Schema::Result::Borrower::courses
0000s0sKoha::Schema::Result::Borrower::::courses_rs Koha::Schema::Result::Borrower::courses_rs
0000s0sKoha::Schema::Result::Borrower::::ordernumbers Koha::Schema::Result::Borrower::ordernumbers
0000s0sKoha::Schema::Result::Borrower::::ordernumbers_rs Koha::Schema::Result::Borrower::ordernumbers_rs
0000s0sKoha::Schema::Result::Borrower::::remove_from_basketnoes Koha::Schema::Result::Borrower::remove_from_basketnoes
0000s0sKoha::Schema::Result::Borrower::::remove_from_budgets Koha::Schema::Result::Borrower::remove_from_budgets
0000s0sKoha::Schema::Result::Borrower::::remove_from_courses Koha::Schema::Result::Borrower::remove_from_courses
0000s0sKoha::Schema::Result::Borrower::::remove_from_ordernumbers Koha::Schema::Result::Borrower::remove_from_ordernumbers
0000s0sKoha::Schema::Result::Borrower::::set_basketnoes Koha::Schema::Result::Borrower::set_basketnoes
0000s0sKoha::Schema::Result::Borrower::::set_budgets Koha::Schema::Result::Borrower::set_budgets
0000s0sKoha::Schema::Result::Borrower::::set_courses Koha::Schema::Result::Borrower::set_courses
0000s0sKoha::Schema::Result::Borrower::::set_ordernumbers Koha::Schema::Result::Borrower::set_ordernumbers
0000s0sKoha::Schema::Result::BorrowerMessagePreference::::add_to_message_transport_typesKoha::Schema::Result::BorrowerMessagePreference::add_to_message_transport_types
0000s0sKoha::Schema::Result::BorrowerMessagePreference::::message_transport_typesKoha::Schema::Result::BorrowerMessagePreference::message_transport_types
0000s0sKoha::Schema::Result::BorrowerMessagePreference::::message_transport_types_rsKoha::Schema::Result::BorrowerMessagePreference::message_transport_types_rs
0000s0sKoha::Schema::Result::BorrowerMessagePreference::::remove_from_message_transport_typesKoha::Schema::Result::BorrowerMessagePreference::remove_from_message_transport_types
0000s0sKoha::Schema::Result::BorrowerMessagePreference::::set_message_transport_typesKoha::Schema::Result::BorrowerMessagePreference::set_message_transport_types
0000s0sKoha::Schema::Result::Branch::::add_to_categorycodes Koha::Schema::Result::Branch::add_to_categorycodes
0000s0sKoha::Schema::Result::Branch::::categorycodes Koha::Schema::Result::Branch::categorycodes
0000s0sKoha::Schema::Result::Branch::::categorycodes_rs Koha::Schema::Result::Branch::categorycodes_rs
0000s0sKoha::Schema::Result::Branch::::remove_from_categorycodes Koha::Schema::Result::Branch::remove_from_categorycodes
0000s0sKoha::Schema::Result::Branch::::set_categorycodes Koha::Schema::Result::Branch::set_categorycodes
0000s0sKoha::Schema::Result::Branchcategory::::add_to_branchcodes Koha::Schema::Result::Branchcategory::add_to_branchcodes
0000s0sKoha::Schema::Result::Branchcategory::::branchcodes Koha::Schema::Result::Branchcategory::branchcodes
0000s0sKoha::Schema::Result::Branchcategory::::branchcodes_rs Koha::Schema::Result::Branchcategory::branchcodes_rs
0000s0sKoha::Schema::Result::Branchcategory::::remove_from_branchcodes Koha::Schema::Result::Branchcategory::remove_from_branchcodes
0000s0sKoha::Schema::Result::Branchcategory::::set_branchcodes Koha::Schema::Result::Branchcategory::set_branchcodes
0000s0sKoha::Schema::Result::Course::::add_to_borrowernumbers Koha::Schema::Result::Course::add_to_borrowernumbers
0000s0sKoha::Schema::Result::Course::::borrowernumbers Koha::Schema::Result::Course::borrowernumbers
0000s0sKoha::Schema::Result::Course::::borrowernumbers_rs Koha::Schema::Result::Course::borrowernumbers_rs
0000s0sKoha::Schema::Result::Course::::remove_from_borrowernumbers Koha::Schema::Result::Course::remove_from_borrowernumbers
0000s0sKoha::Schema::Result::Course::::set_borrowernumbers Koha::Schema::Result::Course::set_borrowernumbers
0000s0sKoha::Schema::Result::MessageTransportType::::add_to_borrower_message_preferences Koha::Schema::Result::MessageTransportType::add_to_borrower_message_preferences
0000s0sKoha::Schema::Result::MessageTransportType::::borrower_message_preferences Koha::Schema::Result::MessageTransportType::borrower_message_preferences
0000s0sKoha::Schema::Result::MessageTransportType::::borrower_message_preferences_rs Koha::Schema::Result::MessageTransportType::borrower_message_preferences_rs
0000s0sKoha::Schema::Result::MessageTransportType::::remove_from_borrower_message_preferences Koha::Schema::Result::MessageTransportType::remove_from_borrower_message_preferences
0000s0sKoha::Schema::Result::MessageTransportType::::set_borrower_message_preferences Koha::Schema::Result::MessageTransportType::set_borrower_message_preferences
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package # hide from PAUSE
2 DBIx::Class::Relationship::ManyToMany;
3
4239µs232µs
# spent 24µs (16+8) within DBIx::Class::Relationship::ManyToMany::BEGIN@4 which was called: # once (16µs+8µs) by Class::C3::Componentised::ensure_class_loaded at line 4
use strict;
# spent 24µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@4 # spent 8µs making 1 call to strict::import
5231µs218µs
# spent 13µs (8+5) within DBIx::Class::Relationship::ManyToMany::BEGIN@5 which was called: # once (8µs+5µs) by Class::C3::Componentised::ensure_class_loaded at line 5
use warnings;
# spent 13µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@5 # spent 5µs making 1 call to warnings::import
6
7232µs276µs
# spent 43µs (9+34) within DBIx::Class::Relationship::ManyToMany::BEGIN@7 which was called: # once (9µs+34µs) by Class::C3::Componentised::ensure_class_loaded at line 7
use DBIx::Class::Carp;
# spent 43µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@7 # spent 34µs making 1 call to DBIx::Class::Carp::import
8260µs268µs
# spent 40µs (11+29) within DBIx::Class::Relationship::ManyToMany::BEGIN@8 which was called: # once (11µs+29µs) by Class::C3::Componentised::ensure_class_loaded at line 8
use Sub::Name 'subname';
# spent 40µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@8 # spent 29µs making 1 call to Exporter::import
9252µs246µs
# spent 28µs (10+18) within DBIx::Class::Relationship::ManyToMany::BEGIN@9 which was called: # once (10µs+18µs) by Class::C3::Componentised::ensure_class_loaded at line 9
use Scalar::Util 'blessed';
# spent 28µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@9 # spent 18µs making 1 call to Exporter::import
10262µs259µs
# spent 37µs (15+22) within DBIx::Class::Relationship::ManyToMany::BEGIN@10 which was called: # once (15µs+22µs) by Class::C3::Componentised::ensure_class_loaded at line 10
use DBIx::Class::_Util 'fail_on_internal_wantarray';
# spent 37µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@10 # spent 22µs making 1 call to Exporter::import
112244µs2268µs
# spent 139µs (9+129) within DBIx::Class::Relationship::ManyToMany::BEGIN@11 which was called: # once (9µs+129µs) by Class::C3::Componentised::ensure_class_loaded at line 11
use namespace::clean;
# spent 139µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@11 # spent 129µs making 1 call to namespace::clean::import
12
1312µsour %_pod_inherit_config =
14 (
15 class_map => { 'DBIx::Class::Relationship::ManyToMany' => 'DBIx::Class::Relationship' }
16 );
17
18
# spent 1.72ms (793µs+932µs) within DBIx::Class::Relationship::ManyToMany::many_to_many which was called 12 times, avg 144µs/call: # once (97µs+102µs) by Class::C3::Componentised::ensure_class_loaded at line 146 of Koha/Schema/Result/MessageTransportType.pm # once (79µs+95µs) by Class::C3::Componentised::ensure_class_loaded at line 268 of Koha/Schema/Result/Aqbudget.pm # once (83µs+79µs) by Class::C3::Componentised::ensure_class_loaded at line 185 of Koha/Schema/Result/BorrowerMessagePreference.pm # once (81µs+76µs) by Class::C3::Componentised::ensure_class_loaded at line 274 of Koha/Schema/Result/Aqbasket.pm # once (64µs+83µs) by Class::C3::Componentised::ensure_class_loaded at line 1146 of Koha/Schema/Result/Borrower.pm # once (71µs+73µs) by Class::C3::Componentised::ensure_class_loaded at line 513 of Koha/Schema/Result/Branch.pm # once (64µs+79µs) by Class::C3::Componentised::ensure_class_loaded at line 492 of Koha/Schema/Result/Aqorder.pm # once (72µs+69µs) by Class::C3::Componentised::ensure_class_loaded at line 108 of Koha/Schema/Result/Branchcategory.pm # once (57µs+78µs) by Class::C3::Componentised::ensure_class_loaded at line 181 of Koha/Schema/Result/Course.pm # once (44µs+64µs) by Class::C3::Componentised::ensure_class_loaded at line 1176 of Koha/Schema/Result/Borrower.pm # once (40µs+67µs) by Class::C3::Componentised::ensure_class_loaded at line 1166 of Koha/Schema/Result/Borrower.pm # once (40µs+65µs) by Class::C3::Componentised::ensure_class_loaded at line 1156 of Koha/Schema/Result/Borrower.pm
sub many_to_many {
191211µs my ($class, $meth, $rel, $f_rel, $rel_attrs) = @_;
20
21123µs $class->throw_exception(
22 "missing relation in many-to-many"
23 ) unless $rel;
24
25122µs $class->throw_exception(
26 "missing foreign relation in many-to-many"
27 ) unless $f_rel;
28
29 {
3014104µs227µs
# spent 19µs (12+8) within DBIx::Class::Relationship::ManyToMany::BEGIN@30 which was called: # once (12µs+8µs) by Class::C3::Componentised::ensure_class_loaded at line 30
no strict 'refs';
# spent 19µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@30 # spent 8µs making 1 call to strict::unimport
3121.05ms243µs
# spent 26µs (9+17) within DBIx::Class::Relationship::ManyToMany::BEGIN@31 which was called: # once (9µs+17µs) by Class::C3::Componentised::ensure_class_loaded at line 31
no warnings 'redefine';
# spent 26µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@31 # spent 17µs making 1 call to warnings::unimport
32
331213µs my $add_meth = "add_to_${meth}";
341211µs my $remove_meth = "remove_from_${meth}";
35129µs my $set_meth = "set_${meth}";
36129µs my $rs_meth = "${meth}_rs";
37
381213µs for ($add_meth, $remove_meth, $set_meth, $rs_meth) {
3948859µs48689µs if ( $class->can ($_) ) {
# spent 689µs making 48 calls to UNIVERSAL::can, avg 14µs/call
40 carp (<<"EOW") unless $ENV{DBIC_OVERWRITE_HELPER_METHODS_OK};
41
42***************************************************************************
43The many-to-many relationship '$meth' is trying to create a utility method
44called $_.
45This will completely overwrite one such already existing method on class
46$class.
47
48You almost certainly want to rename your method or the many-to-many
49relationship, as the functionality of the original method will not be
50accessible anymore.
51
52To disable this warning set to a true value the environment variable
53DBIC_OVERWRITE_HELPER_METHODS_OK
54
55***************************************************************************
56EOW
57 }
58 }
59
601218µs $rel_attrs->{alias} ||= $f_rel;
61
621214µs my $rs_meth_name = join '::', $class, $rs_meth;
63 *$rs_meth_name = subname $rs_meth_name, sub {
64 my $self = shift;
65 my $attrs = @_ > 1 && ref $_[$#_] eq 'HASH' ? pop(@_) : {};
66 my $rs = $self->search_related($rel)->search_related(
67 $f_rel, @_ > 0 ? @_ : undef, { %{$rel_attrs||{}}, %$attrs }
68 );
69 return $rs;
7012138µs1254µs };
# spent 54µs making 12 calls to Sub::Name::subname, avg 4µs/call
71
721211µs my $meth_name = join '::', $class, $meth;
73 *$meth_name = subname $meth_name, sub {
74 DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY and my $sog = fail_on_internal_wantarray;
75 my $self = shift;
76 my $rs = $self->$rs_meth( @_ );
77 return (wantarray ? $rs->all : $rs);
7812119µs1244µs };
# spent 44µs making 12 calls to Sub::Name::subname, avg 4µs/call
79
801211µs my $add_meth_name = join '::', $class, $add_meth;
81 *$add_meth_name = subname $add_meth_name, sub {
82 my $self = shift;
83 @_ > 0 or $self->throw_exception(
84 "${add_meth} needs an object or hashref"
85 );
86 my $source = $self->result_source;
87 my $schema = $source->schema;
88 my $rel_source_name = $source->relationship_info($rel)->{source};
89 my $rel_source = $schema->resultset($rel_source_name)->result_source;
90 my $f_rel_source_name = $rel_source->relationship_info($f_rel)->{source};
91 my $f_rel_rs = $schema->resultset($f_rel_source_name)->search({}, $rel_attrs||{});
92
93 my $obj;
94 if (ref $_[0]) {
95 if (ref $_[0] eq 'HASH') {
96 $obj = $f_rel_rs->find_or_create($_[0]);
97 } else {
98 $obj = $_[0];
99 }
100 } else {
101 $obj = $f_rel_rs->find_or_create({@_});
102 }
103
104 my $link_vals = @_ > 1 && ref $_[$#_] eq 'HASH' ? pop(@_) : {};
105 my $link = $self->search_related($rel)->new_result($link_vals);
106 $link->set_from_related($f_rel, $obj);
107 $link->insert();
108 return $obj;
10912153µs1257µs };
# spent 57µs making 12 calls to Sub::Name::subname, avg 5µs/call
110
1111210µs my $set_meth_name = join '::', $class, $set_meth;
112 *$set_meth_name = subname $set_meth_name, sub {
113 my $self = shift;
114 @_ > 0 or $self->throw_exception(
115 "{$set_meth} needs a list of objects or hashrefs"
116 );
117 my @to_set = (ref($_[0]) eq 'ARRAY' ? @{ $_[0] } : @_);
118 # if there is a where clause in the attributes, ensure we only delete
119 # rows that are within the where restriction
120 if ($rel_attrs && $rel_attrs->{where}) {
121 $self->search_related( $rel, $rel_attrs->{where},{join => $f_rel})->delete;
122 } else {
123 $self->search_related( $rel, {} )->delete;
124 }
125 # add in the set rel objects
126 $self->$add_meth($_, ref($_[1]) ? $_[1] : {}) for (@to_set);
12712122µs1245µs };
# spent 45µs making 12 calls to Sub::Name::subname, avg 4µs/call
128
129129µs my $remove_meth_name = join '::', $class, $remove_meth;
130 *$remove_meth_name = subname $remove_meth_name, sub {
131 my ($self, $obj) = @_;
132 $self->throw_exception("${remove_meth} needs an object")
133 unless blessed ($obj);
134 my $rel_source = $self->search_related($rel)->result_source;
135 my $cond = $rel_source->relationship_info($f_rel)->{cond};
136 my ($link_cond, $crosstable) = $rel_source->_resolve_condition(
137 $cond, $obj, $f_rel, $f_rel
138 );
139
140 $self->throw_exception(
141 "Relationship '$rel' does not resolve to a join-free condition, "
142 ."unable to use with the ManyToMany helper '$f_rel'"
143 ) if $crosstable;
144
145 $self->search_related($rel, $link_cond)->delete;
14612162µs1242µs };
# spent 42µs making 12 calls to Sub::Name::subname, avg 4µs/call
147
148 }
149}
150
15114µs1168µs1;
# spent 168µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__