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