Profile of DBIx/Class/InflateColumn/DateTime.pm

← Index
NYTProf Performance Profile «block view•line view•sub view»
For xt/tapper-mcp-scheduler-with-db-longrun.t
Run on Tue May 22 17:18:39 2012
Reported on Tue May 22 17:23:08 2012

Filename | /2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/InflateColumn/DateTime.pm
Statements | Executed 4106 statements in 11.6ms

Subroutines
Calls | P | F | Exclusive Time | Inclusive Time | Subroutine
--- | --- | --- | --- | --- | ---
147 | 1 | 1 | 3.86ms | 59.4ms | DBIx::Class::InflateColumn::DateTime::::_flate_or_fallbackDBIx::Class::InflateColumn::DateTime::_flate_or_fallback
119 | 1 | 1 | 2.18ms | 20.3ms | DBIx::Class::InflateColumn::DateTime::::register_columnDBIx::Class::InflateColumn::DateTime::register_column
147 | 1 | 1 | 1.61ms | 62.5ms | DBIx::Class::InflateColumn::DateTime::::__ANON__[:187]DBIx::Class::InflateColumn::DateTime::__ANON__[:187]
147 | 1 | 1 | 1.42ms | 15.3ms | DBIx::Class::InflateColumn::DateTime::::_datetime_parserDBIx::Class::InflateColumn::DateTime::_datetime_parser
147 | 1 | 1 | 818µs | 60.2ms | DBIx::Class::InflateColumn::DateTime::::_deflate_from_datetimeDBIx::Class::InflateColumn::DateTime::_deflate_from_datetime
147 | 1 | 1 | 664µs | 664µs | DBIx::Class::InflateColumn::DateTime::::_pre_deflate_datetimeDBIx::Class::InflateColumn::DateTime::_pre_deflate_datetime
147 | 1 | 1 | 646µs | 37.4ms | DBIx::Class::InflateColumn::DateTime::::__ANON__[:202]DBIx::Class::InflateColumn::DateTime::__ANON__[:202]
119 | 1 | 1 | 190µs | 190µs | DBIx::Class::InflateColumn::DateTime::::CORE:matchDBIx::Class::InflateColumn::DateTime::CORE:match (opcode)
1 | 1 | 1 | 15µs | 95µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@5DBIx::Class::InflateColumn::DateTime::BEGIN@5
1 | 1 | 1 | 13µs | 16µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@3DBIx::Class::InflateColumn::DateTime::BEGIN@3
1 | 1 | 1 | 11µs | 58µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@7DBIx::Class::InflateColumn::DateTime::BEGIN@7
1 | 1 | 1 | 11µs | 21µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@4DBIx::Class::InflateColumn::DateTime::BEGIN@4
1 | 1 | 1 | 9µs | 99µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@6DBIx::Class::InflateColumn::DateTime::BEGIN@6
1 | 1 | 1 | 7µs | 207µs | DBIx::Class::InflateColumn::DateTime::::BEGIN@8DBIx::Class::InflateColumn::DateTime::BEGIN@8
0 | 0 | 0 | 0s | 0s | DBIx::Class::InflateColumn::DateTime::::__ANON__[:181]DBIx::Class::InflateColumn::DateTime::__ANON__[:181]
0 | 0 | 0 | 0s | 0s | DBIx::Class::InflateColumn::DateTime::::__ANON__[:207]DBIx::Class::InflateColumn::DateTime::__ANON__[:207]
0 | 0 | 0 | 0s | 0s | DBIx::Class::InflateColumn::DateTime::::_inflate_to_datetimeDBIx::Class::InflateColumn::DateTime::_inflate_to_datetime
0 | 0 | 0 | 0s | 0s | DBIx::Class::InflateColumn::DateTime::::_post_inflate_datetimeDBIx::Class::InflateColumn::DateTime::_post_inflate_datetime

Call graph for these subroutines as a Graphviz dot language file.

Line | State ments | Time on line | Calls | Time in subs | Code
--- | --- | --- | --- | --- | ---
1 |  |  |  |  | package DBIx::Class::InflateColumn::DateTime;
2 |  |  |  |  |
3 | 3 | 23µs | 2 | 19µs | # spent 16µs (13+3) within DBIx::Class::InflateColumn::DateTime::BEGIN@3 which was called: # once (13µs+3µs) by Class::C3::Componentised::ensure_class_loaded at line 3 use strict; # spent 16µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@3 # spent 3µs making 1 call to strict::import
4 | 3 | 20µs | 2 | 30µs | # spent 21µs (11+9) within DBIx::Class::InflateColumn::DateTime::BEGIN@4 which was called: # once (11µs+9µs) by Class::C3::Componentised::ensure_class_loaded at line 4 use warnings; # spent 21µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@4 # spent 9µs making 1 call to warnings::import
5 | 3 | 28µs | 2 | 174µs | # spent 95µs (15+80) within DBIx::Class::InflateColumn::DateTime::BEGIN@5 which was called: # once (15µs+80µs) by Class::C3::Componentised::ensure_class_loaded at line 5 use base qw/DBIx::Class/; # spent 95µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@5 # spent 80µs making 1 call to base::import
6 | 3 | 22µs | 2 | 189µs | # spent 99µs (9+90) within DBIx::Class::InflateColumn::DateTime::BEGIN@6 which was called: # once (9µs+90µs) by Class::C3::Componentised::ensure_class_loaded at line 6 use DBIx::Class::Carp; # spent 99µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@6 # spent 90µs making 1 call to DBIx::Class::Carp::import
7 | 3 | 23µs | 2 | 104µs | # spent 58µs (11+46) within DBIx::Class::InflateColumn::DateTime::BEGIN@7 which was called: # once (11µs+46µs) by Class::C3::Componentised::ensure_class_loaded at line 7 use Try::Tiny; # spent 58µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@7 # spent 46µs making 1 call to Exporter::import
8 | 3 | 676µs | 2 | 408µs | # spent 207µs (7+201) within DBIx::Class::InflateColumn::DateTime::BEGIN@8 which was called: # once (7µs+201µs) by Class::C3::Componentised::ensure_class_loaded at line 8 use namespace::clean; # spent 207µs making 1 call to DBIx::Class::InflateColumn::DateTime::BEGIN@8 # spent 201µs making 1 call to namespace::clean::import
9 |  |  |  |  |
10 |  |  |  |  | =head1 NAME
11 |  |  |  |  |
12 |  |  |  |  | DBIx::Class::InflateColumn::DateTime - Auto-create DateTime objects from date and datetime columns.
13 |  |  |  |  |
14 |  |  |  |  | =head1 SYNOPSIS
15 |  |  |  |  |
16 |  |  |  |  | Load this component and then declare one or more
17 |  |  |  |  | columns to be of the datetime, timestamp or date datatype.
18 |  |  |  |  |
19 |  |  |  |  | package Event;
20 |  |  |  |  | use base 'DBIx::Class::Core';
21 |  |  |  |  |
22 |  |  |  |  | __PACKAGE__->load_components(qw/InflateColumn::DateTime/);
23 |  |  |  |  | __PACKAGE__->add_columns(
24 |  |  |  |  | starts_when => { data_type => 'datetime' }
25 |  |  |  |  | create_date => { data_type => 'date' }
26 |  |  |  |  | );
27 |  |  |  |  |
28 |  |  |  |  | Then you can treat the specified column as a L<DateTime> object.
29 |  |  |  |  |
30 |  |  |  |  | print "This event starts the month of ".
31 |  |  |  |  | $event->starts_when->month_name();
32 |  |  |  |  |
33 |  |  |  |  | If you want to set a specific timezone and locale for that field, use:
34 |  |  |  |  |
35 |  |  |  |  | __PACKAGE__->add_columns(
36 |  |  |  |  | starts_when => { data_type => 'datetime', timezone => "America/Chicago", locale => "de_DE" }
37 |  |  |  |  | );
38 |  |  |  |  |
39 |  |  |  |  | If you want to inflate no matter what data_type your column is,
40 |  |  |  |  | use inflate_datetime or inflate_date:
41 |  |  |  |  |
42 |  |  |  |  | __PACKAGE__->add_columns(
43 |  |  |  |  | starts_when => { data_type => 'varchar', inflate_datetime => 1 }
44 |  |  |  |  | );
45 |  |  |  |  |
46 |  |  |  |  | __PACKAGE__->add_columns(
47 |  |  |  |  | starts_when => { data_type => 'varchar', inflate_date => 1 }
48 |  |  |  |  | );
49 |  |  |  |  |
50 |  |  |  |  | It's also possible to explicitly skip inflation:
51 |  |  |  |  |
52 |  |  |  |  | __PACKAGE__->add_columns(
53 |  |  |  |  | starts_when => { data_type => 'datetime', inflate_datetime => 0 }
54 |  |  |  |  | );
55 |  |  |  |  |
56 |  |  |  |  | NOTE: Don't rely on C<InflateColumn::DateTime> to parse date strings for you.
57 |  |  |  |  | The column is set directly for any non-references and C<InflateColumn::DateTime>
58 |  |  |  |  | is completely bypassed. Instead, use an input parser to create a DateTime
59 |  |  |  |  | object. For instance, if your user input comes as a 'YYYY-MM-DD' string, you can
60 |  |  |  |  | use C<DateTime::Format::ISO8601> thusly:
61 |  |  |  |  |
62 |  |  |  |  | use DateTime::Format::ISO8601;
63 |  |  |  |  | my $dt = DateTime::Format::ISO8601->parse_datetime('YYYY-MM-DD');
64 |  |  |  |  |
65 |  |  |  |  | =head1 DESCRIPTION
66 |  |  |  |  |
67 |  |  |  |  | This module figures out the type of DateTime::Format::* class to
68 |  |  |  |  | inflate/deflate with based on the type of DBIx::Class::Storage::DBI::*
69 |  |  |  |  | that you are using. If you switch from one database to a different
70 |  |  |  |  | one your code should continue to work without modification (though note
71 |  |  |  |  | that this feature is new as of 0.07, so it may not be perfect yet - bug
72 |  |  |  |  | reports to the list very much welcome).
73 |  |  |  |  |
74 |  |  |  |  | If the data_type of a field is C<date>, C<datetime> or C<timestamp> (or
75 |  |  |  |  | a derivative of these datatypes, e.g. C<timestamp with timezone>), this
76 |  |  |  |  | module will automatically call the appropriate parse/format method for
77 |  |  |  |  | deflation/inflation as defined in the storage class. For instance, for
78 |  |  |  |  | a C<datetime> field the methods C<parse_datetime> and C<format_datetime>
79 |  |  |  |  | would be called on deflation/inflation. If the storage class does not
80 |  |  |  |  | provide a specialized inflator/deflator, C<[parse|format]_datetime> will
81 |  |  |  |  | be used as a fallback. See L<DateTime::Format> for more information on
82 |  |  |  |  | date formatting.
83 |  |  |  |  |
84 |  |  |  |  | For more help with using components, see L<DBIx::Class::Manual::Component/USING>.
85 |  |  |  |  |
86 |  |  |  |  | =cut
87 |  |  |  |  |
88 | 1 | 9µs | 1 | 0s | __PACKAGE__->load_components(qw/InflateColumn/); # spent 202µs making 1 call to Class::C3::Componentised::load_components, recursion: max depth 1, sum of overlapping time 202µs
89 |  |  |  |  |
90 |  |  |  |  | =head2 register_column
91 |  |  |  |  |
92 |  |  |  |  | Chains with the L<DBIx::Class::Row/register_column> method, and sets
93 |  |  |  |  | up datetime columns appropriately. This would not normally be
94 |  |  |  |  | directly called by end users.
95 |  |  |  |  |
96 |  |  |  |  | In the case of an invalid date, L<DateTime> will throw an exception. To
97 |  |  |  |  | bypass these exceptions and just have the inflation return undef, use
98 |  |  |  |  | the C<datetime_undef_if_invalid> option in the column info:
99 |  |  |  |  |
100 |  |  |  |  | "broken_date",
101 |  |  |  |  | {
102 |  |  |  |  | data_type => "datetime",
103 |  |  |  |  | default_value => '0000-00-00',
104 |  |  |  |  | is_nullable => 1,
105 |  |  |  |  | datetime_undef_if_invalid => 1
106 |  |  |  |  | }
107 |  |  |  |  |
108 |  |  |  |  | =cut
109 |  |  |  |  |
110 |  |  |  |  | # spent 20.3ms (2.18+18.1) within DBIx::Class::InflateColumn::DateTime::register_column which was called 119 times, avg 171µs/call: # 119 times (2.18ms+18.1ms) by DBIx::Class::ResultSourceProxy::add_columns at line 34 of DBIx/Class/ResultSourceProxy.pm, avg 171µs/call sub register_column {
111 | 935 | 1.64ms |  |  | my ($self, $column, $info, @rest) = @_;
112 |  |  |  |  |
113 |  |  | 119 | 863µs | $self->next::method($column, $info, @rest); # spent 863µs making 119 calls to next::method, avg 7µs/call
114 |  |  |  |  |
115 |  |  |  |  | my $requested_type;
116 |  |  |  |  | for (qw/datetime timestamp date/) {
117 | 714 | 320µs |  |  | my $key = "inflate_${_}";
118 |  |  |  |  | if (exists $info->{$key}) {
119 |  |  |  |  |
120 |  |  |  |  | # this bailout is intentional
121 |  |  |  |  | return unless $info->{$key};
122 |  |  |  |  |
123 |  |  |  |  | $requested_type = $_;
124 |  |  |  |  | last;
125 |  |  |  |  | }
126 |  |  |  |  | }
127 |  |  |  |  |
128 |  |  |  |  | return if (!$requested_type and !$info->{data_type});
129 |  |  |  |  |
130 |  |  |  |  | my $data_type = lc( $info->{data_type} || '' );
131 |  |  |  |  |
132 |  |  |  |  | # _ic_dt_method will follow whatever the registration requests
133 |  |  |  |  | # thus = instead of ||=
134 | 85 | 176µs | 119 | 190µs | if ($data_type eq 'timestamp with time zone' || $data_type eq 'timestamptz') { # spent 190µs making 119 calls to DBIx::Class::InflateColumn::DateTime::CORE:match, avg 2µs/call
135 |  |  |  |  | $info->{_ic_dt_method} = 'timestamp_with_timezone';
136 |  |  |  |  | }
137 |  |  |  |  | elsif ($data_type eq 'timestamp without time zone') {
138 |  |  |  |  | $info->{_ic_dt_method} = 'timestamp_without_timezone';
139 |  |  |  |  | }
140 |  |  |  |  | elsif ($data_type eq 'smalldatetime') {
141 |  |  |  |  | $info->{_ic_dt_method} = 'smalldatetime';
142 |  |  |  |  | }
143 |  |  |  |  | elsif ($data_type =~ /^ (?: date | datetime | timestamp ) $/x) {
144 |  |  |  |  | $info->{_ic_dt_method} = $data_type;
145 |  |  |  |  | }
146 |  |  |  |  | elsif ($requested_type) {
147 |  |  |  |  | $info->{_ic_dt_method} = $requested_type;
148 |  |  |  |  | }
149 |  |  |  |  | else {
150 |  |  |  |  | return;
151 |  |  |  |  | }
152 |  |  |  |  |
153 |  |  |  |  | if ($info->{extra}) {
154 |  |  |  |  | for my $slot (qw/timezone locale floating_tz_ok/) {
155 |  |  |  |  | if ( defined $info->{extra}{$slot} ) {
156 |  |  |  |  | carp "Putting $slot into extra => { $slot => '...' } has been deprecated, ".
157 |  |  |  |  | "please put it directly into the '$column' column definition.";
158 |  |  |  |  | $info->{$slot} = $info->{extra}{$slot} unless defined $info->{$slot};
159 |  |  |  |  | }
160 |  |  |  |  | }
161 |  |  |  |  | }
162 |  |  |  |  |
163 |  |  |  |  | # shallow copy to avoid unfounded(?) Devel::Cycle complaints
164 |  |  |  |  | my $infcopy = {%$info};
165 |  |  |  |  |
166 |  |  |  |  | $self->inflate_column(
167 |  |  |  |  | $column =>
168 |  |  |  |  | {
169 |  |  |  |  | inflate => sub {
170 |  |  |  |  | my ($value, $obj) = @_;
171 |  |  |  |  |
172 |  |  |  |  | # propagate for error reporting
173 |  |  |  |  | $infcopy->{__dbic_colname} = $column;
174 |  |  |  |  |
175 |  |  |  |  | my $dt = $obj->_inflate_to_datetime( $value, $infcopy );
176 |  |  |  |  |
177 |  |  |  |  | return (defined $dt)
178 |  |  |  |  | ? $obj->_post_inflate_datetime( $dt, $infcopy )
179 |  |  |  |  | : undef
180 |  |  |  |  | ;
181 |  |  |  |  | },
182 |  |  |  |  | # spent 62.5ms (1.61+60.9) within DBIx::Class::InflateColumn::DateTime::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/InflateColumn/DateTime.pm:187] which was called 147 times, avg 425µs/call: # 147 times (1.61ms+60.9ms) by DBIx::Class::InflateColumn::_deflated_column at line 114 of DBIx/Class/InflateColumn.pm, avg 425µs/call deflate => sub {
183 | 441 | 1.24ms |  |  | my ($value, $obj) = @_;
184 |  |  |  |  |
185 |  |  | 147 | 664µs | $value = $obj->_pre_deflate_datetime( $value, $infcopy ); # spent 664µs making 147 calls to DBIx::Class::InflateColumn::DateTime::_pre_deflate_datetime, avg 5µs/call
186 |  |  | 147 | 60.2ms | $obj->_deflate_from_datetime( $value, $infcopy ); # spent 60.2ms making 147 calls to DBIx::Class::InflateColumn::DateTime::_deflate_from_datetime, avg 410µs/call
187 |  |  |  |  | },
188 |  |  |  |  | }
189 |  |  | 34 | 5.29ms | ); # spent 5.29ms making 34 calls to DBIx::Class::InflateColumn::inflate_column, avg 156µs/call
190 |  |  |  |  | }
191 |  |  |  |  |
192 |  |  |  |  | sub _flate_or_fallback
193 |  |  |  |  | # spent 59.4ms (3.86+55.6) within DBIx::Class::InflateColumn::DateTime::_flate_or_fallback which was called 147 times, avg 404µs/call: # 147 times (3.86ms+55.6ms) by DBIx::Class::InflateColumn::DateTime::_deflate_from_datetime at line 217, avg 404µs/call {
194 | 735 | 4.11ms |  |  | my( $self, $value, $info, $method_fmt ) = @_;
195 |  |  |  |  |
196 |  |  | 147 | 15.3ms | my $parser = $self->_datetime_parser; # spent 15.3ms making 147 calls to DBIx::Class::InflateColumn::DateTime::_datetime_parser, avg 104µs/call
197 |  |  |  |  | my $preferred_method = sprintf($method_fmt, $info->{ _ic_dt_method });
198 |  |  | 147 | 659µs | my $method = $parser->can($preferred_method) || sprintf($method_fmt, 'datetime'); # spent 659µs making 147 calls to UNIVERSAL::can, avg 4µs/call
199 |  |  |  |  |
200 |  |  |  |  | # spent 37.4ms (646µs+36.8) within DBIx::Class::InflateColumn::DateTime::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/InflateColumn/DateTime.pm:202] which was called 147 times, avg 254µs/call: # 147 times (646µs+36.8ms) by Try::Tiny::try at line 71 of Try/Tiny.pm, avg 254µs/call return try {
201 | 147 | 582µs | 147 | 36.8ms | $parser->$method($value); # spent 36.8ms making 147 calls to DateTime::Format::SQLite::format_datetime, avg 250µs/call
202 |  |  |  |  | }
203 |  |  |  |  | catch {
204 |  |  |  |  | $self->throw_exception ("Error while inflating ${value} for $info->{__dbic_colname} on ${self}: $_")
205 |  |  |  |  | unless $info->{datetime_undef_if_invalid};
206 |  |  |  |  | undef; # rv
207 |  |  | 294 | 39.6ms | }; # spent 39.2ms making 147 calls to Try::Tiny::try, avg 267µs/call # spent 408µs making 147 calls to Try::Tiny::catch, avg 3µs/call
208 |  |  |  |  | }
209 |  |  |  |  |
210 |  |  |  |  | sub _inflate_to_datetime {
211 |  |  |  |  | my( $self, $value, $info ) = @_;
212 |  |  |  |  | return $self->_flate_or_fallback( $value, $info, 'parse_%s' );
213 |  |  |  |  | }
214 |  |  |  |  |
215 |  |  |  |  | # spent 60.2ms (818µs+59.4) within DBIx::Class::InflateColumn::DateTime::_deflate_from_datetime which was called 147 times, avg 410µs/call: # 147 times (818µs+59.4ms) by DBIx::Class::InflateColumn::DateTime::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/InflateColumn/DateTime.pm:187] at line 186, avg 410µs/call sub _deflate_from_datetime {
216 | 294 | 833µs |  |  | my( $self, $value, $info ) = @_;
217 |  |  | 147 | 59.4ms | return $self->_flate_or_fallback( $value, $info, 'format_%s' ); # spent 59.4ms making 147 calls to DBIx::Class::InflateColumn::DateTime::_flate_or_fallback, avg 404µs/call
218 |  |  |  |  | }
219 |  |  |  |  |
220 |  |  |  |  | # spent 15.3ms (1.42+13.9) within DBIx::Class::InflateColumn::DateTime::_datetime_parser which was called 147 times, avg 104µs/call: # 147 times (1.42ms+13.9ms) by DBIx::Class::InflateColumn::DateTime::_flate_or_fallback at line 196, avg 104µs/call sub _datetime_parser {
221 | 147 | 1.10ms | 441 | 13.9ms | shift->result_source->storage->datetime_parser (@_); # spent 11.3ms making 147 calls to DBIx::Class::Storage::DBI::datetime_parser, avg 77µs/call # spent 2.27ms making 147 calls to DBIx::Class::ResultSource::storage, avg 15µs/call # spent 262µs making 147 calls to DBIx::Class::Row::result_source, avg 2µs/call
222 |  |  |  |  | }
223 |  |  |  |  |
224 |  |  |  |  | sub _post_inflate_datetime {
225 |  |  |  |  | my( $self, $dt, $info ) = @_;
226 |  |  |  |  |
227 |  |  |  |  | $dt->set_time_zone($info->{timezone}) if defined $info->{timezone};
228 |  |  |  |  | $dt->set_locale($info->{locale}) if defined $info->{locale};
229 |  |  |  |  |
230 |  |  |  |  | return $dt;
231 |  |  |  |  | }
232 |  |  |  |  |
233 |  |  |  |  | # spent 664µs within DBIx::Class::InflateColumn::DateTime::_pre_deflate_datetime which was called 147 times, avg 5µs/call: # 147 times (664µs+0s) by DBIx::Class::InflateColumn::DateTime::__ANON__[/2home/ss5/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/DBIx/Class/InflateColumn/DateTime.pm:187] at line 185, avg 5µs/call sub _pre_deflate_datetime {
234 | 588 | 828µs |  |  | my( $self, $dt, $info ) = @_;
235 |  |  |  |  |
236 |  |  |  |  | if (defined $info->{timezone}) {
237 |  |  |  |  | carp "You're using a floating timezone, please see the documentation of"
238 |  |  |  |  | . " DBIx::Class::InflateColumn::DateTime for an explanation"
239 |  |  |  |  | if ref( $dt->time_zone ) eq 'DateTime::TimeZone::Floating'
240 |  |  |  |  | and not $info->{floating_tz_ok}
241 |  |  |  |  | and not $ENV{DBIC_FLOATING_TZ_OK};
242 |  |  |  |  |
243 |  |  |  |  | $dt->set_time_zone($info->{timezone});
244 |  |  |  |  | }
245 |  |  |  |  |
246 |  |  |  |  | $dt->set_locale($info->{locale}) if defined $info->{locale};
247 |  |  |  |  |
248 |  |  |  |  | return $dt;
249 |  |  |  |  | }
250 |  |  |  |  |
251 | 1 | 3µs |  |  | 1;
252 | 1 | 8µs | 1 | 412µs | __END__ # spent 412µs making 1 call to B::Hooks::EndOfScope::__ANON__[B/Hooks/EndOfScope.pm:26]
|  |  |  |  | # spent 190µs within DBIx::Class::InflateColumn::DateTime::CORE:match which was called 119 times, avg 2µs/call: # 119 times (190µs+0s) by DBIx::Class::InflateColumn::DateTime::register_column at line 134, avg 2µs/call sub DBIx::Class::InflateColumn::DateTime::CORE:match; # opcode