dbix::class::datetime::epoch(3pm) [debian man page]
DBIx::Class::DateTime::Epoch(3pm) User Contributed Perl Documentation DBIx::Class::DateTime::Epoch(3pm)
NAME
DBIx::Class::DateTime::Epoch - Automatic inflation/deflation of epoch-based columns to/from DateTime objects
SYNOPSIS
package MySchema::Foo;
use base qw( DBIx::Class );
__PACKAGE__->load_components( qw( DateTime::Epoch TimeStamp Core ) );
__PACKAGE__->add_columns(
name => {
data_type => 'varchar',
size => 10,
},
bar => { # epoch stored as an int
data_type => 'bigint',
inflate_datetime => 1,
},
baz => { # epoch stored as a string
data_type => 'varchar',
size => 50,
inflate_datetime => 'epoch',
},
# working in conjunction with DBIx::Class::TimeStamp
creation_time => {
data_type => 'bigint',
inflate_datetime => 1,
set_on_create => 1,
},
modification_time => {
data_type => 'bigint',
inflate_datetime => 1,
set_on_create => 1,
set_on_update => 1,
}
);
DATETIME
::FORMAT DEPENDENCY
There have been no assumptions made as to what RDBMS you will be using. As per the note in the DBIx::Class::InflateColumn::DateTime
documentation, you will need to install the DateTime::Format::* module that matches your RDBMS of choice.
DESCRIPTION
This module automatically inflates/deflates DateTime objects from/to epoch values for the specified columns. This module is essentially an
extension to DBIx::Class::InflateColumn::DateTime so all of the settings, including "locale" and "timezone", are also valid.
A column will be recognized as an epoch time given one of the following scenarios:
o "data_type" is an "int" of some sort and "inflate_datetime" is also set to a true value
o "data_type" is some other value (e.g. "varchar") and "inflate_datetime" is explicitly set to "epoch".
DBIx::Class::TimeStamp can also be used in conjunction with this module to support epoch-based columns that are automatically set on
creation of a row and updated subsequent modifications.
METHODS
add_columns( )
Provides backwards compatibility with the older DateTime::Epoch API.
_inflate_to_datetime( )
Overrides column inflation to use "Datetime->from_epoch".
_deflate_from_datetime( )
Overrides column deflation to call "epoch()" on the column value.
SEE ALSO
o DBIx::Class
o DBIx::Class::TimeStamp
o DateTime
AUTHORS
Brian Cassidy <bricas@cpan.org>
Adam Paynter <adapay@cpan.org>
COPYRIGHT AND LICENSE
Copyright 2006-2012 by Brian Cassidy
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
perl v5.14.2 2012-02-01 DBIx::Class::DateTime::Epoch(3pm)
Check Out this Related Man Page
DBIx::Class::InflateColumn::DateTime(3) User Contributed Perl Documentation DBIx::Class::InflateColumn::DateTime(3)
NAME
DBIx::Class::InflateColumn::DateTime - Auto-create DateTime objects from date and datetime columns.
SYNOPSIS
Load this component and then declare one or more columns to be of the datetime, timestamp or date datatype.
package Event;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components(qw/InflateColumn::DateTime/);
__PACKAGE__->add_columns(
starts_when => { data_type => 'datetime' }
create_date => { data_type => 'date' }
);
Then you can treat the specified column as a DateTime object.
print "This event starts the month of ".
$event->starts_when->month_name();
If you want to set a specific timezone and locale for that field, use:
__PACKAGE__->add_columns(
starts_when => { data_type => 'datetime', timezone => "America/Chicago", locale => "de_DE" }
);
If you want to inflate no matter what data_type your column is, use inflate_datetime or inflate_date:
__PACKAGE__->add_columns(
starts_when => { data_type => 'varchar', inflate_datetime => 1 }
);
__PACKAGE__->add_columns(
starts_when => { data_type => 'varchar', inflate_date => 1 }
);
It's also possible to explicitly skip inflation:
__PACKAGE__->add_columns(
starts_when => { data_type => 'datetime', inflate_datetime => 0 }
);
NOTE: Don't rely on "InflateColumn::DateTime" to parse date strings for you. The column is set directly for any non-references and
"InflateColumn::DateTime" is completely bypassed. Instead, use an input parser to create a DateTime object. For instance, if your user
input comes as a 'YYYY-MM-DD' string, you can use "DateTime::Format::ISO8601" thusly:
use DateTime::Format::ISO8601;
my $dt = DateTime::Format::ISO8601->parse_datetime('YYYY-MM-DD');
DESCRIPTION
This module figures out the type of DateTime::Format::* class to inflate/deflate with based on the type of DBIx::Class::Storage::DBI::*
that you are using. If you switch from one database to a different one your code should continue to work without modification (though note
that this feature is new as of 0.07, so it may not be perfect yet - bug reports to the list very much welcome).
If the data_type of a field is "date", "datetime" or "timestamp" (or a derivative of these datatypes, e.g. "timestamp with timezone"), this
module will automatically call the appropriate parse/format method for deflation/inflation as defined in the storage class. For instance,
for a "datetime" field the methods "parse_datetime" and "format_datetime" would be called on deflation/inflation. If the storage class does
not provide a specialized inflator/deflator, "[parse|format]_datetime" will be used as a fallback. See DateTime::Format for more
information on date formatting.
For more help with using components, see "USING" in DBIx::Class::Manual::Component.
register_column
Chains with the "register_column" in DBIx::Class::Row method, and sets up datetime columns appropriately. This would not normally be
directly called by end users.
In the case of an invalid date, DateTime will throw an exception. To bypass these exceptions and just have the inflation return undef, use
the "datetime_undef_if_invalid" option in the column info:
"broken_date",
{
data_type => "datetime",
default_value => '0000-00-00',
is_nullable => 1,
datetime_undef_if_invalid => 1
}
USAGE NOTES
If you have a datetime column with an associated "timezone", and subsequently create/update this column with a DateTime object in the
DateTime::TimeZone::Floating timezone, you will get a warning (as there is a very good chance this will not have the result you expect).
For example:
__PACKAGE__->add_columns(
starts_when => { data_type => 'datetime', timezone => "America/Chicago" }
);
my $event = $schema->resultset('EventTZ')->create({
starts_at => DateTime->new(year=>2007, month=>12, day=>31, ),
});
The warning can be avoided in several ways:
Fix your broken code
When calling "set_time_zone" on a Floating DateTime object, the timezone is simply set to the requested value, and no time conversion
takes place. It is always a good idea to be supply explicit times to the database:
my $event = $schema->resultset('EventTZ')->create({
starts_at => DateTime->new(year=>2007, month=>12, day=>31, time_zone => "America/Chicago" ),
});
Suppress the check on per-column basis
__PACKAGE__->add_columns(
starts_when => { data_type => 'datetime', timezone => "America/Chicago", floating_tz_ok => 1 }
);
Suppress the check globally
Set the environment variable DBIC_FLOATING_TZ_OK to some true value.
Putting extra attributes like timezone, locale or floating_tz_ok into extra => {} has been DEPRECATED because this gets you into trouble
using DBIx::Class::Schema::Versioned. Instead put it directly into the columns definition like in the examples above. If you still use the
old way you'll see a warning - please fix your code then!
SEE ALSO
More information about the add_columns method, and column metadata, can be found in the documentation for DBIx::Class::ResultSource.
Further discussion of problems inherent to the Floating timezone: Floating DateTimes and $dt->set_time_zone
AUTHOR
Matt S. Trout <mst@shadowcatsystems.co.uk>
INHERITED METHODS
DBIx::Class::InflateColumn
get_inflated_column, inflate_column, set_inflated_column, store_inflated_column
DBIx::Class::Row
copy, delete, discard_changes, get_column, get_columns, get_dirty_columns, get_from_storage, get_inflated_columns, has_column_loaded,
in_storage, inflate_result, insert, insert_or_update, is_changed, is_column_changed, make_column_dirty, new, result_source, set_column,
set_columns, set_inflated_columns, store_column, throw_exception, update, update_or_insert
CONTRIBUTORS
Aran Deltac <bluefeet@cpan.org>
LICENSE
You may distribute this code under the same terms as Perl itself.
perl v5.18.2 2014-01-30 DBIx::Class::InflateColumn::DateTime(3)