Improvements to MySQL producers foreign key and comment handling
[dbsrgits/SQL-Translator.git] / t / 38-mysql-producer.t
CommitLineData
819fe9ef 1#!/usr/bin/perl -w
1ded8513 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 {
8db4bd9d 22 maybe_plan(6,
1ded8513 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:
819fe9ef 40 mysql_table_type: InnoDB
1ded8513 41 mysql_charset: latin1
42 mysql_collate: latin1_danish_ci
43 order: 1
44 fields:
45 name:
46 name: name
47 data_type: varchar
48 size:
49 - 32
50 order: 1
51 swedish_name:
52 name: swedish_name
53 data_type: varchar
54 size: 32
55 extra:
56 mysql_charset: swe7
57 order: 2
58 description:
59 name: description
60 data_type: text
61 extra:
62 mysql_charset: utf8
63 mysql_collate: utf8_general_ci
64 order: 3
65EOSCHEMA
66
67my $mysql_out = <<EOSQL;
68SET foreign_key_checks=0;
69
70CREATE TABLE thing (
71 name varchar(32),
72 swedish_name varchar(32) CHARACTER SET swe7,
73 description text CHARACTER SET utf8 COLLATE utf8_general_ci
819fe9ef 74) Type=InnoDB DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
1ded8513 75
76EOSQL
77
78 my $sqlt;
79 $sqlt = SQL::Translator->new(
80 show_warnings => 1,
81 no_comments => 1,
82 from => "YAML",
83 to => "MySQL",
84 );
85
819fe9ef 86 my $out = $sqlt->translate(\$yaml_in)
87 or die "Translate error:".$sqlt->error;
1ded8513 88 ok $out ne "" ,"Produced something!";
89 eq_or_diff $out, $mysql_out ,"Output looks right";
90}
8db4bd9d 91
92###############################################################################
93# New alter/add subs
94
95my $table = SQL::Translator::Schema::Table->new( name => 'mytable');
96
97my $field1 = SQL::Translator::Schema::Field->new( name => 'myfield',
98 table => $table,
99 data_type => 'VARCHAR',
100 size => 10,
101 default_value => undef,
102 is_auto_increment => 0,
103 is_nullable => 1,
104 is_foreign_key => 0,
105 is_unique => 0 );
106
107my $field1_sql = SQL::Translator::Producer::MySQL::create_field($field1);
108
109is($field1_sql, 'myfield VARCHAR(10)', 'Create field works');
110
111my $field2 = SQL::Translator::Schema::Field->new( name => 'myfield',
112 table => $table,
113 data_type => 'VARCHAR',
114 size => 25,
115 default_value => undef,
116 is_auto_increment => 0,
117 is_nullable => 0,
118 is_foreign_key => 0,
119 is_unique => 0 );
120
121my $alter_field = SQL::Translator::Producer::MySQL::alter_field($field1,
122 $field2);
123is($alter_field, 'ALTER TABLE mytable CHANGE COLUMN myfield myfield VARCHAR(25) NOT NULL', 'Alter field works');
124
125my $add_field = SQL::Translator::Producer::MySQL::add_field($field1);
126
127is($add_field, 'ALTER TABLE mytable ADD COLUMN myfield VARCHAR(10)', 'Add field works');
128
129my $drop_field = SQL::Translator::Producer::MySQL::drop_field($field2);
130is($drop_field, 'ALTER TABLE mytable DROP COLUMN myfield', 'Drop field works');