File Coverage

blib/lib/SQL/Composer/Upsert.pm
Criterion Covered Total %
statement 24 25 96.0
branch 5 6 83.3
condition 1 2 50.0
subroutine 5 5 100.0
pod 0 1 0.0
total 35 39 89.7


line stmt bran cond sub pod time code
1             package SQL::Composer::Upsert;
2              
3 3     3   13710 use strict;
  3         3  
  3         66  
4 3     3   9 use warnings;
  3         3  
  3         54  
5              
6 3     3   309 use SQL::Composer::Insert;
  3         3  
  3         90  
7              
8 3     3   532 our @ISA; BEGIN { @ISA = ('SQL::Composer::Insert') };
9              
10             sub new {
11 3     3 0 3465 my $class = shift;
12 3         10 my (%params) = @_;
13              
14             my $driver = $params{driver}
15 3   50     9 || die 'Cannot create an Upsert object without specifying a `driver`';
16              
17 3         16 my $self = $class->SUPER::new( %params );
18 3         4 my $sql = $self->{sql};
19              
20 3 100       15 if ($driver =~ m/sqlite/i) {
    100          
    50          
21 1         4 $sql =~ s/^INSERT /INSERT OR REPLACE /;
22             }
23             elsif ($driver =~ m/mysql/i) {
24             $sql .= ' ON DUPLICATE KEY UPDATE '
25             . (join ', ' => map {
26 2         5 my $c = $self->_quote($_);
27 2         6 ($c.' = VALUES('.$c.')')
28 1         2 } @{ $self->{columns} });
  1         2  
29             }
30             elsif ($driver =~ m/pg/i) {
31 1         3 $sql .= ' ON CONFLICT DO UPDATE'
32             }
33             else {
34 0         0 die 'The Upsert `driver` (' . $driver . ') is not supported';
35             }
36              
37 3         3 $self->{sql} = $sql;
38              
39 3         7 return $self;
40             }
41              
42             1;
43             __END__