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