From: Chris Hilton Date: Mon, 27 Jun 2005 20:47:28 +0000 (+0000) Subject: Additional tests for new parser capabilities X-Git-Tag: v0.11008~525 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b68bfdf0b0ecd6e9682e8084d7d0b660abeb6d7c;p=dbsrgits%2FSQL-Translator.git Additional tests for new parser capabilities --- diff --git a/t/02mysql-parser.t b/t/02mysql-parser.t index 9c20b61..1037bb7 100644 --- a/t/02mysql-parser.t +++ b/t/02mysql-parser.t @@ -10,7 +10,7 @@ use SQL::Translator::Schema::Constants; use Test::SQL::Translator qw(maybe_plan); BEGIN { - maybe_plan(201, "SQL::Translator::Parser::MySQL"); + maybe_plan(216, "SQL::Translator::Parser::MySQL"); SQL::Translator::Parser::MySQL->import('parse'); } @@ -465,3 +465,60 @@ BEGIN { is( join(',', $t2c2->reference_fields), 'id', 'To field "id"' ); } +# cch Tests for: +# comments like: /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +# char fields with character set and collate qualifiers +# timestamp fields with on update qualifier +# charset table option +# +{ + my $tr = SQL::Translator->new; + my $data = parse($tr, + q[ + /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; + + CREATE TABLE one ( + `op` varchar(255) character set latin1 collate latin1_bin default NULL, + `last_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, + ) TYPE=INNODB DEFAULT CHARSET=latin1; + ] + ) or die $tr->error; + + my $schema = $tr->schema; + is( $schema->is_valid, 1, 'Schema is valid' ); + my @tables = $schema->get_tables; + is( scalar @tables, 1, 'Right number of tables (1)' ); + my $table1 = shift @tables; + is( $table1->name, 'one', 'Found "one" table' ); + + my @fields = $table1->get_fields; + is(scalar @fields, 2, 'Right number of fields (2) on table one'); + my $tableTypeFound = 0; + my $charsetFound = 0; + for my $t1_option_ref ( $table1->options ) { + my($key, $value) = %{$t1_option_ref}; + if ( $key eq 'TYPE' ) { + is($value, 'INNODB', 'Table has right table type option' ); + $tableTypeFound = 1; + } elsif ( $key eq 'CHARACTER SET' ) { + is($value, 'latin1', 'Table has right character set option' ); + $charsetFound = 1; + } + } + fail('Table did not have a type option') unless $tableTypeFound; + fail('Table did not have a character set option') unless $charsetFound; + + my $t1f1 = shift @fields; + is( $t1f1->data_type, 'varchar', 'Field is a varchar' ); + is( $t1f1->size, 255, 'Field is right size' ); + is( $t1f1->extra('character set'), 'latin1', 'Field has right character set qualifier' ); + is( $t1f1->extra('collate'), 'latin1_bin', 'Field has right collate qualifier' ); + is( $t1f1->default_value, 'NULL', 'Field has right default value' ); + + my $t1f2 = shift @fields; + is( $t1f2->data_type, 'timestamp', 'Field is a timestamp' ); + ok( !$t1f2->is_nullable, 'Field is not nullable' ); + is( $t1f2->default_value, 'CURRENT_TIMESTAMP', 'Field has right default value' ); + is( $t1f2->extra('on update'), 'CURRENT_TIMESTAMP', 'Field has right on update qualifier' ); +} +