1package Class::DBI::Test::SQLite; 2 3=head1 NAME 4 5Class::DBI::Test::SQLite - Base class for Class::DBI tests 6 7=head1 SYNOPSIS 8 9 use base 'Class::DBI::Test::SQLite'; 10 11 __PACKAGE__->set_table('test'); 12 __PACKAGE__->columns(All => qw/id name film salary/); 13 14 sub create_sql { 15 return q{ 16 id INTEGER PRIMARY KEY, 17 name CHAR(40), 18 film VARCHAR(255), 19 salary INT 20 } 21 } 22 23=head1 DESCRIPTION 24 25This provides a simple base class for Class::DBI tests using SQLite. 26Each class for the test should inherit from this, provide a create_sql() 27method which returns a string representing the SQL used to create the 28table for the class, and then call set_table() to create the table, and 29tie it to the class. 30 31=cut 32 33use strict; 34 35use base 'Class::DBI'; 36use File::Temp qw/tempfile/; 37my (undef, $DB) = tempfile(); 38END { unlink $DB if -e $DB } 39 40my @DSN = ("dbi:SQLite:dbname=$DB", '', '', { AutoCommit => 1 }); 41 42__PACKAGE__->connection(@DSN); 43__PACKAGE__->set_sql(_table_pragma => 'PRAGMA table_info(__TABLE__)'); 44__PACKAGE__->set_sql(_create_me => 'CREATE TABLE __TABLE__ (%s)'); 45 46=head1 METHODS 47 48=head2 set_table 49 50 __PACKAGE__->set_table('test'); 51 52This combines creating the table with the normal Class::DBI table() 53call. 54 55=cut 56 57sub set_table { 58 my ($class, $table) = @_; 59 $class->table($table); 60 $class->_create_test_table; 61} 62 63sub _create_test_table { 64 my $class = shift; 65 my @vals = $class->sql__table_pragma->select_row; 66 $class->sql__create_me($class->create_sql)->execute unless @vals; 67} 68 69=head2 create_sql (abstract) 70 71 sub create_sql { 72 return q{ 73 id INTEGER PRIMARY KEY, 74 name CHAR(40), 75 film VARCHAR(255), 76 salary INT 77 } 78 } 79 80This should return, as a text string, the schema for the table represented 81by this class. 82 83=cut 84 85sub create_sql { die "create_sql() not implemented by $_[0]\n" } 86 871; 88