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