Commit | Line | Data |
54bed31b |
1 | use strictures 1; |
2 | use Test::More; |
3 | |
4 | use DBIx::Data::Store::CRUD; |
5 | use DBIx::Data::Store::Raw; |
6 | |
7 | use DBI; |
8 | use Scalar::Util qw(refaddr); |
9 | |
10 | sub sort_set { |
11 | sort { $a->{name} cmp $b->{name} } @_ |
12 | } |
13 | |
14 | my $dsn = 'dbi:SQLite:tmp.db'; |
15 | |
16 | sub setup_dbh { |
17 | unlink('tmp.db'); |
18 | return DBI->connect($dsn, undef, undef, { RaiseError => 1 }) |
19 | } |
20 | |
21 | sub setup_db { |
22 | my $dbh = setup_dbh; |
23 | $dbh->do(q{ |
24 | CREATE TABLE names ( |
25 | id INTEGER NOT NULL PRIMARY KEY, |
26 | name VARCHAR(255) NOT NULL |
27 | ) |
28 | }); |
29 | #my $pop = $dbh->prepare(q{INSERT INTO person (name) VALUES (?)}); |
30 | #my @names = qw(Joe Jim Bob Pterry); |
31 | #$pop->execute($_) for @names; |
32 | #return sort_set do { |
33 | # my $id = 0; map +{ id => ++$id, name => $_ }, @names |
34 | #}; |
35 | } |
36 | |
37 | my $db_store = DBIx::Data::Store::Raw->connect($dsn); |
38 | |
39 | sub raw_store { $db_store } |
40 | |
41 | sub make_store { |
42 | my ($crud) = @_; |
43 | DBIx::Data::Store::CRUD->new({ |
44 | raw => $db_store, |
45 | sql => { |
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 = ?', |
52 | }, |
53 | }); |
54 | } |
55 | |
56 | setup_db; |
57 | |
58 | my $store = make_store; |
59 | |
60 | is_deeply([$store->flatten], [], 'Empty set'); |
61 | |
62 | is_deeply($store->add(['Bob']), [1], 'Add record'); |
63 | |
64 | is_deeply([$store->flatten], [[1,'Bob']], 'One member'); |
65 | |
66 | is_deeply($store->get([1]), [1,'Bob'], 'Retrieve by key'); |
67 | |
68 | $store->replace([1],['Robert']); |
69 | |
70 | is_deeply([$store->flatten], [[1,'Robert']], 'Name changed (all)'); |
71 | |
72 | is_deeply($store->get([1]), [1,'Robert'], 'Retrieve by key'); |
73 | |
74 | $store->add([$_]) for qw(Joe James Jim); |
75 | |
76 | my $flatsort = sub { |
77 | [ sort { $a->[0] <=> $b->[0] } $store->flatten ] |
78 | }; |
79 | |
80 | is_deeply($flatsort->(), [ |
81 | [1,'Robert'],[2,'Joe'],[3,'James'],[4,'Jim'] |
82 | ], 'Four members'); |
83 | |
84 | is_deeply($store->get([3]),[3,'James'], 'Retrieve by key'); |
85 | |
86 | $store->remove([3]); |
87 | |
88 | is_deeply($flatsort->(), [ |
89 | [1,'Robert'],[2,'Joe'],[4,'Jim'] |
90 | ], 'Three members left'); |
91 | |
92 | done_testing; |