X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F38-mysql-producer.t;h=798701eedadd1fed79032b1a469c31eab9aeee41;hb=cc00c034bcfb007c0e4db411949a3af5c0ff6900;hp=4693c294c503fbb83900087c312f7af8bc4d2d78;hpb=819fe9ef8120750aa8168ccc33cc7a3509fc2e70;p=dbsrgits%2FSQL-Translator.git diff --git a/t/38-mysql-producer.t b/t/38-mysql-producer.t index 4693c29..798701e 100644 --- a/t/38-mysql-producer.t +++ b/t/38-mysql-producer.t @@ -19,7 +19,7 @@ use FindBin qw/$Bin/; #============================================================================= BEGIN { - maybe_plan(2, + maybe_plan(11, 'YAML', 'SQL::Translator::Producer::MySQL', 'Test::Differences', @@ -37,11 +37,16 @@ schema: thing: name: thing extra: - mysql_table_type: InnoDB mysql_charset: latin1 mysql_collate: latin1_danish_ci order: 1 fields: + id: + name: id + data_type: unsigned int + is_primary_key: 1 + is_auto_increment: 1 + order: 0 name: name: name data_type: varchar @@ -62,29 +67,151 @@ schema: mysql_charset: utf8 mysql_collate: utf8_general_ci order: 3 + constraints: + - type: UNIQUE + fields: + - name + name: idx_unique_name + thing2: + name: thing2 + extra: + order: 2 + fields: + id: + name: id + data_type: int + is_primary_key: 0 + order: 0 + is_foreign_key: 1 + foo: + name: foo + data_type: int + order: 1 + is_not_null: 1 + constraints: + - type: PRIMARY_KEY + fields: + - id + - foo + - reference_table: thing + type: FOREIGN_KEY + fields: foo + name: fk_thing + EOSCHEMA -my $mysql_out = <new( show_warnings => 1, no_comments => 1, +# debug => 1, from => "YAML", to => "MySQL", + quote_table_names => 1, + quote_field_names => 1 ); 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"; + ok $out ne "", "Produced something!"; + eq_or_diff $out, $mysql_out, "Scalar output looks right with quoting"; + + 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; + + @out = $sqlt->translate(\$yaml_in) + or die "Translat eerror:".$sqlt->error; + $mysql_out =~ s/`//g; + 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"; } + +############################################################################### +# New alter/add subs + +my $table = SQL::Translator::Schema::Table->new( name => 'mytable'); + +my $field1 = SQL::Translator::Schema::Field->new( name => 'myfield', + table => $table, + data_type => 'VARCHAR', + size => 10, + default_value => undef, + is_auto_increment => 0, + is_nullable => 1, + is_foreign_key => 0, + is_unique => 0 ); + +my $field1_sql = SQL::Translator::Producer::MySQL::create_field($field1); + +is($field1_sql, 'myfield VARCHAR(10)', 'Create field works'); + +my $field2 = SQL::Translator::Schema::Field->new( name => 'myfield', + table => $table, + data_type => 'VARCHAR', + size => 25, + default_value => undef, + is_auto_increment => 0, + is_nullable => 0, + is_foreign_key => 0, + is_unique => 0 ); + +my $alter_field = SQL::Translator::Producer::MySQL::alter_field($field1, + $field2); +is($alter_field, 'ALTER TABLE mytable CHANGE COLUMN myfield myfield VARCHAR(25) NOT NULL', 'Alter field works'); + +my $add_field = SQL::Translator::Producer::MySQL::add_field($field1); + +is($add_field, 'ALTER TABLE mytable ADD COLUMN myfield VARCHAR(10)', 'Add field works'); + +my $drop_field = SQL::Translator::Producer::MySQL::drop_field($field2); +is($drop_field, 'ALTER TABLE mytable DROP COLUMN myfield', 'Drop field works');