Added mysql extra attribs for charset and collation.
[dbsrgits/SQL-Translator.git] / t / 38-mysql-producer.t
CommitLineData
1ded8513 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
10use strict;
11use Test::More;
12use Test::Exception;
13use Test::SQL::Translator qw(maybe_plan);
14
15use Data::Dumper;
16use FindBin qw/$Bin/;
17
18# Testing 1,2,3,4...
19#=============================================================================
20
21BEGIN {
22 maybe_plan(2,
23 'YAML',
24 'SQL::Translator::Producer::MySQL',
25 'Test::Differences',
26 )
27}
28use Test::Differences;
29use SQL::Translator;
30
31# Main test.
32{
33my $yaml_in = <<EOSCHEMA;
34---
35schema:
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
64EOSCHEMA
65
66my $mysql_out = <<EOSQL;
67SET foreign_key_checks=0;
68
69CREATE 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
75EOSQL
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}