Skip to content

Commit

Permalink
fix ::DateMethods1 for Oracle
Browse files Browse the repository at this point in the history
  • Loading branch information
abraxxa authored and Arthur Axel 'fREW' Schmidt committed Sep 16, 2014
1 parent 5548259 commit c07e59e
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
1 change: 1 addition & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
Revision history for {{$dist->name}}

{{$NEXT}}
- Fix ::Helper::ResultSet::DateMethods1 for Oracle (thanks Alexander Hartmaier!)

2.023006 2014-09-03 17:44:34-05:00 America/Chicago
- Fix a few ::DateMethods1 methods when using a bound date (vs a column)
Expand Down
6 changes: 2 additions & 4 deletions lib/DBIx/Class/Helper/ResultSet/DateMethods1.pm
Original file line number Diff line number Diff line change
Expand Up @@ -291,10 +291,8 @@ sub _introspector {

my ($sql, @args) = @$date_sql;

$sql = "TO_TIMESTAMP($sql)"
if $part =~ /second|minute|hour/;
return [
"EXTRACT($part_map{$part} FROM $sql)", @args
"EXTRACT($part_map{$part} FROM TO_TIMESTAMP($sql))", @args
]
}
});
Expand All @@ -312,7 +310,7 @@ sub _introspector {
die "unknown unit $unit" unless $diff_part_map{$unit};

return [
"($d_sql + NUMTODSINTERVAL($a_sql, ?))",
"(TO_TIMESTAMP($d_sql) + NUMTODSINTERVAL($a_sql, ?))",
@d_args, @a_args, $diff_part_map{$unit}
];
}
Expand Down
28 changes: 20 additions & 8 deletions t/resultset/date-methods-1/oracle.t
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,26 @@ A::ResultSet::DateMethods1->run_tests(Oracle => {
storage_type => 'Oracle',

add_sql_prefix => \[
'("me"."a_date" + NUMTODSINTERVAL(?, ?))', 1, 'SECOND',
'(TO_TIMESTAMP("me"."a_date") + NUMTODSINTERVAL(?, ?))', 1, 'SECOND',
],

add_sql_by_part => {
day => \[ '("a_date" + NUMTODSINTERVAL(?, ?))', 1, 'DAY' ],
hour => \[ '("a_date" + NUMTODSINTERVAL(?, ?))', 2, 'HOUR' ],
minute => \[ '("a_date" + NUMTODSINTERVAL(?, ?))', 3, 'MINUTE' ],
second => \[ '("a_date" + NUMTODSINTERVAL(?, ?))', 5, 'SECOND' ],
day => \[ '(TO_TIMESTAMP("a_date") + NUMTODSINTERVAL(?, ?))', 1, 'DAY' ],
hour => \[ '(TO_TIMESTAMP("a_date") + NUMTODSINTERVAL(?, ?))', 2, 'HOUR' ],
minute => \[ '(TO_TIMESTAMP("a_date") + NUMTODSINTERVAL(?, ?))', 3, 'MINUTE' ],
second => \[ '(TO_TIMESTAMP("a_date") + NUMTODSINTERVAL(?, ?))', 5, 'SECOND' ],
},

add_sql_by_part_result => {
day => '2012-12-13 00:00:00.000000000',
hour => '2012-12-12 02:00:00.000000000',
millisecond => '2012-12-12 00:00:00.007000000',
minute => '2012-12-12 00:03:00.000000000',
month => '2013-04-12 00:00:00.000000000',
quarter => '2015-03-12 00:00:00.000000000',
second => '2012-12-12 00:00:05.000000000',
week => '2013-02-20 00:00:00.000000000',
year => '2018-12-12 00:00:00.000000000',
},

pluck_sql_prefix => \[ 'EXTRACT(SECOND FROM TO_TIMESTAMP("me"."a_date"))' ],
Expand All @@ -41,9 +53,9 @@ A::ResultSet::DateMethods1->run_tests(Oracle => {
second => \[ 'EXTRACT(SECOND FROM TO_TIMESTAMP("a_date"))' ],
minute => \[ 'EXTRACT(MINUTE FROM TO_TIMESTAMP("a_date"))' ],
hour => \[ 'EXTRACT(HOUR FROM TO_TIMESTAMP("a_date"))' ],
day_of_month => \[ 'EXTRACT(DAY FROM "a_date")' ],
month => \[ 'EXTRACT(MONTH FROM "a_date")' ],
year => \[ 'EXTRACT(YEAR FROM "a_date")' ],
day_of_month => \[ 'EXTRACT(DAY FROM TO_TIMESTAMP("a_date"))' ],
month => \[ 'EXTRACT(MONTH FROM TO_TIMESTAMP("a_date"))' ],
year => \[ 'EXTRACT(YEAR FROM TO_TIMESTAMP("a_date"))' ],
},
});

Expand Down

0 comments on commit c07e59e

Please sign in to comment.