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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
use Test::More;
use strict;
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 => 60;
use_ok('DBIx::Simple');
}
# In memory database! No file permission troubles, no I/O slowness.
# http://use.perl.org/~tomhukins/journal/31457 ++
my $db = DBIx::Simple->connect('dbi:SQLite:dbname=:memory:');
my $q = 'SELECT FOO, bar, baz FROM xyzzy ORDER BY foo';
ok($db);
eval { $db->query('SYNTAX ERR0R !@#!@#') };
like($@, qr/prepare failed/); # test RaiseError
ok($db->query('CREATE TABLE xyzzy (FOO, bar, baz)'));
ok($db->query('INSERT INTO xyzzy (FOO, bar, baz) VALUES (?, ?, ?)', qw(a b c)));
is_deeply([ $db->query($q)->flat ], [ qw(a b c) ]);
ok($db->query('INSERT INTO xyzzy VALUES (??)', qw(d e f)));
is_deeply([ $db->query($q)->flat ], [ qw(a b c d e f) ]);
ok($db->query("INSERT INTO xyzzy VALUES (?, '(??)', ?)", qw(g h)));
is_deeply([ $db->query($q)->flat ], [ qw(a b c d e f g (??) h) ]);
is_deeply(scalar $db->query($q)->list, 'c');
is_deeply([ $db->query($q)->list ], [ qw(a b c) ]);
is_deeply($db->query($q)->array, [ qw(a b c) ]);
is_deeply(scalar $db->query($q)->arrays, [ [ qw(a b c) ], [ qw(d e f) ], [ qw(g (??) h) ] ]);
is_deeply($db->query($q)->hash, { qw(foo a bar b baz c) });
is_deeply(scalar $db->query($q)->hashes, [ { qw(foo a bar b baz c) }, { qw(foo d bar e baz f) }, { qw(foo g bar (??) baz h) } ]);
is_deeply([ $db->query($q)->kv_list ], [ qw(foo a bar b baz c) ]);
is_deeply(scalar
$db->query($q)->kv_list, [ qw(foo a bar b baz c) ]);
is_deeply( $db->query($q)->kv_array , [ qw(foo a bar b baz c) ]);
is_deeply(scalar $db->query($q)->kv_arrays, [ [ qw(foo a bar b baz c) ], [ qw(foo d bar e baz f) ], [ qw(foo g bar (??) baz h) ] ]);
is_deeply(scalar $db->query($q)->kv_flat, [ qw( foo a bar b baz c foo d bar e baz f foo g bar (??) baz h) ]);
is_deeply(scalar $db->query($q)->columns, [ qw(foo bar baz) ]);
is_deeply([ $db->query($q)->arrays ], scalar $db->query($q)->arrays);
is_deeply([ $db->query($q)->hashes ], scalar $db->query($q)->hashes);
is_deeply([ $db->query($q)->kv_flat ], scalar $db->query($q)->kv_flat);
is_deeply([ $db->query($q)->kv_arrays ], scalar $db->query($q)->kv_arrays);
is_deeply([ $db->query($q)->columns ], scalar $db->query($q)->columns);
is_deeply(scalar $db->query($q)->map_arrays(2), { c => [ qw(a b) ], f => [ qw(d e) ], h => [ qw(g (??)) ] });
is_deeply(scalar $db->query($q)->map_hashes('baz'), { c => { qw(foo a bar b) }, f => { qw(foo d bar e) }, h => { qw(foo g bar (??)) } });
is_deeply(scalar $db->query('SELECT foo, bar FROM xyzzy ORDER BY foo')->map, { qw(a b d e g (??)) });
$db->lc_columns = 0;
is_deeply($db->query($q)->hash, { qw(FOO a bar b baz c) });
is_deeply(scalar $db->query($q)->hashes, [ { qw(FOO a bar b baz c) }, { qw(FOO d bar e baz f) }, { qw(FOO g bar (??) baz h) } ]);
is_deeply(scalar $db->query($q)->columns, [ qw(FOO bar baz) ]);
is_deeply(scalar $db->query($q)->map_hashes('baz'), { c => { qw(FOO a bar b) }, f => { qw(FOO d bar e) }, h => { qw(FOO g bar (??)) } });
$db->lc_columns = 1;
SKIP: {
eval { require SQL::Interp } or skip "SQL::Interp required", 1;
my $c = 'c';
is_deeply(scalar $db->iquery('SELECT * FROM xyzzy WHERE baz =', \$c)->array, [ qw(a b c) ]);
}
SKIP: {
eval { require Object::Accessor } or skip "Object::Accessor required", 21;
my $object = $db->query($q)->object;
isa_ok($object, "DBIx::Simple::Result::RowObject");
is($object->foo, 'a');
is($object->bar, 'b', 'bar is b');
is($object->baz, 'c');
my @objects = $db->query($q)->objects;
isa_ok($objects[0], "DBIx::Simple::Result::RowObject");
is($objects[0]->foo, 'a');
is($objects[0]->bar, 'b');
is($objects[0]->baz, 'c');
isa_ok($objects[1], "DBIx::Simple::Result::RowObject");
is($objects[1]->foo, 'd');
is($objects[1]->bar, 'e');
is($objects[1]->baz, 'f');
sub Mock::new_from_dbix_simple {
my ($class, $result, @foo) = @_;
isa_ok($result, "DBIx::Simple::Result");
is_deeply(\@foo, [ 42, 21 ]);
return wantarray;
}
ok(! $db->query($q)->object('Mock', 42, 21)); # wantarray false
is_deeply( [ $db->query($q)->objects('Mock', 42, 21) ], [ 1 ]); # wantarray true
is_deeply(scalar $db->query($q)->objects('Mock', 42, 21), [ 1 ]); # wantarray true
}
$db->query('INSERT INTO xyzzy (foo, bar, baz) VALUES (??)', 33, 66, 'c');
$db->query('INSERT INTO xyzzy (foo, bar, baz) VALUES (??)', 44, 77, 'f');
$db->query('INSERT INTO xyzzy (foo, bar, baz) VALUES (??)', 55, 88, 'h');
is_deeply(scalar $db->query($q)->group_arrays(2), { c => [ [ qw(33 66) ], [ qw(a b) ] ], f => [ [ qw(44 77) ], [ qw(d e) ] ], h => [ [ qw(55 88) ], [ qw(g (??)) ] ] });
is_deeply(scalar $db->query($q)->group_hashes('baz'), { c => [ { qw(foo 33 bar 66) }, { qw(foo a bar b) } ], f => [ { qw(foo 44 bar 77) }, { qw(foo d bar e) } ], h => [ { qw(foo 55 bar 88) }, { qw(foo g bar (??)) } ] });
is_deeply(scalar $db->query('SELECT baz, foo FROM xyzzy ORDER BY foo')->group, { c => [ qw(33 a) ], f => [ qw(44 d) ], h => [ qw(55 g) ] });
ok($db->disconnect);
|