← 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/ResultSourceHandle.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11115µs24µsDBIx::Class::ResultSourceHandle::::BEGIN@3DBIx::Class::ResultSourceHandle::BEGIN@3
11114µs41µsDBIx::Class::ResultSourceHandle::::BEGIN@12DBIx::Class::ResultSourceHandle::BEGIN@12
11110µs43µsDBIx::Class::ResultSourceHandle::::BEGIN@8DBIx::Class::ResultSourceHandle::BEGIN@8
1119µs48µsDBIx::Class::ResultSourceHandle::::BEGIN@6DBIx::Class::ResultSourceHandle::BEGIN@6
1118µs16µsDBIx::Class::ResultSourceHandle::::BEGIN@4DBIx::Class::ResultSourceHandle::BEGIN@4
1118µs99µsDBIx::Class::ResultSourceHandle::::BEGIN@9DBIx::Class::ResultSourceHandle::BEGIN@9
0000s0sDBIx::Class::ResultSourceHandle::::STORABLE_freezeDBIx::Class::ResultSourceHandle::STORABLE_freeze
0000s0sDBIx::Class::ResultSourceHandle::::STORABLE_thawDBIx::Class::ResultSourceHandle::STORABLE_thaw
0000s0sDBIx::Class::ResultSourceHandle::::__ANON__[:115]DBIx::Class::ResultSourceHandle::__ANON__[:115]
0000s0sDBIx::Class::ResultSourceHandle::::__ANON__[:12]DBIx::Class::ResultSourceHandle::__ANON__[:12]
0000s0sDBIx::Class::ResultSourceHandle::::newDBIx::Class::ResultSourceHandle::new
0000s0sDBIx::Class::ResultSourceHandle::::resolveDBIx::Class::ResultSourceHandle::resolve
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package DBIx::Class::ResultSourceHandle;
2
3234µs
# spent 24µs (15+9) within DBIx::Class::ResultSourceHandle::BEGIN@3 which was called: # once (15µs+9µs) by DBIx::Class::ResultSource::BEGIN@9 at line 3
use strict;
# spent 24µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@3 # spent 9µs making 1 call to strict::import
4223µs
# spent 16µs (8+7) within DBIx::Class::ResultSourceHandle::BEGIN@4 which was called: # once (8µs+7µs) by DBIx::Class::ResultSource::BEGIN@9 at line 4
use warnings;
# spent 16µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@4 # spent 7µs making 1 call to warnings::import
5
6248µs
# spent 48µs (9+38) within DBIx::Class::ResultSourceHandle::BEGIN@6 which was called: # once (9µs+38µs) by DBIx::Class::ResultSource::BEGIN@9 at line 6
use base qw/DBIx::Class/;
# spent 48µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@6 # spent 38µs making 1 call to base::import, recursion: max depth 1, sum of overlapping time 38µs
7
8275µs
# spent 43µs (10+33) within DBIx::Class::ResultSourceHandle::BEGIN@8 which was called: # once (10µs+33µs) by DBIx::Class::ResultSource::BEGIN@9 at line 8
use Try::Tiny;
# spent 43µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@8 # spent 33µs making 1 call to Exporter::import
92191µs
# spent 99µs (8+92) within DBIx::Class::ResultSourceHandle::BEGIN@9 which was called: # once (8µs+92µs) by DBIx::Class::ResultSource::BEGIN@9 at line 9
use namespace::clean;
# spent 99µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@9 # spent 92µs making 1 call to namespace::clean::import
10
11use overload
12
# spent 41µs (14+27) within DBIx::Class::ResultSourceHandle::BEGIN@12 which was called: # once (14µs+27µs) by DBIx::Class::ResultSource::BEGIN@9 at line 13
q/""/ => sub { __PACKAGE__ . ":" . shift->source_moniker; },
13269µs fallback => 1;
# spent 41µs making 1 call to DBIx::Class::ResultSourceHandle::BEGIN@12 # spent 27µs making 1 call to overload::import
14
151193µs__PACKAGE__->mk_group_accessors('simple' => qw/schema source_moniker _detached_source/);
# spent 193µs making 1 call to Class::Accessor::Grouped::mk_group_accessors
16
17# Schema to use when thawing.
18our $thaw_schema;
19
20=head1 NAME
21
22DBIx::Class::ResultSourceHandle - Serializable pointers to ResultSource instances
23
24=head1 DESCRIPTION
25
26Currently instances of this class are used to allow proper serialization of
27L<ResultSources|DBIx::Class::ResultSource> (which may contain unserializable
28elements like C<CODE> references).
29
30Originally this module was used to remove the fixed link between
31L<Rows|DBIx::Class::Row>/L<ResultSets|DBIx::Class::ResultSet> and the actual
32L<result source objects|DBIx::Class::ResultSource> in order to obviate the need
33of keeping a L<schema instance|DBIx::Class::Schema> constantly in scope, while
34at the same time avoiding leaks due to circular dependencies. This is however
35no longer needed after introduction of a proper mutual-assured-destruction
36contract between a C<Schema> instance and its C<ResultSource> registrants.
37
38=head1 METHODS
39
40=head2 new
41
42=cut
43
44sub new {
45 my ($class, $args) = @_;
46 my $self = bless $args, ref $class || $class;
47
48 unless( ($self->{schema} || $self->{_detached_source}) && $self->{source_moniker} ) {
49 my $err = 'Expecting a schema instance and a source moniker';
50 $self->{schema}
51 ? $self->{schema}->throw_exception($err)
52 : DBIx::Class::Exception->throw($err)
53 }
54
55 $self;
56}
57
58=head2 resolve
59
60Resolve the moniker into the actual ResultSource object
61
62=cut
63
64sub resolve {
65 return $_[0]->{schema}->source($_[0]->source_moniker) if $_[0]->{schema};
66
67 $_[0]->_detached_source || DBIx::Class::Exception->throw( sprintf (
68 # vague error message as this is never supposed to happen
69 "Unable to resolve moniker '%s' - please contact the dev team at %s",
70 $_[0]->source_moniker,
71 DBIx::Class::_ENV_::HELP_URL,
72 ), 'full_stacktrace');
73}
74
75=head2 STORABLE_freeze
76
77Freezes a handle.
78
79=cut
80
81sub STORABLE_freeze {
82 my ($self, $cloning) = @_;
83
84 my $to_serialize = { %$self };
85
86 delete $to_serialize->{schema};
87 delete $to_serialize->{_detached_source};
88 $to_serialize->{_frozen_from_class} = $self->{schema}
89 ? $self->{schema}->class($self->source_moniker)
90 : $self->{_detached_source}->result_class
91 ;
92
93 Storable::nfreeze($to_serialize);
94}
95
96=head2 STORABLE_thaw
97
98Thaws frozen handle. Resets the internal schema reference to the package
99variable C<$thaw_schema>. The recommended way of setting this is to use
100C<< $schema->thaw($ice) >> which handles this for you.
101
102=cut
103
104sub STORABLE_thaw {
105 my ($self, $cloning, $ice) = @_;
106 %$self = %{ Storable::thaw($ice) };
107
108 my $from_class = delete $self->{_frozen_from_class};
109
110 if( $thaw_schema ) {
111 $self->schema( $thaw_schema );
112 }
113 elsif( my $rs = $from_class->result_source_instance ) {
114 # in the off-chance we are using CDBI-compat and have leaked $schema already
115 if( my $s = try { $rs->schema } ) {
116 $self->schema( $s );
117 }
118 else {
119 $rs->source_name( $self->source_moniker );
120 $rs->{_detached_thaw} = 1;
121 $self->_detached_source( $rs );
122 }
123 }
124 else {
125 DBIx::Class::Exception->throw(
126 "Thaw failed - original result class '$from_class' does not exist on this system"
127 );
128 }
129}
130
131=head1 FURTHER QUESTIONS?
132
133Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
134
135=head1 COPYRIGHT AND LICENSE
136
137This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
138by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
139redistribute it and/or modify it under the same terms as the
140L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
141
142=cut
143
144181µs1;
# spent 81µs making 1 call to B::Hooks::EndOfScope::XS::__ANON__