1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#!/usr/bin/perl
use warnings;
use strict;
use 5.010;
use Test::More tests => 3;
use SQL::Tiny ':all';
test_update(
'users',
{
lockdate => undef,
qty => \[ 'TRUNC(?)', 19.85 ],
status => 'X',
},
{
orderdate => \'SYSDATE()',
qty => \[ 'ROUND(?)', 14.5 ],
},
'UPDATE users SET lockdate=NULL, qty=TRUNC(?), status=? WHERE orderdate=SYSDATE() AND qty=ROUND(?)',
[ 19.85, 'X', 14.5 ],
'Standard mish-mash'
);
test_update(
'wipe',
{
finagle => 4,
},
{},
'UPDATE wipe SET finagle=?',
[ 4 ],
'No WHERE restrictions'
);
test_update(
'fishy',
{
bingo => 'bongo',
},
{
status => [qw( A B C )],
width => [ 5, 6 ],
},
'UPDATE fishy SET bingo=? WHERE status IN (?,?,?) AND width IN (?,?)',
[ 'bongo', 'A', 'B', 'C', 5, 6 ],
'WHERE clause has INs',
);
done_testing();
exit 0;
sub test_update {
local $Test::Builder::Level = $Test::Builder::Level + 1;
my $table = shift;
my $values = shift;
my $where = shift;
my $expected_sql = shift;
my $expected_binds = shift;
my $msg = shift;
return subtest "$msg: $expected_sql" => sub {
plan tests => 2;
my ($sql,$binds) = sql_update( $table, $values, $where );
is( $sql, $expected_sql, 'SQL matches' );
is_deeply( $binds, $expected_binds, 'Binds match' );
};
}
|