Filename | /2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Storage/DBI/Cursor.pm |
Statements | Executed 103926 statements in 449ms |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
4273 | 1 | 1 | 117ms | 4.59s | _dbh_next | DBIx::Class::Storage::DBI::Cursor::
4699 | 1 | 1 | 52.6ms | 52.6ms | new | DBIx::Class::Storage::DBI::Cursor::
4273 | 3 | 3 | 45.2ms | 4.92s | next | DBIx::Class::Storage::DBI::Cursor::
1610 | 1 | 1 | 39.1ms | 2.21s | _dbh_all | DBIx::Class::Storage::DBI::Cursor::
4699 | 22 | 9 | 39.1ms | 91.8ms | DESTROY | DBIx::Class::Storage::DBI::Cursor::
5883 | 2 | 1 | 19.9ms | 19.9ms | _check_dbh_gen | DBIx::Class::Storage::DBI::Cursor::
1610 | 1 | 1 | 19.9ms | 2.34s | all | DBIx::Class::Storage::DBI::Cursor::
2100 | 1 | 1 | 12.1ms | 18.5ms | __ANON__[:182] | DBIx::Class::Storage::DBI::Cursor::
148 | 1 | 1 | 1.17ms | 1.80ms | reset | DBIx::Class::Storage::DBI::Cursor::
148 | 1 | 1 | 637µs | 638µs | _soft_reset | DBIx::Class::Storage::DBI::Cursor::
1 | 1 | 1 | 19µs | 24µs | BEGIN@3 | DBIx::Class::Storage::DBI::Cursor::
1 | 1 | 1 | 10µs | 26µs | BEGIN@4 | DBIx::Class::Storage::DBI::Cursor::
1 | 1 | 1 | 9µs | 60µs | BEGIN@8 | DBIx::Class::Storage::DBI::Cursor::
1 | 1 | 1 | 9µs | 198µs | BEGIN@9 | DBIx::Class::Storage::DBI::Cursor::
1 | 1 | 1 | 8µs | 406µs | BEGIN@6 | DBIx::Class::Storage::DBI::Cursor::
0 | 0 | 0 | 0s | 0s | __ANON__[:156] | DBIx::Class::Storage::DBI::Cursor::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package DBIx::Class::Storage::DBI::Cursor; | ||||
2 | |||||
3 | 3 | 23µs | 2 | 29µs | # spent 24µs (19+5) within DBIx::Class::Storage::DBI::Cursor::BEGIN@3 which was called:
# once (19µs+5µs) by Class::C3::Componentised::ensure_class_loaded at line 3 # spent 24µs making 1 call to DBIx::Class::Storage::DBI::Cursor::BEGIN@3
# spent 5µs making 1 call to strict::import |
4 | 3 | 27µs | 2 | 42µs | # spent 26µs (10+16) within DBIx::Class::Storage::DBI::Cursor::BEGIN@4 which was called:
# once (10µs+16µs) by Class::C3::Componentised::ensure_class_loaded at line 4 # spent 26µs making 1 call to DBIx::Class::Storage::DBI::Cursor::BEGIN@4
# spent 16µs making 1 call to warnings::import |
5 | |||||
6 | 3 | 22µs | 2 | 804µs | # spent 406µs (8+398) within DBIx::Class::Storage::DBI::Cursor::BEGIN@6 which was called:
# once (8µs+398µs) by Class::C3::Componentised::ensure_class_loaded at line 6 # spent 406µs making 1 call to DBIx::Class::Storage::DBI::Cursor::BEGIN@6
# spent 398µs making 1 call to base::import |
7 | |||||
8 | 3 | 22µs | 2 | 110µs | # spent 60µs (9+50) within DBIx::Class::Storage::DBI::Cursor::BEGIN@8 which was called:
# once (9µs+50µs) by Class::C3::Componentised::ensure_class_loaded at line 8 # spent 60µs making 1 call to DBIx::Class::Storage::DBI::Cursor::BEGIN@8
# spent 50µs making 1 call to Exporter::import |
9 | 3 | 564µs | 2 | 387µs | # spent 198µs (9+189) within DBIx::Class::Storage::DBI::Cursor::BEGIN@9 which was called:
# once (9µs+189µs) by Class::C3::Componentised::ensure_class_loaded at line 9 # spent 198µs making 1 call to DBIx::Class::Storage::DBI::Cursor::BEGIN@9
# spent 189µs making 1 call to namespace::clean::import |
10 | |||||
11 | 1 | 15µs | 1 | 396µs | __PACKAGE__->mk_group_accessors('simple' => # spent 396µs making 1 call to Class::Accessor::Grouped::mk_group_accessors |
12 | qw/sth storage args pos attrs _dbh_gen/ | ||||
13 | ); | ||||
14 | |||||
15 | =head1 NAME | ||||
16 | |||||
17 | DBIx::Class::Storage::DBI::Cursor - Object representing a query cursor on a | ||||
18 | resultset. | ||||
19 | |||||
20 | =head1 SYNOPSIS | ||||
21 | |||||
22 | my $cursor = $schema->resultset('CD')->cursor(); | ||||
23 | my $first_cd = $cursor->next; | ||||
24 | |||||
25 | =head1 DESCRIPTION | ||||
26 | |||||
27 | A Cursor represents a query cursor on a L<DBIx::Class::ResultSet> object. It | ||||
28 | allows for traversing the result set with L</next>, retrieving all results with | ||||
29 | L</all> and resetting the cursor with L</reset>. | ||||
30 | |||||
31 | Usually, you would use the cursor methods built into L<DBIx::Class::ResultSet> | ||||
32 | to traverse it. See L<DBIx::Class::ResultSet/next>, | ||||
33 | L<DBIx::Class::ResultSet/reset> and L<DBIx::Class::ResultSet/all> for more | ||||
34 | information. | ||||
35 | |||||
36 | =head1 METHODS | ||||
37 | |||||
38 | =head2 new | ||||
39 | |||||
40 | Returns a new L<DBIx::Class::Storage::DBI::Cursor> object. | ||||
41 | |||||
42 | =cut | ||||
43 | |||||
44 | # spent 52.6ms within DBIx::Class::Storage::DBI::Cursor::new which was called 4699 times, avg 11µs/call:
# 4699 times (52.6ms+0s) by DBIx::Class::Storage::DBI::select at line 2213 of DBIx/Class/Storage/DBI.pm, avg 11µs/call | ||||
45 | 18796 | 57.5ms | my ($class, $storage, $args, $attrs) = @_; | ||
46 | $class = ref $class if ref $class; | ||||
47 | |||||
48 | my $new = { | ||||
49 | storage => $storage, | ||||
50 | args => $args, | ||||
51 | pos => 0, | ||||
52 | attrs => $attrs, | ||||
53 | _dbh_gen => $storage->{_dbh_gen}, | ||||
54 | }; | ||||
55 | |||||
56 | return bless ($new, $class); | ||||
57 | } | ||||
58 | |||||
59 | =head2 next | ||||
60 | |||||
61 | =over 4 | ||||
62 | |||||
63 | =item Arguments: none | ||||
64 | |||||
65 | =item Return Value: \@row_columns | ||||
66 | |||||
67 | =back | ||||
68 | |||||
69 | Advances the cursor to the next row and returns an array of column | ||||
70 | values (the result of L<DBI/fetchrow_array> method). | ||||
71 | |||||
72 | =cut | ||||
73 | |||||
74 | # spent 4.59s (117ms+4.47) within DBIx::Class::Storage::DBI::Cursor::_dbh_next which was called 4273 times, avg 1.07ms/call:
# 4273 times (117ms+4.47s) by DBIx::Class::Storage::DBI::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Storage/DBI.pm:790] at line 789 of DBIx/Class/Storage/DBI.pm, avg 1.07ms/call | ||||
75 | 42328 | 154ms | my ($storage, $dbh, $self) = @_; | ||
76 | |||||
77 | 4273 | 13.9ms | $self->_check_dbh_gen; # spent 13.9ms making 4273 calls to DBIx::Class::Storage::DBI::Cursor::_check_dbh_gen, avg 3µs/call | ||
78 | if ( | ||||
79 | $self->{attrs}{software_limit} | ||||
80 | && $self->{attrs}{rows} | ||||
81 | && $self->{pos} >= $self->{attrs}{rows} | ||||
82 | ) { | ||||
83 | $self->sth->finish if $self->sth->{Active}; | ||||
84 | $self->sth(undef); | ||||
85 | $self->{done} = 1; | ||||
86 | } | ||||
87 | return if $self->{done}; | ||||
88 | 2 | 174µs | unless ($self->sth) { # spent 174µs making 2 calls to DBIx::Class::Storage::DBI::Cursor::sth, avg 87µs/call | ||
89 | 3090 | 4.42s | $self->sth(($storage->_select(@{$self->{args}}))[1]); # spent 4.42s making 3089 calls to DBIx::Class::Storage::DBI::_select, avg 1.43ms/call
# spent 5µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
90 | if ($self->{attrs}{software_limit}) { | ||||
91 | if (my $offset = $self->{attrs}{offset}) { | ||||
92 | $self->sth->fetch for 1 .. $offset; | ||||
93 | } | ||||
94 | } | ||||
95 | } | ||||
96 | 4272 | 39.7ms | my @row = $self->sth->fetchrow_array; # spent 39.7ms making 4271 calls to DBI::st::fetchrow_array, avg 9µs/call
# spent 2µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
97 | if (@row) { | ||||
98 | $self->{pos}++; | ||||
99 | } else { | ||||
100 | 1 | 1µs | $self->sth(undef); # spent 1µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
101 | $self->{done} = 1; | ||||
102 | } | ||||
103 | return @row; | ||||
104 | } | ||||
105 | |||||
106 | # spent 4.92s (45.2ms+4.87) within DBIx::Class::Storage::DBI::Cursor::next which was called 4273 times, avg 1.15ms/call:
# 2318 times (21.2ms+2.27s) by DBIx::Class::ResultSet::next at line 1209 of DBIx/Class/ResultSet.pm, avg 990µs/call
# 1954 times (23.9ms+2.60s) by DBIx::Class::ResultSetColumn::next at line 161 of DBIx/Class/ResultSetColumn.pm, avg 1.34ms/call
# once (10µs+2.23ms) by DBIx::Class::Schema::Versioned::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Schema/Versioned.pm:752] at line 750 of DBIx/Class/Schema/Versioned.pm | ||||
107 | 8546 | 51.6ms | my ($self) = @_; | ||
108 | 8546 | 4.87s | $self->{storage}->dbh_do($self->can('_dbh_next'), $self); # spent 4.87s making 4273 calls to DBIx::Class::Storage::DBI::dbh_do, avg 1.14ms/call
# spent 8.08ms making 4273 calls to UNIVERSAL::can, avg 2µs/call | ||
109 | } | ||||
110 | |||||
111 | =head2 all | ||||
112 | |||||
113 | =over 4 | ||||
114 | |||||
115 | =item Arguments: none | ||||
116 | |||||
117 | =item Return Value: \@row_columns+ | ||||
118 | |||||
119 | =back | ||||
120 | |||||
121 | Returns a list of arrayrefs of column values for all rows in the | ||||
122 | L<DBIx::Class::ResultSet>. | ||||
123 | |||||
124 | =cut | ||||
125 | |||||
126 | # spent 2.21s (39.1ms+2.17) within DBIx::Class::Storage::DBI::Cursor::_dbh_all which was called 1610 times, avg 1.37ms/call:
# 1610 times (39.1ms+2.17s) by DBIx::Class::Storage::DBI::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Storage/DBI.pm:790] at line 789 of DBIx/Class/Storage/DBI.pm, avg 1.37ms/call | ||||
127 | 9660 | 64.6ms | my ($storage, $dbh, $self) = @_; | ||
128 | |||||
129 | 1610 | 6.05ms | $self->_check_dbh_gen; # spent 6.05ms making 1610 calls to DBIx::Class::Storage::DBI::Cursor::_check_dbh_gen, avg 4µs/call | ||
130 | 1 | 1µs | $self->sth->finish if $self->sth && $self->sth->{Active}; # spent 1µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
131 | 1 | 1µs | $self->sth(undef); # spent 1µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
132 | 1610 | 2.13s | my ($rv, $sth) = $storage->_select(@{$self->{args}}); # spent 2.13s making 1610 calls to DBIx::Class::Storage::DBI::_select, avg 1.33ms/call | ||
133 | 1610 | 26.7ms | return @{$sth->fetchall_arrayref}; # spent 26.7ms making 1610 calls to DBI::st::fetchall_arrayref, avg 17µs/call | ||
134 | } | ||||
135 | |||||
136 | # spent 2.34s (19.9ms+2.32) within DBIx::Class::Storage::DBI::Cursor::all which was called 1610 times, avg 1.46ms/call:
# 1610 times (19.9ms+2.32s) by DBIx::Class::ResultSet::all at line 1651 of DBIx/Class/ResultSet.pm, avg 1.46ms/call | ||||
137 | 4830 | 24.3ms | my ($self) = @_; | ||
138 | if ($self->{attrs}{software_limit} | ||||
139 | && ($self->{attrs}{offset} || $self->{attrs}{rows})) { | ||||
140 | return $self->next::method; | ||||
141 | } | ||||
142 | |||||
143 | 3220 | 2.32s | $self->{storage}->dbh_do($self->can('_dbh_all'), $self); # spent 2.32s making 1610 calls to DBIx::Class::Storage::DBI::dbh_do, avg 1.44ms/call
# spent 4.09ms making 1610 calls to UNIVERSAL::can, avg 3µs/call | ||
144 | } | ||||
145 | |||||
146 | =head2 reset | ||||
147 | |||||
148 | Resets the cursor to the beginning of the L<DBIx::Class::ResultSet>. | ||||
149 | |||||
150 | =cut | ||||
151 | |||||
152 | # spent 1.80ms (1.17+639µs) within DBIx::Class::Storage::DBI::Cursor::reset which was called 148 times, avg 12µs/call:
# 148 times (1.17ms+639µs) by DBIx::Class::ResultSet::reset at line 1679 of DBIx/Class/ResultSet.pm, avg 12µs/call | ||||
153 | 592 | 984µs | my ($self) = @_; | ||
154 | |||||
155 | # No need to care about failures here | ||||
156 | try { $self->sth->finish } | ||||
157 | 1 | 1µs | if $self->sth && $self->sth->{Active}; # spent 1µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
158 | 148 | 638µs | $self->_soft_reset; # spent 638µs making 148 calls to DBIx::Class::Storage::DBI::Cursor::_soft_reset, avg 4µs/call | ||
159 | return undef; | ||||
160 | } | ||||
161 | |||||
162 | # spent 638µs (637+700ns) within DBIx::Class::Storage::DBI::Cursor::_soft_reset which was called 148 times, avg 4µs/call:
# 148 times (637µs+700ns) by DBIx::Class::Storage::DBI::Cursor::reset at line 158, avg 4µs/call | ||||
163 | 592 | 848µs | my ($self) = @_; | ||
164 | |||||
165 | 1 | 700ns | $self->sth(undef); # spent 700ns making 1 call to DBIx::Class::Storage::DBI::Cursor::sth | ||
166 | delete $self->{done}; | ||||
167 | $self->{pos} = 0; | ||||
168 | } | ||||
169 | |||||
170 | # spent 19.9ms within DBIx::Class::Storage::DBI::Cursor::_check_dbh_gen which was called 5883 times, avg 3µs/call:
# 4273 times (13.9ms+0s) by DBIx::Class::Storage::DBI::Cursor::_dbh_next at line 77, avg 3µs/call
# 1610 times (6.05ms+0s) by DBIx::Class::Storage::DBI::Cursor::_dbh_all at line 129, avg 4µs/call | ||||
171 | 11766 | 28.5ms | my ($self) = @_; | ||
172 | |||||
173 | if($self->{_dbh_gen} != $self->{storage}->{_dbh_gen}) { | ||||
174 | $self->{_dbh_gen} = $self->{storage}->{_dbh_gen}; | ||||
175 | $self->_soft_reset; | ||||
176 | } | ||||
177 | } | ||||
178 | |||||
179 | # spent 91.8ms (39.1+52.7) within DBIx::Class::Storage::DBI::Cursor::DESTROY which was called 4699 times, avg 20µs/call:
# 845 times (7.30ms+11.4ms) by DBIx::Class::ResultSet::count or Tapper::Schema::TestrunDB::Result::TestrunScheduling::fits at line 179 of Tapper/Schema/TestrunDB/Result/TestrunScheduling.pm, avg 22µs/call
# 594 times (7.06ms+13.8ms) by DBIx::Class::ResultSet::count at line 154 of Tapper/Schema/TestrunDB/Result/TestrunScheduling.pm, avg 35µs/call
# 477 times (1.91ms+0s) by Tapper::Schema::TestrunDB::Result::Queue::get_first_fitting at line 95 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 4µs/call
# 477 times (1.83ms+0s) by Tapper::MCP::Scheduler::PrioQueue::get_first_fitting at line 90 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 4µs/call
# 402 times (3.17ms+4.65ms) by DBIx::Class::ResultSet::count or Tapper::MCP::Scheduler::Controller::toggle_bandwith_color at line 44 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 19µs/call
# 331 times (1.77ms+0s) by DBIx::Class::ResultSet::search at line 512 of DBIx/Class/Relationship/Base.pm, avg 5µs/call
# 330 times (4.01ms+7.86ms) by DBIx::Class::ResultSet::count at line 42 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 36µs/call
# 180 times (1.10ms+0s) by main::toggle_host_free at line 56 of xt/tapper-mcp-scheduler-with-db-longrun.t, avg 6µs/call
# 180 times (481µs+0s) by Tapper::MCP::Scheduler::Controller::get_next_job at line 84 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 3µs/call
# 180 times (445µs+0s) by Tapper::Model::free_hosts_with_features at line 78 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 2µs/call
# 147 times (3.41ms+6.61ms) by DBIx::Class::ResultSet::count at line 162 of Tapper/Schema/TestrunDB/Result/Testrun.pm, avg 68µs/call
# 147 times (2.01ms+3.90ms) by DBIx::Class::ResultSet::count at line 168 of Tapper/Schema/TestrunDB/Result/Testrun.pm, avg 40µs/call
# 147 times (1.66ms+3.48ms) by Tapper::Schema::TestrunDB::Result::Testrun::rerun at line 133 of Tapper/Schema/TestrunDB/Result/Testrun.pm, avg 35µs/call
# 147 times (1.77ms+0s) by Tapper::Schema::TestrunDB::Result::Testrun::rerun at line 96 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 12µs/call
# 72 times (606µs+0s) by Tapper::MCP::Scheduler::Controller::get_next_job at line 117 of lib/Tapper/MCP/Scheduler/Controller.pm, avg 8µs/call
# 34 times (444µs+864µs) by DBIx::Class::ResultSet::count at line 57 of xt/tapper-mcp-scheduler-with-db-longrun.t, avg 38µs/call
# 3 times (57µs+129µs) by Try::Tiny::try at line 79 of Try/Tiny.pm, avg 62µs/call
# 2 times (14µs+2µs) by Try::Tiny::try at line 84 of Try/Tiny.pm, avg 8µs/call
# once (9µs+35µs) by Tapper::Model::model at line 53 of Tapper/Model.pm
# once (4µs+0s) by Tapper::Schema::TestrunDB::Result::TestrunScheduling::gen_schema_functions at line 51 of Tapper/Model.pm
# once (3µs+0s) by DBIx::Class::Schema::Versioned::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Schema/Versioned.pm:752] at line 751 of DBIx/Class/Schema/Versioned.pm
# once (3µs+0s) by Moose::Meta::Attribute::initialize_instance_slot at line 521 of Moose/Meta/Attribute.pm | ||||
180 | # None of the reasons this would die matter if we're in DESTROY anyways | ||||
181 | 4699 | 42.8ms | 4201 | 52.6ms | if (my $sth = $_[0]->sth) { # spent 48.9ms making 2100 calls to Try::Tiny::try, avg 23µs/call, recursion: max depth 1, sum of overlapping time 111µs
# spent 3.81ms making 2100 calls to DBI::common::FETCH, avg 2µs/call
# spent 2µs making 1 call to DBIx::Class::Storage::DBI::Cursor::sth |
182 | 2100 | 22.7ms | 2100 | 6.41ms | # spent 18.5ms (12.1+6.41) within DBIx::Class::Storage::DBI::Cursor::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/Storage/DBI/Cursor.pm:182] which was called 2100 times, avg 9µs/call:
# 2100 times (12.1ms+6.41ms) by Try::Tiny::try at line 76 of Try/Tiny.pm, avg 9µs/call # spent 6.41ms making 2100 calls to DBI::st::finish, avg 3µs/call |
183 | } | ||||
184 | } | ||||
185 | |||||
186 | 1 | 12µs | 1 | 214µs | 1; # spent 214µs making 1 call to B::Hooks::EndOfScope::__ANON__[B/Hooks/EndOfScope.pm:26] |