Improve trigger 'scope' attribute support (RT#119997)
[dbsrgits/SQL-Translator.git] / t / mysql-sqlite-translate.t
CommitLineData
56785c01 1#!/usr/bin/perl
2use warnings;
3use strict;
4use Test::More;
5use_ok( "SQL::Translator" );
6use_ok( "SQL::Translator::Parser::MySQL" );
7use_ok( "SQL::Translator::Producer::SQLite" );
8
9# This test reproduces a bug in SQL::Translator::Producer::SQLite.
aee4b66e 10#
56785c01 11# When tables are created their names are not added to %global_names, and
12# may be duplicated.
13#
14# SQL::Translator::Producer::SQLite version 1.59.
15# compliments of SymKat <symkat@symkat.com>
aee4b66e 16
56785c01 17
18
19my $output = SQL::Translator
20 ->new( data => do { local $/; <DATA> })
21 ->translate( from => 'MySQL', to => 'SQLite' );
22
23sub find_table_names {
24 my ( $content ) = @_;
25 my @tables;
26
27 for my $line ( split /\n/, $content ) {
28 if ($content =~ /CREATE (?:INDEX|UNIQUE|TABLE| ){0,6} ([^\s]+)/gc) {
29 push @tables, $1;
30 }
31 }
32 return @tables;
33}
34
35sub has_dupes {
36 my ( @list ) = @_;
37 my %hist;
aee4b66e 38
56785c01 39 for my $elem ( @list ) {
40 return 0 if exists $hist{$elem};
41 $hist{$elem} = 1;
42 }
43 return 1;
44}
45
46ok ( has_dupes( find_table_names( $output ) ) );
47
48done_testing;
49
50__DATA__
51CREATE TABLE `ip_address` (
52 `id` int(11) NOT NULL auto_increment,
53 `ip_address` varchar(255) NOT NULL,
54 `machine_id` int(11) default NULL,
55 `primary_machine_id` int(11) default NULL,
56 `secondary_machine_id` int(11) default NULL,
57 `tertiary_machine_id` int(11) default NULL,
58 `protocol` enum('ipv4','ipv6') NOT NULL default 'ipv4',
59 `shared` tinyint(1) NOT NULL default '1',
60 PRIMARY KEY (`id`),
61 UNIQUE KEY `ip_address` (`ip_address`),
62 KEY `machine_id` (`machine_id`),
63 KEY `primary_machine_id` (`primary_machine_id`),
64 KEY `secondary_machine_id` (`secondary_machine_id`),
65 KEY `tertiary_machine_id` (`tertiary_machine_id`),
66 CONSTRAINT `ip_address_ibfk_1` FOREIGN KEY (`machine_id`) REFERENCES `machine` (`id`),
67 CONSTRAINT `ip_address_ibfk_2` FOREIGN KEY (`primary_machine_id`) REFERENCES `machine` (`id`),
68 CONSTRAINT `ip_address_ibfk_3` FOREIGN KEY (`secondary_machine_id`) REFERENCES `machine` (`id`),
69 CONSTRAINT `ip_address_ibfk_4` FOREIGN KEY (`tertiary_machine_id`) REFERENCES `machine` (`id`)
70);
71