Skip to content

Instantly share code, notes, and snippets.

@symkat
Created May 23, 2011 21:47
Show Gist options
  • Save symkat/987692 to your computer and use it in GitHub Desktop.
Save symkat/987692 to your computer and use it in GitHub Desktop.
Test case for patch https://gist.github.com/999118
#!/usr/bin/perl
use warnings;
use strict;
use Test::More;
use_ok( "SQL::Translator" );
use_ok( "SQL::Translator::Parser::MySQL" );
use_ok( "SQL::Translator::Producer::SQLite" );
# This test reproduces a bug in SQL::Translator::Producer::SQLite.
#
# When tables are created their names are not added to %global_names, and
# may be duplicated.
#
# SQL::Translator::Producer::SQLite version 1.59.
my $output = SQL::Translator
->new( data => do { local $/; <DATA> })
->translate( from => 'MySQL', to => 'SQLite' );
sub find_table_names {
my ( $content ) = @_;
my @tables;
for my $line ( split /\n/, $content ) {
if ($content =~ /CREATE (?:INDEX|UNIQUE|TABLE| ){0,6} ([^\s]+)/gc) {
push @tables, $1;
}
}
return @tables;
}
sub has_dupes {
my ( @list ) = @_;
my %hist;
for my $elem ( @list ) {
return 0 if exists $hist{$elem};
$hist{$elem} = 1;
}
return 1;
}
ok ( has_dupes( find_table_names( $output ) ) );
done_testing;
__DATA__
CREATE TABLE `ip_address` (
`id` int(11) NOT NULL auto_increment,
`ip_address` varchar(255) NOT NULL,
`machine_id` int(11) default NULL,
`primary_machine_id` int(11) default NULL,
`secondary_machine_id` int(11) default NULL,
`tertiary_machine_id` int(11) default NULL,
`protocol` enum('ipv4','ipv6') NOT NULL default 'ipv4',
`shared` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`id`),
UNIQUE KEY `ip_address` (`ip_address`),
KEY `machine_id` (`machine_id`),
KEY `primary_machine_id` (`primary_machine_id`),
KEY `secondary_machine_id` (`secondary_machine_id`),
KEY `tertiary_machine_id` (`tertiary_machine_id`),
CONSTRAINT `ip_address_ibfk_1` FOREIGN KEY (`machine_id`) REFERENCES `machine` (`id`),
CONSTRAINT `ip_address_ibfk_2` FOREIGN KEY (`primary_machine_id`) REFERENCES `machine` (`id`),
CONSTRAINT `ip_address_ibfk_3` FOREIGN KEY (`secondary_machine_id`) REFERENCES `machine` (`id`),
CONSTRAINT `ip_address_ibfk_4` FOREIGN KEY (`tertiary_machine_id`) REFERENCES `machine` (`id`)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment