use Test::More; use Test::Exception; use strict; # modified DBIx::Simple sqlite.t - to test LIMS::Local::DBIxSimple BEGIN { eval { require DBD::SQLite; 1 } or plan skip_all => 'DBD::SQLite required'; eval { DBD::SQLite->VERSION >= 1 } or plan skip_all => 'DBD::SQLite >= 1.00 required'; plan tests => 23; use_ok('LIMS::Local::DBIxSimple'); } use Data::Dumper; # In memory database! No file permission troubles, no I/O slowness. # http://use.perl.org/~tomhukins/journal/31457 ++ my $db = LIMS::Local::DBIxSimple->connect('dbi:SQLite:dbname=:memory:'); ok($db); eval { $db->query('SYNTAX ERR0R !@#!@#') }; # warn Dumper $@; like($@, qr/prepare failed/); # test RaiseError # original (modified) setup + tests: #=============================================================================== ok($db->query('CREATE TABLE xyz (wun, too, tree)')); ok($db->query('INSERT INTO xyz (wun, too, tree) VALUES (?, ?, ?)', qw(a b c))); ok($db->query('INSERT INTO xyz VALUES (??)', qw(d e f))); is_deeply([ $db->query('SELECT * FROM xyz')->flat ], [ qw(a b c d e f) ]); #=============================================================================== { # 1 individual placeholders my $sql = 'SELECT * FROM xyz WHERE wun = ?'; my $result = $db->query($sql, qw/a/ )->flat; is_deeply($result, [ qw(a b c) ]); } { # 2 individual placeholders my $sql = 'SELECT * FROM xyz WHERE wun = ? and too = ?'; my $result = $db->query($sql, qw/a b/ )->flat; is_deeply($result, [ qw(a b c) ]); } { # variant of above, negated val my $sql = 'SELECT * FROM xyz WHERE wun = ? and too != ?'; my $result = $db->query($sql, qw/a e/ )->flat; is_deeply($result, [ qw(a b c) ]); } { # 3 individual placeholders my $sql = 'SELECT * FROM xyz WHERE wun = ? and too = ? and tree = ?'; my $result = $db->query($sql, qw/d e f/ )->flat; is_deeply($result, [ qw(d e f) ]); } { # 1 placeholder, 1 omniplaceholder my $sql = 'SELECT * FROM xyz WHERE wun = ? and too IN (??)'; my $result = $db->query($sql, qw/a b z/ )->flat; is_deeply($result, [ qw(a b c) ]); } { # 1 omniplaceholder, 1 placeholder my $sql = 'SELECT * FROM xyz WHERE wun IN (??) and tree = ?'; my $result = $db->query($sql, qw/a z c/ )->flat; is_deeply($result, [ qw(a b c) ]); } { # 2 placeholders, 1 omniplaceholder my $sql = 'SELECT * FROM xyz WHERE wun = ? and too = ? and tree IN (??)'; my $result = $db->query($sql, qw/d e z f/ )->flat; # warn Dumper $result; is_deeply($result, [ qw(d e f) ]); } { # 2 placeholders, 1 omniplaceholder (negative) my $sql = 'SELECT * FROM xyz WHERE wun = ? and too = ? and tree NOT IN (??)'; my $result = $db->query($sql, qw/a b y z/ )->flat; # warn Dumper $result; is_deeply($result, [ qw(a b c) ]); } { # 1 placeholder, 1 omniplaceholder, 1 placeholder my $sql = 'SELECT * FROM xyz WHERE wun = ? and too IN (??) and tree = ?'; my $result = $db->query($sql, qw/a b z c/ )->flat; # warn Dumper $result; is_deeply($result, [ qw(a b c) ]); } { # 1 omniplaceholder, 2 placeholders my $sql = 'SELECT * FROM xyz WHERE wun IN (??) and too = ? and tree = ?'; my $result = $db->query($sql, qw/d z e f/ )->flat; # warn Dumper $result; is_deeply($result, [ qw(d e f) ]); } { # 1 omniplaceholder with many opts, 1 placeholder my $sql = 'SELECT * FROM xyz WHERE wun IN (??) and too = ?'; my $result = $db->query($sql, qw/a n m o p q r s t b/ )->flat; # warn Dumper $result; is_deeply($result, [ qw(a b c) ]); } { # 2 onmiplaceholders - fatal: my $sql = 'SELECT * FROM xyz WHERE wun IN (??) and too IN (??)'; dies_ok { $db->query($sql, qw/d z e z/ )->flat; } 'there can be only one omniholder'; } ok($db->query('INSERT INTO xyz (wun, too, tree) VALUES (?, ?, ?)', qw(g h), 'is this a question?')); is_deeply([ $db->query('SELECT * FROM xyz')->flat ], [ qw(a b c d e f g h), 'is this a question?' ]); { # can cope with question in query: my $sql = 'SELECT * FROM xyz WHERE wun IN (??) and tree = ?'; my $result = $db->query($sql, qw(g x y z), 'is this a question?')->flat; # warn Dumper $result; is_deeply($result, [ qw(g h), 'is this a question?' ]); } ok($db->disconnect);