Commit | Line | Data |
2f1d53c5 |
1 | package # hide from PAUSE |
2 | DBIx::Class::Test::SQLite; |
ea2e61bf |
3 | |
4 | =head1 NAME |
5 | |
b8e1e21f |
6 | DBIx::Class::Test::SQLite - Base class for running Class::DBI tests against DBIx::Class compat layer, shamelessly ripped from Class::DBI::Test::SQLite |
ea2e61bf |
7 | |
8 | =head1 SYNOPSIS |
9 | |
75d07914 |
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 | |
ea2e61bf |
24 | =head1 DESCRIPTION |
25 | |
c7ce65e6 |
26 | This provides a simple base class for DBIx::Class::CDBICompat tests using |
27 | SQLite. Each class for the test should inherit from this, provide a |
28 | create_sql() method which returns a string representing the SQL used to |
29 | create the table for the class, and then call set_table() to create the |
30 | table, and tie it to the class. |
ea2e61bf |
31 | |
32 | =cut |
33 | |
34 | use strict; |
bf5ecff9 |
35 | use warnings; |
ea2e61bf |
36 | |
126042ee |
37 | use base qw/DBIx::Class/; |
38 | |
eb47985e |
39 | __PACKAGE__->load_components(qw/CDBICompat Core DB/); |
126042ee |
40 | |
ea2e61bf |
41 | use File::Temp qw/tempfile/; |
42 | my (undef, $DB) = tempfile(); |
43 | END { unlink $DB if -e $DB } |
44 | |
126042ee |
45 | my @DSN = ("dbi:SQLite:dbname=$DB", '', '', { AutoCommit => 1, RaiseError => 1 }); |
ea2e61bf |
46 | |
47 | __PACKAGE__->connection(@DSN); |
a3018bd3 |
48 | __PACKAGE__->set_sql(_table_pragma => 'PRAGMA table_info(__TABLE__)'); |
49 | __PACKAGE__->set_sql(_create_me => 'CREATE TABLE __TABLE__ (%s)'); |
bfb2bd4f |
50 | __PACKAGE__->storage->dbh->do("PRAGMA synchronous = OFF"); |
ea2e61bf |
51 | |
52 | =head1 METHODS |
53 | |
54 | =head2 set_table |
55 | |
75d07914 |
56 | __PACKAGE__->set_table('test'); |
ea2e61bf |
57 | |
58 | This combines creating the table with the normal DBIx::Class table() |
59 | call. |
60 | |
61 | =cut |
62 | |
63 | sub set_table { |
75d07914 |
64 | my ($class, $table) = @_; |
65 | $class->table($table); |
66 | $class->_create_test_table; |
ea2e61bf |
67 | } |
68 | |
69 | sub _create_test_table { |
75d07914 |
70 | my $class = shift; |
71 | my @vals = $class->sql__table_pragma->select_row; |
72 | $class->sql__create_me($class->create_sql)->execute unless @vals; |
ea2e61bf |
73 | } |
74 | |
87c4e602 |
75 | =head2 create_sql |
76 | |
77 | This is an abstract method you must override. |
ea2e61bf |
78 | |
75d07914 |
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 | } |
ea2e61bf |
87 | |
88 | This should return, as a text string, the schema for the table represented |
89 | by this class. |
90 | |
91 | =cut |
92 | |
93 | sub create_sql { die "create_sql() not implemented by $_[0]\n" } |
94 | |
95 | 1; |