#=============================================================================
BEGIN {
- maybe_plan(7,
+ maybe_plan(11,
'YAML',
'SQL::Translator::Producer::MySQL',
'Test::Differences',
fields:
- name
name: idx_unique_name
+
thing2:
name: thing2
extra:
data_type: int
order: 1
is_not_null: 1
+ foo2:
+ name: foo2
+ data_type: int
+ order: 2
+ is_not_null: 1
+ indices:
+ - type: NORMAL
+ fields:
+ - id
+ name: index_1
+ - type: NORMAL
+ fields:
+ - id
+ name: index_2
constraints:
- type: PRIMARY_KEY
fields:
type: FOREIGN_KEY
fields: foo
name: fk_thing
+ - reference_table: thing
+ type: FOREIGN_KEY
+ fields: foo2
+ name: fk_thing
EOSCHEMA
-my $mysql_out = <<EOSQL;
-SET foreign_key_checks=0;
+my @stmts = (
+"SET foreign_key_checks=0;\n\n",
-CREATE TABLE `thing` (
+"DROP TABLE IF EXISTS `thing`;\n",
+"CREATE TABLE `thing` (
`id` unsigned int auto_increment,
`name` varchar(32),
`swedish_name` varchar(32) CHARACTER SET swe7,
`description` text CHARACTER SET utf8 COLLATE utf8_general_ci,
- INDEX (`id`),
- INDEX (`name`),
PRIMARY KEY (`id`),
UNIQUE `idx_unique_name` (`name`)
-) Type=InnoDB DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;
+) Type=InnoDB DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;\n\n",
-CREATE TABLE `thing2` (
+"DROP TABLE IF EXISTS `thing2`;\n",
+"CREATE TABLE `thing2` (
`id` integer,
`foo` integer,
- INDEX (`id`),
+ `foo2` integer,
+ INDEX index_1 (`id`),
+ INDEX index_2 (`id`),
INDEX (`foo`),
+ INDEX (`foo2`),
PRIMARY KEY (`id`, `foo`),
- CONSTRAINT `thing2_fk_thing` FOREIGN KEY (`foo`) REFERENCES `thing` (`id`)
-) Type=InnoDB;
+ CONSTRAINT `fk_thing` FOREIGN KEY (`foo`) REFERENCES `thing` (`id`),
+ CONSTRAINT `fk_thing_1` FOREIGN KEY (`foo2`) REFERENCES `thing` (`id`)
+) Type=InnoDB;\n\n",
+
+"SET foreign_key_checks=1;\n\n"
-SET foreign_key_checks=1;
+);
+
+my @stmts_no_drop = grep {$_ !~ /^DROP TABLE/} @stmts;
+
+my $mysql_out = join("", @stmts_no_drop);
-EOSQL
my $sqlt;
$sqlt = SQL::Translator->new(
my $out = $sqlt->translate(\$yaml_in)
or die "Translate error:".$sqlt->error;
- ok $out ne "" ,"Produced something!";
- eq_or_diff $out, $mysql_out ,"Output looks right with quoting";
+ ok $out ne "", "Produced something!";
+ eq_or_diff $out, $mysql_out, "Scalar output looks right with quoting";
- @{$sqlt}{qw/quote_table_names quote_field_names/} = (0,0);
+ my @out = $sqlt->translate(\$yaml_in)
+ or die "Translat eerror:".$sqlt->error;
+ is_deeply \@out, \@stmts_no_drop, "Array output looks right with quoting";
+
+ @{$sqlt}{qw/quote_table_names quote_field_names/} = (0,0);
$out = $sqlt->translate(\$yaml_in)
- or die "Translat eerror:".$sqlt->error;
+ or die "Translate error:".$sqlt->error;
+
+ @out = $sqlt->translate(\$yaml_in)
+ or die "Translate error:".$sqlt->error;
$mysql_out =~ s/`//g;
- eq_or_diff $out, $mysql_out, "Output looks right without quoting";
+ my @unquoted_stmts = map { s/`//g; $_} @stmts_no_drop;
+ eq_or_diff $out, $mysql_out, "Output looks right without quoting";
+ is_deeply \@out, \@unquoted_stmts, "Array output looks right without quoting";
+
+ @{$sqlt}{qw/add_drop_table quote_field_names quote_table_names/} = (1,1,1);
+ @out = $sqlt->translate(\$yaml_in)
+ or die "Translat eerror:".$sqlt->error;
+ $out = $sqlt->translate(\$yaml_in)
+ or die "Translat eerror:".$sqlt->error;
+
+ eq_or_diff $out, join("", @stmts), "Output looks right with DROP TABLEs";
+ is_deeply \@out, \@stmts, "Array output looks right with DROP TABLEs";
}
###############################################################################