The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use strict;
use warnings;
use SQL::Executor;
use Test::More;
use t::Util;
use Try::Tiny;


my $dbh = prepare_dbh();


subtest 'select_row', sub {
    my $db = SQL::Executor->new($dbh);
    run_and_check_exception(sub { 
        $db->select_row('TEST', { id => \'no_exist_func()' });
    });
};

subtest 'select_all', sub {
    my $db = SQL::Executor->new($dbh);
    run_and_check_exception(sub { 
        $db->select_all('TEST', { id => \'no_exist_func()' });
    });
};

subtest 'select_itr', sub {
    my $db = SQL::Executor->new($dbh);
    run_and_check_exception(sub { 
        $db->select_itr('TEST', { id => \'no_exist_func()' });
    });
};

subtest 'execute_query', sub {
    my $db = SQL::Executor->new($dbh);
    run_and_check_exception(sub { 
        $db->execute_query("INSERT INTO TEST (id) VALUES( no_exist_fun() )");
    });
};

subtest 'execute_query_named', sub {
    my $db = SQL::Executor->new($dbh);
    run_and_check_exception(sub { 
        $db->execute_query_named("INSERT INTO TEST (id) VALUES( no_exist_fun() )");
    });
};


sub run_and_check_exception {
    my ($callback) = @_;
    try {
        $callback->();
        fail 'exception expected';
    } catch {
        #diag "$_\n";
        like( $_, qr/at $0 line \d+/ );#contains error and line no in this test
    }
}



done_testing;