better type info for Oracle
[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' },
49 'numeric(6,3)' => { size => [6,3], data_type => 'numeric' },
50 'decimal(6,3)' => { size => [6,3], data_type => 'numeric' },
51
52 # Bit String Types
53 #
54 # XXX alias 'bit varying' to 'varbit'
55 'bit varying(2)' => { size => 2, data_type => 'bit varying' },
56 'varbit(2)' => { size => 2, data_type => 'bit varying' },
57 'varbit' => { size => 1, data_type => 'bit varying' },
58 # XXX support bit(n)
59 bit => { data_type => 'bit' },
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
76 # XXX alias 'character varying' to 'varchar'
77 'character varying(2)' => { size => 2, data_type => 'character varying' },
78 'varchar(2)' => { size => 2, data_type => 'character varying' },
79
80 # XXX alias 'character' to 'char'
81 'character(2)' => { size => 2, data_type => 'character' },
82 'char(2)' => { size => 2, data_type => 'character' },
83 'character' => { size => 1, data_type => 'character' },
84 'char' => { size => 1, data_type => 'character' },
85 text => { data_type => 'text' },
86
87 # Datetime Types
88 date => { data_type => 'date' },
89 interval => { data_type => 'interval' },
90 'interval(2)' => { size => 2, data_type => 'interval' },
91 time => { data_type => 'time without time zone' },
92 'time(2)' => { size => 2, data_type => 'time without time zone' },
df956aad 93 'time without time zone' => { data_type => 'time without time zone' },
ee07e280 94 'time(2) without time zone' => { size => 2, data_type => 'time without time zone' },
df956aad 95 'time with time zone' => { data_type => 'time with time zone' },
ee07e280 96 'time(2) with time zone' => { size => 2, data_type => 'time with time zone' },
760fd65c 97
98 # XXX alias 'timestamp without time zone' to 'timestamp'
5163dc4a 99 timestamp => { data_type => 'timestamp without time zone' },
8e64075f 100 'timestamp default current_timestamp'
6e566cc4 101 => { data_type => 'timestamp without time zone', default_value => \'current_timestamp' },
9065de34 102 'timestamp(2)' => { size => 2, data_type => 'timestamp without time zone' },
df956aad 103 'timestamp without time zone' => { data_type => 'timestamp without time zone' },
ee07e280 104 'timestamp(2) without time zone' => { size => 2, data_type => 'timestamp without time zone' },
760fd65c 105
df956aad 106 'timestamp with time zone' => { data_type => 'timestamp with time zone' },
ee07e280 107 'timestamp(2) with time zone' => { size => 2, data_type => 'timestamp with time zone' },
760fd65c 108
109 # Blob Types
110 bytea => { data_type => 'bytea' },
ee07e280 111 },
fdd8ff16 112 extra => {
113 create => [
114 q{
115 CREATE TABLE pg_loader_test1 (
116 id SERIAL NOT NULL PRIMARY KEY,
117 value VARCHAR(100)
118 )
119 },
120 q{
121 COMMENT ON TABLE pg_loader_test1 IS 'The Table'
122 },
123 q{
124 COMMENT ON COLUMN pg_loader_test1.value IS 'The Column'
125 },
4b9fb838 126 q{
127 CREATE TABLE pg_loader_test2 (
128 id SERIAL NOT NULL PRIMARY KEY,
129 value VARCHAR(100)
130 )
131 },
132 q{
133 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'
134 },
fdd8ff16 135 ],
9065de34 136 drop => [ qw/ pg_loader_test1 pg_loader_test2 / ],
137 count => 3,
fdd8ff16 138 run => sub {
139 my ($schema, $monikers, $classes) = @_;
140
141 my $class = $classes->{pg_loader_test1};
142 my $filename = $schema->_loader->_get_dump_filename($class);
143
9065de34 144 my $code = slurp $filename;
fdd8ff16 145
146 like $code, qr/^=head1 NAME\n\n^$class - The Table\n\n^=cut\n/m,
147 'table comment';
148
79a00530 149 like $code, qr/^=head2 value\n\n(.+:.+\n)+\nThe Column\n\n/m,
150 'column comment and attrs';
baff904e 151
4b9fb838 152 $class = $classes->{pg_loader_test2};
153 $filename = $schema->_loader->_get_dump_filename($class);
154
9065de34 155 $code = slurp $filename;
4b9fb838 156
157 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,
158 'long table comment is in DESCRIPTION';
fdd8ff16 159 },
160 },
a78e3fed 161);
162
9e978a19 163if( !$dsn || !$user ) {
164 $tester->skip_tests('You need to set the DBICTEST_PG_DSN, _USER, and _PASS environment variables');
a78e3fed 165}
166else {
167 $tester->run_tests();
168}
8e64075f 169# vim:et sw=4 sts=4 tw=0: