← 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 14:16:49 2016
Reported on Fri Jan 8 14:23:08 2016

Filename/usr/share/perl5/DBIx/Class/Relationship/ManyToMany.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
121291.43ms7.20msDBIx::Class::Relationship::ManyToMany::::many_to_many DBIx::Class::Relationship::ManyToMany::many_to_many
11114µs21µsDBIx::Class::Relationship::ManyToMany::::BEGIN@4 DBIx::Class::Relationship::ManyToMany::BEGIN@4
11114µs28µsDBIx::Class::Relationship::ManyToMany::::BEGIN@10 DBIx::Class::Relationship::ManyToMany::BEGIN@10
11110µs26µsDBIx::Class::Relationship::ManyToMany::::BEGIN@9 DBIx::Class::Relationship::ManyToMany::BEGIN@9
1119µs31µsDBIx::Class::Relationship::ManyToMany::::BEGIN@8 DBIx::Class::Relationship::ManyToMany::BEGIN@8
1119µs16µsDBIx::Class::Relationship::ManyToMany::::BEGIN@30 DBIx::Class::Relationship::ManyToMany::BEGIN@30
1118µs114µsDBIx::Class::Relationship::ManyToMany::::BEGIN@11 DBIx::Class::Relationship::ManyToMany::BEGIN@11
1118µs23µsDBIx::Class::Relationship::ManyToMany::::BEGIN@31 DBIx::Class::Relationship::ManyToMany::BEGIN@31
1117µs36µsDBIx::Class::Relationship::ManyToMany::::BEGIN@7 DBIx::Class::Relationship::ManyToMany::BEGIN@7
1117µs11µ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
4227µs
# spent 21µs (14+7) within DBIx::Class::Relationship::ManyToMany::BEGIN@4 which was called: # once (14µs+7µs) by Class::C3::Componentised::ensure_class_loaded at line 4
use strict;
# spent 21µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@4 # spent 7µs making 1 call to strict::import
5216µs
# spent 11µs (7+4) within DBIx::Class::Relationship::ManyToMany::BEGIN@5 which was called: # once (7µs+4µs) by Class::C3::Componentised::ensure_class_loaded at line 5
use warnings;
# spent 11µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@5 # spent 4µs making 1 call to warnings::import
6
7264µs
# spent 36µs (7+29) within DBIx::Class::Relationship::ManyToMany::BEGIN@7 which was called: # once (7µs+29µs) by Class::C3::Componentised::ensure_class_loaded at line 7
use DBIx::Class::Carp;
# spent 36µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@7 # spent 29µs making 1 call to DBIx::Class::Carp::import
8252µs
# spent 31µs (9+21) within DBIx::Class::Relationship::ManyToMany::BEGIN@8 which was called: # once (9µs+21µs) by Class::C3::Componentised::ensure_class_loaded at line 8
use Sub::Name 'subname';
# spent 31µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@8 # spent 21µs making 1 call to Exporter::import
9243µs
# spent 26µs (10+17) within DBIx::Class::Relationship::ManyToMany::BEGIN@9 which was called: # once (10µs+17µs) by Class::C3::Componentised::ensure_class_loaded at line 9
use Scalar::Util 'blessed';
# spent 26µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@9 # spent 17µs making 1 call to Exporter::import
10243µs
# spent 28µs (14+15) within DBIx::Class::Relationship::ManyToMany::BEGIN@10 which was called: # once (14µs+15µs) by Class::C3::Componentised::ensure_class_loaded at line 10
use DBIx::Class::_Util 'fail_on_internal_wantarray';
# spent 28µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@10 # spent 15µs making 1 call to Exporter::import
112220µs
# spent 114µs (8+106) within DBIx::Class::Relationship::ManyToMany::BEGIN@11 which was called: # once (8µs+106µs) by Class::C3::Componentised::ensure_class_loaded at line 11
use namespace::clean;
# spent 114µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@11 # spent 106µs making 1 call to namespace::clean::import
12
13our %_pod_inherit_config =
14 (
15 class_map => { 'DBIx::Class::Relationship::ManyToMany' => 'DBIx::Class::Relationship' }
16 );
17
18
# spent 7.20ms (1.43+5.77) within DBIx::Class::Relationship::ManyToMany::many_to_many which was called 12 times, avg 600µs/call: # once (678µs+4.90ms) by Class::C3::Componentised::ensure_class_loaded at line 1156 of Koha/Schema/Result/Borrower.pm # once (90µs+85µs) by Class::C3::Componentised::ensure_class_loaded at line 513 of Koha/Schema/Result/Branch.pm # once (81µs+80µs) by Class::C3::Componentised::ensure_class_loaded at line 268 of Koha/Schema/Result/Aqbudget.pm # once (68µs+90µs) by Class::C3::Componentised::ensure_class_loaded at line 1166 of Koha/Schema/Result/Borrower.pm # once (78µs+73µs) by Class::C3::Componentised::ensure_class_loaded at line 108 of Koha/Schema/Result/Branchcategory.pm # once (66µs+84µs) by Class::C3::Componentised::ensure_class_loaded at line 1146 of Koha/Schema/Result/Borrower.pm # once (63µs+84µs) by Class::C3::Componentised::ensure_class_loaded at line 146 of Koha/Schema/Result/MessageTransportType.pm # once (71µs+72µs) by Class::C3::Componentised::ensure_class_loaded at line 274 of Koha/Schema/Result/Aqbasket.pm # once (64µs+78µs) by Class::C3::Componentised::ensure_class_loaded at line 181 of Koha/Schema/Result/Course.pm # once (62µs+79µs) by Class::C3::Componentised::ensure_class_loaded at line 185 of Koha/Schema/Result/BorrowerMessagePreference.pm # once (68µs+71µs) by Class::C3::Componentised::ensure_class_loaded at line 492 of Koha/Schema/Result/Aqorder.pm # once (43µs+74µs) by Class::C3::Componentised::ensure_class_loaded at line 1176 of Koha/Schema/Result/Borrower.pm
sub many_to_many {
19 my ($class, $meth, $rel, $f_rel, $rel_attrs) = @_;
20
21 $class->throw_exception(
22 "missing relation in many-to-many"
23 ) unless $rel;
24
25 $class->throw_exception(
26 "missing foreign relation in many-to-many"
27 ) unless $f_rel;
28
29 {
30222µs
# spent 16µs (9+7) within DBIx::Class::Relationship::ManyToMany::BEGIN@30 which was called: # once (9µs+7µs) by Class::C3::Componentised::ensure_class_loaded at line 30
no strict 'refs';
# spent 16µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@30 # spent 7µs making 1 call to strict::unimport
31238µs
# spent 23µs (8+15) within DBIx::Class::Relationship::ManyToMany::BEGIN@31 which was called: # once (8µs+15µs) by Class::C3::Componentised::ensure_class_loaded at line 31
no warnings 'redefine';
# spent 23µs making 1 call to DBIx::Class::Relationship::ManyToMany::BEGIN@31 # spent 15µs making 1 call to warnings::unimport
32
33 my $add_meth = "add_to_${meth}";
34 my $remove_meth = "remove_from_${meth}";
35 my $set_meth = "set_${meth}";
36 my $rs_meth = "${meth}_rs";
37
38 for ($add_meth, $remove_meth, $set_meth, $rs_meth) {
3948697µs if ( $class->can ($_) ) {
# spent 697µs making 48 calls to UNIVERSAL::can, avg 15µ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
60 $rel_attrs->{alias} ||= $f_rel;
61
62 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;
701258µs };
# spent 58µs making 12 calls to Sub::Name::subname, avg 5µs/call
71
72 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);
781248µs };
# spent 48µs making 12 calls to Sub::Name::subname, avg 4µs/call
79
80 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;
109124.77ms };
# spent 4.77ms making 12 calls to Sub::Name::subname, avg 398µs/call
110
111 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);
12712141µs };
# spent 141µs making 12 calls to Sub::Name::subname, avg 12µs/call
128
129 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;
1461247µs };
# spent 47µs making 12 calls to Sub::Name::subname, avg 4µs/call
147
148 }
149}
150
1511166µs1;
# spent 166µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__