4 use DBIx::Data::Store::CRUD;
5 use DBIx::Data::Store::Raw;
8 use Scalar::Util qw(refaddr);
11 sort { $a->{name} cmp $b->{name} } @_
14 my $dsn = 'dbi:SQLite:tmp.db';
18 return DBI->connect($dsn, undef, undef, { RaiseError => 1 })
25 id INTEGER NOT NULL PRIMARY KEY,
26 name VARCHAR(255) NOT NULL
29 #my $pop = $dbh->prepare(q{INSERT INTO person (name) VALUES (?)});
30 #my @names = qw(Joe Jim Bob Pterry);
31 #$pop->execute($_) for @names;
33 # my $id = 0; map +{ id => ++$id, name => $_ }, @names
37 my $db_store = DBIx::Data::Store::Raw->connect($dsn);
39 sub raw_store { $db_store }
43 DBIx::Data::Store::CRUD->new({
46 select_all => 'SELECT id, name FROM names',
47 delete_all => 'DELETE FROM names',
48 select_one => 'SELECT id, name FROM names WHERE id = ?',
49 insert_one => 'INSERT INTO names (name) VALUES (?)',# RETURNING (id)',
50 update_one => 'UPDATE names SET name = ? WHERE id = ?',
51 delete_one => 'DELETE FROM names WHERE id = ?',
58 my $store = make_store;
60 is_deeply([$store->flatten], [], 'Empty set');
62 is_deeply($store->add(['Bob']), [1], 'Add record');
64 is_deeply([$store->flatten], [[1,'Bob']], 'One member');
66 is_deeply($store->get([1]), [1,'Bob'], 'Retrieve by key');
68 $store->replace([1],['Robert']);
70 is_deeply([$store->flatten], [[1,'Robert']], 'Name changed (all)');
72 is_deeply($store->get([1]), [1,'Robert'], 'Retrieve by key');
74 $store->add([$_]) for qw(Joe James Jim);
77 [ sort { $a->[0] <=> $b->[0] } $store->flatten ]
80 is_deeply($flatsort->(), [
81 [1,'Robert'],[2,'Joe'],[3,'James'],[4,'Jim']
84 is_deeply($store->get([3]),[3,'James'], 'Retrieve by key');
88 is_deeply($flatsort->(), [
89 [1,'Robert'],[2,'Joe'],[4,'Jim']
90 ], 'Three members left');