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