fix breakage on perl 5.8.x related to unloading temporary classes
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / 12pg_common.t
CommitLineData
a78e3fed 1use strict;
c2849787 2use lib qw(t/lib);
fbd83464 3use dbixcsl_common_tests;
fdd8ff16 4use Test::More;
9065de34 5use File::Slurp 'slurp';
a78e3fed 6
9e978a19 7my $dsn = $ENV{DBICTEST_PG_DSN} || '';
8my $user = $ENV{DBICTEST_PG_USER} || '';
9my $password = $ENV{DBICTEST_PG_PASS} || '';
a78e3fed 10
fbd83464 11my $tester = dbixcsl_common_tests->new(
a78e3fed 12 vendor => 'Pg',
13 auto_inc_pk => 'SERIAL NOT NULL PRIMARY KEY',
9e978a19 14 dsn => $dsn,
a78e3fed 15 user => $user,
16 password => $password,
c930f78b 17 loader_options => { preserve_case => 1 },
c38ec663 18 connect_info_opts => {
19 on_connect_do => [ 'SET client_min_messages=WARNING' ],
20 },
c930f78b 21 quote_char => '"',
ee07e280 22 data_types => {
760fd65c 23 # http://www.postgresql.org/docs/7.4/interactive/datatype.html
24 #
25 # Numeric Types
26 boolean => { data_type => 'boolean' },
27 bool => { data_type => 'boolean' },
45321eda 28 'bool default false'
29 => { data_type => 'boolean', default_value => \'false' },
760fd65c 30
31 bigint => { data_type => 'bigint' },
32 int8 => { data_type => 'bigint' },
33 bigserial => { data_type => 'bigint', is_auto_increment => 1 },
34 serial8 => { data_type => 'bigint', is_auto_increment => 1 },
5163dc4a 35 integer => { data_type => 'integer' },
36 int => { data_type => 'integer' },
37 int4 => { data_type => 'integer' },
5163dc4a 38 serial => { data_type => 'integer', is_auto_increment => 1 },
39 serial4 => { data_type => 'integer', is_auto_increment => 1 },
760fd65c 40 smallint => { data_type => 'smallint' },
41 int2 => { data_type => 'smallint' },
42
43 money => { data_type => 'money' },
44
45 'double precision' => { data_type => 'double precision' },
46 float8 => { data_type => 'double precision' },
47 real => { data_type => 'real' },
48 float4 => { data_type => 'real' },
49 'float(24)' => { data_type => 'real' },
50 'float(25)' => { data_type => 'double precision' },
51 'float(53)' => { data_type => 'double precision' },
52 float => { data_type => 'double precision' },
53
54 numeric => { data_type => 'numeric' },
55 decimal => { data_type => 'numeric' },
f80b0ea7 56 'numeric(6,3)' => { data_type => 'numeric', size => [6,3] },
57 'decimal(6,3)' => { data_type => 'numeric', size => [6,3] },
760fd65c 58
59 # Bit String Types
f80b0ea7 60 'bit varying(2)' => { data_type => 'varbit', size => 2 },
61 'varbit(2)' => { data_type => 'varbit', size => 2 },
62 'varbit' => { data_type => 'varbit' },
63 bit => { data_type => 'bit', size => 1 },
64 'bit(3)' => { data_type => 'bit', size => 3 },
760fd65c 65
66 # Network Types
67 inet => { data_type => 'inet' },
68 cidr => { data_type => 'cidr' },
69 macaddr => { data_type => 'macaddr' },
70
71 # Geometric Types
72 point => { data_type => 'point' },
73 line => { data_type => 'line' },
74 lseg => { data_type => 'lseg' },
75 box => { data_type => 'box' },
76 path => { data_type => 'path' },
77 polygon => { data_type => 'polygon' },
78 circle => { data_type => 'circle' },
79
80 # Character Types
f80b0ea7 81 'character varying(2)' => { data_type => 'varchar', size => 2 },
82 'varchar(2)' => { data_type => 'varchar', size => 2 },
83 'character(2)' => { data_type => 'char', size => 2 },
84 'char(2)' => { data_type => 'char', size => 2 },
85 'character' => { data_type => 'char', size => 1 },
86 'char' => { data_type => 'char', size => 1 },
760fd65c 87 text => { data_type => 'text' },
f80b0ea7 88 # varchar with no size has unlimited size, we rewrite to 'text'
8e030521 89 varchar => { data_type => 'text',
90 original => { data_type => 'varchar' } },
760fd65c 91
92 # Datetime Types
93 date => { data_type => 'date' },
94 interval => { data_type => 'interval' },
f80b0ea7 95 'interval(2)' => { data_type => 'interval', size => 2 },
8e030521 96 time => { data_type => 'time' },
97 'time(2)' => { data_type => 'time', size => 2 },
98 'time without time zone' => { data_type => 'time' },
99 'time(2) without time zone' => { data_type => 'time', size => 2 },
df956aad 100 'time with time zone' => { data_type => 'time with time zone' },
f80b0ea7 101 'time(2) with time zone' => { data_type => 'time with time zone', size => 2 },
102 timestamp => { data_type => 'timestamp' },
701cd3e3 103 'timestamp default now()'
104 => { data_type => 'timestamp', default_value => \'current_timestamp',
105 original => { default_value => \'now()' } },
f80b0ea7 106 'timestamp(2)' => { data_type => 'timestamp', size => 2 },
107 'timestamp without time zone' => { data_type => 'timestamp' },
108 'timestamp(2) without time zone' => { data_type => 'timestamp', size => 2 },
760fd65c 109
df956aad 110 'timestamp with time zone' => { data_type => 'timestamp with time zone' },
f80b0ea7 111 'timestamp(2) with time zone' => { data_type => 'timestamp with time zone', size => 2 },
760fd65c 112
113 # Blob Types
114 bytea => { data_type => 'bytea' },
12333562 115
116 # Enum Types
b8ae4518 117 pg_loader_test_enum => { data_type => 'enum', extra => { custom_type_name => 'pg_loader_test_enum',
463c86fb 118 list => [ qw/foo bar baz/] } },
ee07e280 119 },
12333562 120 pre_create => [
121 q{
122 CREATE TYPE pg_loader_test_enum AS ENUM (
123 'foo', 'bar', 'baz'
124 )
125 },
126 ],
fdd8ff16 127 extra => {
128 create => [
129 q{
7b868481 130 CREATE SCHEMA dbicsl_test
131 },
132 q{
133 CREATE SEQUENCE dbicsl_test.myseq
134 },
135 q{
fdd8ff16 136 CREATE TABLE pg_loader_test1 (
7b868481 137 id INTEGER NOT NULL DEFAULT nextval('dbicsl_test.myseq') PRIMARY KEY,
fdd8ff16 138 value VARCHAR(100)
139 )
140 },
fd97abca 141 qq{
142 COMMENT ON TABLE pg_loader_test1 IS 'The\15\12Table'
fdd8ff16 143 },
fd97abca 144 qq{
145 COMMENT ON COLUMN pg_loader_test1.value IS 'The\15\12Column'
fdd8ff16 146 },
4b9fb838 147 q{
148 CREATE TABLE pg_loader_test2 (
149 id SERIAL NOT NULL PRIMARY KEY,
150 value VARCHAR(100)
151 )
152 },
153 q{
154 COMMENT ON TABLE pg_loader_test2 IS 'very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long comment'
155 },
fdd8ff16 156 ],
7b868481 157 pre_drop_ddl => [
158 'DROP SCHEMA dbicsl_test CASCADE',
12333562 159 'DROP TYPE pg_loader_test_enum',
7b868481 160 ],
9065de34 161 drop => [ qw/ pg_loader_test1 pg_loader_test2 / ],
7b868481 162 count => 4,
fdd8ff16 163 run => sub {
164 my ($schema, $monikers, $classes) = @_;
165
7b868481 166 is $schema->source($monikers->{pg_loader_test1})->column_info('id')->{sequence},
167 'dbicsl_test.myseq',
168 'qualified sequence detected';
169
fdd8ff16 170 my $class = $classes->{pg_loader_test1};
1ad8e8c3 171 my $filename = $schema->_loader->get_dump_filename($class);
fdd8ff16 172
9065de34 173 my $code = slurp $filename;
fdd8ff16 174
fd97abca 175 like $code, qr/^=head1 NAME\n\n^$class - The\nTable\n\n^=cut\n/m,
fdd8ff16 176 'table comment';
177
fd97abca 178 like $code, qr/^=head2 value\n\n(.+:.+\n)+\nThe\nColumn\n\n/m,
79a00530 179 'column comment and attrs';
baff904e 180
4b9fb838 181 $class = $classes->{pg_loader_test2};
1ad8e8c3 182 $filename = $schema->_loader->get_dump_filename($class);
4b9fb838 183
9065de34 184 $code = slurp $filename;
4b9fb838 185
186 like $code, qr/^=head1 NAME\n\n^$class\n\n=head1 DESCRIPTION\n\n^very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long comment\n\n^=cut\n/m,
187 'long table comment is in DESCRIPTION';
fdd8ff16 188 },
189 },
a78e3fed 190);
191
9e978a19 192if( !$dsn || !$user ) {
193 $tester->skip_tests('You need to set the DBICTEST_PG_DSN, _USER, and _PASS environment variables');
a78e3fed 194}
195else {
196 $tester->run_tests();
197}
8e64075f 198# vim:et sw=4 sts=4 tw=0: