From: Alexander Hartmaier Date: Wed, 13 Apr 2011 17:40:01 +0000 (+0200) Subject: moved Oracle datetime bind param transformation to private function X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=7729a3b50927ab653374dd7bae855bf633a36f89;p=dbsrgits%2FDBIx-Class.git moved Oracle datetime bind param transformation to private function --- diff --git a/lib/DBIx/Class/SQLMaker/Oracle.pm b/lib/DBIx/Class/SQLMaker/Oracle.pm index adfb06a..91e0939 100644 --- a/lib/DBIx/Class/SQLMaker/Oracle.pm +++ b/lib/DBIx/Class/SQLMaker/Oracle.pm @@ -245,6 +245,19 @@ sub _insert_returning { ); } +# this is needed because DBD::Oracle doesn't support specifying +# the data type of a bind var as ORA_DATE +sub _modify_datetime_for_bind { + my $date = shift; + + # from the Oracle extract function docs: + # EXTRACT interprets expr as an ANSI datetime datatype. + # For example, EXTRACT treats DATE not as legacy Oracle DATE but as + # ANSI DATE, without time elements. + # Therefore, you can extract only YEAR, MONTH, and DAY from a DATE value. + + return $date eq '?' ? "TO_TIMESTAMP($date)" : $date; +} { my %part_map = ( @@ -262,7 +275,7 @@ sub _insert_returning { die $self->_unsupported_date_extraction($part, 'Oracle') unless exists $part_map{$part}; - my $rhs = $date eq '?' ? "TO_TIMESTAMP($date)" : $date; + my $rhs = _modify_datetime_for_bind($date); return "EXTRACT($part_map{$_[1]} FROM $rhs)"; } @@ -305,7 +318,7 @@ sub _insert_returning { die $self->_unsupported_date_adding($part, 'Oracle') unless exists $part_map{$part}; - my $rhs = $date eq '?' ? "TO_TIMESTAMP($date)" : $date; + my $rhs = _modify_datetime_for_bind($date); return "($rhs + $part_map{$part}($amount, '$part'))"; }