File Coverage

blib/lib/SQL/Maker/Select/Oracle.pm
Criterion Covered Total %
statement 21 22 95.4
branch 3 6 50.0
condition 1 3 33.3
subroutine 5 5 100.0
pod 1 2 50.0
total 31 38 81.5


line stmt bran cond sub pod time code
1             use strict;
2 17     17   102321 use warnings;
  17         68  
  17         519  
3 17     17   99 use parent qw(SQL::Maker::Select);
  17         47  
  17         490  
4 17     17   7450  
  17         5475  
  17         112  
5             ## Oracle doesn't have the LIMIT clause.
6             return '';
7             }
8 1     1 0 2  
9             ## Override as_sql to emulate the LIMIT clause.
10             my $stmt = shift;
11             my $limit = $stmt->{limit};
12             my $offset = $stmt->{offset};
13 1     1 1 6  
14 1         2 if (defined $limit && defined $offset) {
15 1         2 $stmt->add_select( \"ROW_NUMBER() OVER (ORDER BY 1) R" );
16             }
17 1 50 33     8  
18 1         4 my $sql = $stmt->SUPER::as_sql(@_);
19              
20             if (defined $limit) {
21 1         6 $sql = "SELECT * FROM ( $sql ) WHERE ";
22             if (defined $offset) {
23 1 50       19 $sql = $sql . " R BETWEEN $offset + 1 AND $limit + $offset";
24 1         9 } else {
25 1 50       4 $sql = $sql . " rownum <= $limit";
26 1         5 }
27             }
28 0         0 return $sql;
29             }
30              
31 1         11 'base code from Data::ObjectDriver::SQL::Oracle';