Added mysql extra attribs for charset and collation.
[dbsrgits/SQL-Translator.git] / t / 38-mysql-producer.t
1 #!/usr/bin/perl -w 
2 # vim:filetype=perl
3
4 #
5 # Note that the bulk of the testing for the mysql producer is in
6 # 08postgres-to-mysql.t. This test is for additional stuff that can't be tested
7 # using an Oracle schema as source e.g. extra attributes.
8 #
9
10 use strict;
11 use Test::More;
12 use Test::Exception;
13 use Test::SQL::Translator qw(maybe_plan);
14
15 use Data::Dumper;
16 use FindBin qw/$Bin/;
17
18 # Testing 1,2,3,4...
19 #=============================================================================
20
21 BEGIN {
22     maybe_plan(2,
23         'YAML',
24         'SQL::Translator::Producer::MySQL',
25         'Test::Differences',
26     )
27 }
28 use Test::Differences;
29 use SQL::Translator;
30
31 # Main test.
32 {
33 my $yaml_in = <<EOSCHEMA;
34 ---
35 schema:
36   tables:
37     thing:
38       name: thing
39       extra:
40         mysql_charset: latin1 
41         mysql_collate: latin1_danish_ci 
42       order: 1
43       fields:
44         name:
45           name: name
46           data_type: varchar
47           size:
48             - 32
49           order: 1
50         swedish_name:
51           name: swedish_name
52           data_type: varchar
53           size: 32
54           extra:
55             mysql_charset: swe7
56           order: 2
57         description:
58           name: description
59           data_type: text
60           extra:
61             mysql_charset: utf8
62             mysql_collate: utf8_general_ci
63           order: 3
64 EOSCHEMA
65
66 my $mysql_out = <<EOSQL;
67 SET foreign_key_checks=0;
68
69 CREATE TABLE thing (
70   name varchar(32),
71   swedish_name varchar(32) CHARACTER SET swe7,
72   description text CHARACTER SET utf8 COLLATE utf8_general_ci
73 ) DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
74
75 EOSQL
76
77     my $sqlt;
78     $sqlt = SQL::Translator->new(
79         show_warnings  => 1,
80         no_comments    => 1,
81         from           => "YAML",
82         to             => "MySQL",
83     );
84
85     my $out;
86     $yaml_in = do {
87         local $/ = undef;
88         open(FILE, "/home/grommit/src/sqlfairy/test.yml") or die "$!";
89         <FILE>
90     };
91     $mysql_out = do {
92         local $/ = undef;
93         open(FILE, "/home/grommit/src/sqlfairy/test.sql") or die "$!";
94         <FILE>
95     };
96
97     $out = $sqlt->translate(\$yaml_in) or die "Translate error:".$sqlt->error;
98     ok $out ne ""                 ,"Produced something!";
99     eq_or_diff $out, $mysql_out   ,"Output looks right";
100 }