rewrite Pg "time without time zone" as "time"
[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,
ee07e280 17 data_types => {
760fd65c 18 # http://www.postgresql.org/docs/7.4/interactive/datatype.html
19 #
20 # Numeric Types
21 boolean => { data_type => 'boolean' },
22 bool => { data_type => 'boolean' },
23
24 bigint => { data_type => 'bigint' },
25 int8 => { data_type => 'bigint' },
26 bigserial => { data_type => 'bigint', is_auto_increment => 1 },
27 serial8 => { data_type => 'bigint', is_auto_increment => 1 },
5163dc4a 28 integer => { data_type => 'integer' },
29 int => { data_type => 'integer' },
30 int4 => { data_type => 'integer' },
5163dc4a 31 serial => { data_type => 'integer', is_auto_increment => 1 },
32 serial4 => { data_type => 'integer', is_auto_increment => 1 },
760fd65c 33 smallint => { data_type => 'smallint' },
34 int2 => { data_type => 'smallint' },
35
36 money => { data_type => 'money' },
37
38 'double precision' => { data_type => 'double precision' },
39 float8 => { data_type => 'double precision' },
40 real => { data_type => 'real' },
41 float4 => { data_type => 'real' },
42 'float(24)' => { data_type => 'real' },
43 'float(25)' => { data_type => 'double precision' },
44 'float(53)' => { data_type => 'double precision' },
45 float => { data_type => 'double precision' },
46
47 numeric => { data_type => 'numeric' },
48 decimal => { data_type => 'numeric' },
f80b0ea7 49 'numeric(6,3)' => { data_type => 'numeric', size => [6,3] },
50 'decimal(6,3)' => { data_type => 'numeric', size => [6,3] },
760fd65c 51
52 # Bit String Types
f80b0ea7 53 'bit varying(2)' => { data_type => 'varbit', size => 2 },
54 'varbit(2)' => { data_type => 'varbit', size => 2 },
55 'varbit' => { data_type => 'varbit' },
56 bit => { data_type => 'bit', size => 1 },
57 'bit(3)' => { data_type => 'bit', size => 3 },
760fd65c 58
59 # Network Types
60 inet => { data_type => 'inet' },
61 cidr => { data_type => 'cidr' },
62 macaddr => { data_type => 'macaddr' },
63
64 # Geometric Types
65 point => { data_type => 'point' },
66 line => { data_type => 'line' },
67 lseg => { data_type => 'lseg' },
68 box => { data_type => 'box' },
69 path => { data_type => 'path' },
70 polygon => { data_type => 'polygon' },
71 circle => { data_type => 'circle' },
72
73 # Character Types
f80b0ea7 74 'character varying(2)' => { data_type => 'varchar', size => 2 },
75 'varchar(2)' => { data_type => 'varchar', size => 2 },
76 'character(2)' => { data_type => 'char', size => 2 },
77 'char(2)' => { data_type => 'char', size => 2 },
78 'character' => { data_type => 'char', size => 1 },
79 'char' => { data_type => 'char', size => 1 },
760fd65c 80 text => { data_type => 'text' },
f80b0ea7 81 # varchar with no size has unlimited size, we rewrite to 'text'
8e030521 82 varchar => { data_type => 'text',
83 original => { data_type => 'varchar' } },
760fd65c 84
85 # Datetime Types
86 date => { data_type => 'date' },
87 interval => { data_type => 'interval' },
f80b0ea7 88 'interval(2)' => { data_type => 'interval', size => 2 },
8e030521 89 time => { data_type => 'time' },
90 'time(2)' => { data_type => 'time', size => 2 },
91 'time without time zone' => { data_type => 'time' },
92 'time(2) without time zone' => { data_type => 'time', size => 2 },
df956aad 93 'time with time zone' => { data_type => 'time with time zone' },
f80b0ea7 94 'time(2) with time zone' => { data_type => 'time with time zone', size => 2 },
95 timestamp => { data_type => 'timestamp' },
8e64075f 96 'timestamp default current_timestamp'
f80b0ea7 97 => { data_type => 'timestamp', default_value => \'current_timestamp' },
98 'timestamp(2)' => { data_type => 'timestamp', size => 2 },
99 'timestamp without time zone' => { data_type => 'timestamp' },
100 'timestamp(2) without time zone' => { data_type => 'timestamp', size => 2 },
760fd65c 101
df956aad 102 'timestamp with time zone' => { data_type => 'timestamp with time zone' },
f80b0ea7 103 'timestamp(2) with time zone' => { data_type => 'timestamp with time zone', size => 2 },
760fd65c 104
105 # Blob Types
106 bytea => { data_type => 'bytea' },
ee07e280 107 },
fdd8ff16 108 extra => {
109 create => [
110 q{
111 CREATE TABLE pg_loader_test1 (
112 id SERIAL NOT NULL PRIMARY KEY,
113 value VARCHAR(100)
114 )
115 },
116 q{
117 COMMENT ON TABLE pg_loader_test1 IS 'The Table'
118 },
119 q{
120 COMMENT ON COLUMN pg_loader_test1.value IS 'The Column'
121 },
4b9fb838 122 q{
123 CREATE TABLE pg_loader_test2 (
124 id SERIAL NOT NULL PRIMARY KEY,
125 value VARCHAR(100)
126 )
127 },
128 q{
129 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'
130 },
fdd8ff16 131 ],
9065de34 132 drop => [ qw/ pg_loader_test1 pg_loader_test2 / ],
133 count => 3,
fdd8ff16 134 run => sub {
135 my ($schema, $monikers, $classes) = @_;
136
137 my $class = $classes->{pg_loader_test1};
138 my $filename = $schema->_loader->_get_dump_filename($class);
139
9065de34 140 my $code = slurp $filename;
fdd8ff16 141
142 like $code, qr/^=head1 NAME\n\n^$class - The Table\n\n^=cut\n/m,
143 'table comment';
144
79a00530 145 like $code, qr/^=head2 value\n\n(.+:.+\n)+\nThe Column\n\n/m,
146 'column comment and attrs';
baff904e 147
4b9fb838 148 $class = $classes->{pg_loader_test2};
149 $filename = $schema->_loader->_get_dump_filename($class);
150
9065de34 151 $code = slurp $filename;
4b9fb838 152
153 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,
154 'long table comment is in DESCRIPTION';
fdd8ff16 155 },
156 },
a78e3fed 157);
158
9e978a19 159if( !$dsn || !$user ) {
160 $tester->skip_tests('You need to set the DBICTEST_PG_DSN, _USER, and _PASS environment variables');
a78e3fed 161}
162else {
163 $tester->run_tests();
164}
8e64075f 165# vim:et sw=4 sts=4 tw=0: