Commit | Line | Data |
2ebeca8e |
1 | BEGIN { |
2 | package SchemaClass::CD; |
3 | |
4 | use base qw(DBIx::Class::Core); |
5 | |
6 | __PACKAGE__->table('cd'); |
7 | __PACKAGE__->add_columns( |
8 | 'id' => { |
9 | data_type => 'integer', |
10 | is_auto_increment => 1, |
11 | }, |
12 | 'title' => { |
13 | data_type => 'varchar', |
14 | size => 100, |
15 | }, |
16 | ); |
17 | __PACKAGE__->set_primary_key('id'); |
18 | |
19 | package SchemaClass; |
20 | |
21 | use base qw(DBIx::Class::Schema); |
22 | |
23 | __PACKAGE__->register_class(CD => 'SchemaClass::CD'); |
24 | |
25 | sub deploy { |
26 | my $self = shift; |
27 | $self->storage->dbh->do(q{ |
28 | CREATE TABLE cd ( |
29 | id INTEGER PRIMARY KEY NOT NULL, |
30 | title varchar(100) NOT NULL |
31 | ); |
32 | }); |
33 | } |
34 | |
35 | sub init { |
36 | my $self = shift; |
37 | $self->deploy; |
38 | $self->resultset('CD')->populate([ |
39 | map { { title => $_ } } 'CD one', 'CD two' |
40 | ]); |
41 | } |
42 | |
43 | } |
44 | |
45 | use Cache::FileCache; |
46 | use DBIx::Class::Cursor::Cached; |
47 | use Test::More 'no_plan'; |
48 | |
e0d8ca03 |
49 | mkdir('t/var'); |
2ebeca8e |
50 | unlink('t/var/test.db'); |
51 | |
52 | my ($dsn, $user, $pass) = ('dbi:SQLite:t/var/test.db'); |
53 | |
54 | SchemaClass->connect($dsn,$user,$pass)->init; |
55 | |
2ebeca8e |
56 | my $expect_data = [ [ 1, 'CD one' ], [ 2, 'CD two' ] ]; |
57 | |
58 | { ## start test block |
59 | |
60 | my $schema = SchemaClass->connect( |
61 | $dsn, $user, $pass, { cursor_class => 'DBIx::Class::Cursor::Cached' } |
62 | ); |
63 | |
64 | $schema->default_resultset_attributes({ |
65 | cache_object => Cache::FileCache->new({ namespace => 'SchemaClass' }), |
66 | }); |
67 | |
68 | my $cache = $schema->default_resultset_attributes->{cache_object}; |
69 | |
70 | my $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 }); |
71 | |
72 | my @cds = $rs->all; # fills cache |
73 | |
74 | is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data, |
75 | 'correct data in objects'); |
76 | is_deeply($cache->get($rs->cursor->cache_key), $expect_data, |
77 | 'correct data in cache'); |
78 | |
79 | $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 }); |
80 | # refresh resultset |
81 | |
82 | $schema->storage->disconnect; |
83 | |
84 | @cds = $rs->all; # uses cache, no SQL run |
85 | |
86 | ok(!$schema->storage->connected, 'no reconnect made since no SQL required'); |
87 | is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data, |
88 | 'correct data in objects'); |
89 | is_deeply($cache->get($rs->cursor->cache_key), $expect_data, |
90 | 'correct data in cache'); |
91 | |
92 | $rs->cursor->clear_cache; # deletes data from cache |
93 | |
94 | ok(!defined($cache->get($rs->cursor->cache_key)), 'cache cleared'); |
95 | |
e0d8ca03 |
96 | @cds = (); while (my $rec = $rs->next) { push(@cds, $rec); } |
2ebeca8e |
97 | |
98 | is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data, |
99 | 'correct data in objects'); |
100 | is_deeply($cache->get($rs->cursor->cache_key), $expect_data, |
101 | 'correct data in cache'); |
102 | |
103 | } |