Commit | Line | Data |
a78e3fed |
1 | use strict; |
c2849787 |
2 | use lib qw(t/lib); |
fbd83464 |
3 | use dbixcsl_common_tests; |
8fdd52a2 |
4 | use Test::More; |
a78e3fed |
5 | |
9e978a19 |
6 | my $dsn = $ENV{DBICTEST_MYSQL_DSN} || ''; |
7 | my $user = $ENV{DBICTEST_MYSQL_USER} || ''; |
8 | my $password = $ENV{DBICTEST_MYSQL_PASS} || ''; |
9 | my $test_innodb = $ENV{DBICTEST_MYSQL_INNODB} || 0; |
a78e3fed |
10 | |
9e978a19 |
11 | my $skip_rels_msg = 'You need to set the DBICTEST_MYSQL_INNODB environment variable to test relationships'; |
a78e3fed |
12 | |
fbd83464 |
13 | my $tester = dbixcsl_common_tests->new( |
52bf3f26 |
14 | vendor => 'Mysql', |
15 | auto_inc_pk => 'INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT', |
16 | innodb => $test_innodb ? q{Engine=InnoDB} : 0, |
17 | dsn => $dsn, |
18 | user => $user, |
19 | password => $password, |
309e2aa1 |
20 | connect_info_opts=> { on_connect_call => 'set_strict_mode' }, |
52bf3f26 |
21 | skip_rels => $test_innodb ? 0 : $skip_rels_msg, |
22 | no_inline_rels => 1, |
23 | no_implicit_rels => 1, |
98857177 |
24 | data_types => { |
25 | # http://dev.mysql.com/doc/refman/5.5/en/data-type-overview.html |
26 | # Numeric Types |
27 | 'smallint ' => { data_type => 'SMALLINT', size => 6 }, # Space in key makes column name smallint_ |
28 | 'mediumint ' => { data_type => 'MEDIUMINT', size => 9 }, # to avoid MySQL reserved word. |
29 | 'int ' => { data_type => 'INT', size => 11 }, |
30 | 'integer ' => { data_type => 'INT', size => 11 }, |
31 | 'bigint ' => { data_type => 'BIGINT', size => 20 }, |
32 | 'serial ' => { data_type => 'BIGINT', size => 20, is_auto_increment => 1, extra => {unsigned => 1} }, |
33 | 'float ' => { data_type => 'FLOAT', size => 32 }, |
34 | 'double ' => { data_type => 'DOUBLE', size => 64 }, |
35 | 'double precision' => |
36 | { data_type => 'DOUBLE', size => 64 }, |
37 | 'decimal ' => { data_type => 'DECIMAL', size => 10 }, |
38 | 'dec ' => { data_type => 'DECIMAL', size => 10 }, |
39 | 'fixed ' => { data_type => 'DECIMAL', size => 10 }, |
40 | # Date and Time Types |
41 | 'date ' => { data_type => 'DATE', size => 10 }, |
42 | 'datetime ' => { data_type => 'DATETIME', size => 19 }, |
43 | 'timestamp ' => { data_type => 'TIMESTAMP', size => 14, default_value => \"CURRENT_TIMESTAMP" }, |
44 | 'time ' => { data_type => 'TIME', size => 8 }, |
45 | 'year ' => { data_type => 'YEAR', size => 4 }, |
46 | # String Types |
47 | 'char ' => { data_type => 'CHAR', size => 1 }, |
48 | 'varchar(20)' => { data_type => 'VARCHAR', size => 20 }, |
49 | 'binary(1)' => { data_type => 'BINARY', size => 1 }, |
50 | 'varbinary(1)' => { data_type => 'VARBINARY', size => 1 }, |
51 | 'tinytext ' => { data_type => 'TINYTEXT', size => 255 }, |
52 | 'text ' => { data_type => 'TEXT', size => 65535 }, |
53 | 'longtext ' => { data_type => 'LONGTEXT', size => 4294967295 }, |
54 | 'tinyblob ' => { data_type => 'TINYBLOB', size => 255 }, |
55 | 'blob ' => { data_type => 'BLOB', size => 65535 }, |
56 | 'mediumblob ' => { data_type => 'MEDIUMBLOB',size => 16777215 }, |
57 | 'longblob ' => { data_type => 'LONGBLOB', size => 4294967295 }, |
58 | # Hmm... need some t/lib/dbixcsl_common_tests.pm hackery to get these working I think... |
59 | # 'enum(1,2,3)' => { data_type => 'ENUM', size => 1 }, |
60 | # 'set(1,2,3)' => { data_type => 'SET', size => 1 }, |
61 | }, |
8fdd52a2 |
62 | extra => { |
63 | create => [ |
64 | qq{ |
65 | CREATE TABLE mysql_loader_test1 ( |
46bef65f |
66 | id INTEGER UNSIGNED NOT NULL PRIMARY KEY, |
67 | value ENUM('foo', 'bar', 'baz') |
8fdd52a2 |
68 | ) |
69 | }, |
e0699cd9 |
70 | qq{ |
71 | CREATE TABLE mysql_loader_test2 ( |
72 | id INTEGER UNSIGNED NOT NULL PRIMARY KEY, |
3facc532 |
73 | somets TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP |
e0699cd9 |
74 | ) |
75 | }, |
8fdd52a2 |
76 | ], |
e0699cd9 |
77 | drop => [ qw/ mysql_loader_test1 mysql_loader_test2 / ], |
78 | count => 5, |
8fdd52a2 |
79 | run => sub { |
80 | my ($schema, $monikers, $classes) = @_; |
81 | |
82 | my $rs = $schema->resultset($monikers->{mysql_loader_test1}); |
83 | my $column_info = $rs->result_source->column_info('id'); |
46bef65f |
84 | |
8fdd52a2 |
85 | is($column_info->{extra}->{unsigned}, 1, 'Unsigned MySQL columns'); |
46bef65f |
86 | |
87 | $column_info = $rs->result_source->column_info('value'); |
88 | |
89 | like($column_info->{data_type}, qr/^enum$/i, 'MySQL ENUM type'); |
90 | is_deeply($column_info->{extra}->{list}, [qw/foo bar baz/], |
91 | 'MySQL ENUM values'); |
e0699cd9 |
92 | |
93 | $rs = $schema->resultset($monikers->{mysql_loader_test2}); |
3facc532 |
94 | $column_info = $rs->result_source->column_info('somets'); |
1d27214f |
95 | my $default = $column_info->{default_value}; |
96 | ok ((ref($default) eq 'SCALAR'), |
97 | 'CURRENT_TIMESTAMP default_value is a scalar ref'); |
e0699cd9 |
98 | like $$default, qr/^CURRENT_TIMESTAMP\z/i, |
99 | 'CURRENT_TIMESTAMP default eq "CURRENT_TIMESTAMP"'; |
8fdd52a2 |
100 | }, |
101 | } |
a78e3fed |
102 | ); |
103 | |
9e978a19 |
104 | if( !$dsn || !$user ) { |
105 | $tester->skip_tests('You need to set the DBICTEST_MYSQL_DSN, _USER, and _PASS environment variables'); |
a78e3fed |
106 | } |
107 | else { |
108 | $tester->run_tests(); |
109 | } |