The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use lib 't/lib';
use Util;
use Test::More;

my $test = mk_test 'insert';

$test->(
    desc    => 'hash',
    input   => [foo => ordered_hashref(bar => 'baz', hoge => 'fuga')],
    expects => {
        stmt => 'INSERT INTO `foo` (`bar`, `hoge`) VALUES (?, ?)',
        bind => [qw/baz fuga/],
    },
);

$test->(
    desc    => 'multi value in array',
    input   => [foo => [ bar => 'baz', hoge => 'fuga' ]],
    expects => {
        stmt => 'INSERT INTO `foo` (`bar`, `hoge`) VALUES (?, ?)',
        bind => [qw/baz fuga/],
    },
);

$test->(
    desc    => 'scalar in array',
    input   => [foo => [ bar => \'UNIX_TIMSTAMP()' ]],
    expects => {
        stmt => 'INSERT INTO `foo` (`bar`) VALUES (UNIX_TIMSTAMP())',
        bind => [],
    },
);

$test->(
    desc    => 'ref-array in array',
    input   => [foo => [ bar => \['UNIX_TIMSTAMP(?)', '2011-11-11 11:11:11'] ]],
    expects => {
        stmt => 'INSERT INTO `foo` (`bar`) VALUES (UNIX_TIMSTAMP(?))',
        bind => ['2011-11-11 11:11:11'],
    },
);

$test->(
    desc    => 'custom prefix',
    input   => [foo => { bar => 'baz' }, { prefix => 'INSERT IGNORE INTO' }],
    expects => {
        stmt => 'INSERT IGNORE INTO `foo` (`bar`) VALUES (?)',
        bind => [qw/baz/],
    },
);

done_testing;