2 package SchemaClass::CD;
4 use base qw(DBIx::Class::Core);
6 __PACKAGE__->table('cd');
7 __PACKAGE__->add_columns(
9 data_type => 'integer',
10 is_auto_increment => 1,
13 data_type => 'varchar',
17 __PACKAGE__->set_primary_key('id');
21 use base qw(DBIx::Class::Schema);
23 __PACKAGE__->register_class(CD => 'SchemaClass::CD');
27 $self->storage->dbh->do(q{
29 id INTEGER PRIMARY KEY NOT NULL,
30 title varchar(100) NOT NULL
38 $self->resultset('CD')->populate([
39 map { { title => $_ } } 'CD one', 'CD two'
46 use DBIx::Class::Cursor::Cached;
47 use Test::More 'no_plan';
50 unlink('t/var/test.db');
52 my ($dsn, $user, $pass) = ('dbi:SQLite:t/var/test.db');
54 SchemaClass->connect($dsn,$user,$pass)->init;
56 my $expect_data = [ [ 1, 'CD one' ], [ 2, 'CD two' ] ];
60 my $schema = SchemaClass->connect(
61 $dsn, $user, $pass, { cursor_class => 'DBIx::Class::Cursor::Cached' }
64 $schema->default_resultset_attributes({
65 cache_object => Cache::FileCache->new({ namespace => 'SchemaClass' }),
68 my $cache = $schema->default_resultset_attributes->{cache_object};
70 my $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
72 my @cds = $rs->all; # fills cache
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');
79 $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
82 $schema->storage->disconnect;
84 @cds = $rs->all; # uses cache, no SQL run
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');
92 $rs->cursor->clear_cache; # deletes data from cache
94 ok(!defined($cache->get($rs->cursor->cache_key)), 'cache cleared');
96 @cds = (); while (my $rec = $rs->next) { push(@cds, $rec); }
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');
106 my $schema = SchemaClass->connect(
108 DBI->connect('dbi:SQLite:t/var/test.db', '', '', { RaiseError => 1 }) },
109 { cursor_class => 'DBIx::Class::Cursor::Cached' }
112 $schema->default_resultset_attributes({
113 cache_object => Cache::FileCache->new({ namespace => 'SchemaClass' }),
116 my $cache = $schema->default_resultset_attributes->{cache_object};
118 my $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
120 my @cds = $rs->all; # fills cache
122 is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
123 'correct data in objects');
124 is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
125 'correct data in cache');
127 $rs = $schema->resultset('CD')->search(undef, { cache_for => 300 });
130 $schema->storage->disconnect;
132 @cds = $rs->all; # uses cache, no SQL run
134 ok(!$schema->storage->connected, 'no reconnect made since no SQL required');
135 is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
136 'correct data in objects');
137 is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
138 'correct data in cache');
140 $rs->cursor->clear_cache; # deletes data from cache
142 ok(!defined($cache->get($rs->cursor->cache_key)), 'cache cleared');
144 @cds = (); while (my $rec = $rs->next) { push(@cds, $rec); }
146 is_deeply([ map { [ $_->id, $_->title ] } @cds ], $expect_data,
147 'correct data in objects');
148 is_deeply($cache->get($rs->cursor->cache_key), $expect_data,
149 'correct data in cache');