X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FOracle%2FGeneric.pm;h=7eadf447c6fca30cc5a3575c784ab5e2c1ae9b36;hb=0c1fed94374f609e393829648195cecd1cfecf03;hp=2021056d548148926ec344a700938ba338516f8c;hpb=c35154363b56ff97ee04888f1b6ac762f2d7468b;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm index 2021056..7eadf44 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm @@ -183,6 +183,49 @@ L. sub datetime_parser_type { return "DateTime::Format::Oracle"; } +=head2 connect_call_datetime_setup + +Used as: + + on_connect_call => 'datetime_setup' + +In L to set the session nls date, and +timestamp values for use with L and the +necessary environment variables for L, which is used +by it. + +Maximum allowable precision is used, unless the environment variables have +already been set. + +These are the defaults used: + + $ENV{NLS_DATE_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS'; + $ENV{NLS_TIMESTAMP_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF'; + $ENV{NLS_TIMESTAMP_TZ_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS.FF TZHTZM'; + +To get more than second precision with L +for your timestamps, use something like this: + + use Time::HiRes 'time'; + my $ts = DateTime->from_epoch(epoch => time); + +=cut + +sub connect_call_datetime_setup { + my $self = shift; + my $dbh = $self->dbh; + + my $date_format = $ENV{NLS_DATE_FORMAT} ||= 'YYYY-MM-DD HH24:MI:SS'; + my $timestamp_format = $ENV{NLS_TIMESTAMP_FORMAT} ||= + 'YYYY-MM-DD HH24:MI:SS.FF'; + my $timestamp_tz_format = $ENV{NLS_TIMESTAMP_TZ_FORMAT} ||= + 'YYYY-MM-DD HH24:MI:SS.FF TZHTZM'; + + $dbh->do("alter session set nls_date_format = '$date_format'"); + $dbh->do("alter session set nls_timestamp_format = '$timestamp_format'"); + $dbh->do("alter session set nls_timestamp_tz_format='$timestamp_tz_format'"); +} + sub _svp_begin { my ($self, $name) = @_;