File Coverage

blib/lib/SQL/Maker/Select/Oracle.pm
Criterion Covered Total %
statement 20 22 90.9
branch 3 6 50.0
condition 1 3 33.3
subroutine 4 5 80.0
pod 1 2 50.0
total 29 38 76.3


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