fix Postgres sequence detection for qualified sequences
[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{
116 CREATE TABLE pg_loader_test1 (
117 id SERIAL NOT NULL PRIMARY KEY,
118 value VARCHAR(100)
119 )
120 },
fd97abca 121 qq{
122 COMMENT ON TABLE pg_loader_test1 IS 'The\15\12Table'
fdd8ff16 123 },
fd97abca 124 qq{
125 COMMENT ON COLUMN pg_loader_test1.value IS 'The\15\12Column'
fdd8ff16 126 },
4b9fb838 127 q{
128 CREATE TABLE pg_loader_test2 (
129 id SERIAL NOT NULL PRIMARY KEY,
130 value VARCHAR(100)
131 )
132 },
133 q{
134 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'
135 },
fdd8ff16 136 ],
9065de34 137 drop => [ qw/ pg_loader_test1 pg_loader_test2 / ],
138 count => 3,
fdd8ff16 139 run => sub {
140 my ($schema, $monikers, $classes) = @_;
141
142 my $class = $classes->{pg_loader_test1};
143 my $filename = $schema->_loader->_get_dump_filename($class);
144
9065de34 145 my $code = slurp $filename;
fdd8ff16 146
fd97abca 147 like $code, qr/^=head1 NAME\n\n^$class - The\nTable\n\n^=cut\n/m,
fdd8ff16 148 'table comment';
149
fd97abca 150 like $code, qr/^=head2 value\n\n(.+:.+\n)+\nThe\nColumn\n\n/m,
79a00530 151 'column comment and attrs';
baff904e 152
4b9fb838 153 $class = $classes->{pg_loader_test2};
154 $filename = $schema->_loader->_get_dump_filename($class);
155
9065de34 156 $code = slurp $filename;
4b9fb838 157
158 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,
159 'long table comment is in DESCRIPTION';
fdd8ff16 160 },
161 },
a78e3fed 162);
163
9e978a19 164if( !$dsn || !$user ) {
165 $tester->skip_tests('You need to set the DBICTEST_PG_DSN, _USER, and _PASS environment variables');
a78e3fed 166}
167else {
168 $tester->run_tests();
169}
8e64075f 170# vim:et sw=4 sts=4 tw=0: