primary key fix
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser / DDL / MySQL.pm
index 349fd25..e577f33 100644 (file)
@@ -8,8 +8,10 @@ role SQL::Translator::Parser::DDL::MySQL {
     use aliased 'SQL::Translator::Object::ForeignKey';
     use aliased 'SQL::Translator::Object::Index';
     use aliased 'SQL::Translator::Object::PrimaryKey';
+    use aliased 'SQL::Translator::Object::Procedure';
     use aliased 'SQL::Translator::Object::Schema';
     use aliased 'SQL::Translator::Object::Table';
+    use aliased 'SQL::Translator::Object::View';
 
     around _build_data_type_mapping {
         my $data_type_mapping = $self->$orig;
@@ -28,17 +30,17 @@ role SQL::Translator::Parser::DDL::MySQL {
                 "instance: Bad grammar");
         }
 
-#    my $parser_version = parse_mysql_version(
-#        $translator->parser_args->{mysql_parser_version}, 'mysql'
-#    ) || DEFAULT_PARSER_VERSION;
-        my $parser_version = 30000;
+        my $translator = $self->translator;
+
+        my $parser_version = $translator->has_parser_args
+                             ? $translator->engine_version($translator->parser_args->{mysql_parser_version}, 'mysql') || DEFAULT_PARSER_VERSION
+                             : DEFAULT_PARSER_VERSION;
     
         while ($data =~ s#/\*!(\d{5})?(.*?)\*/#($1 && $1 > $parser_version ? '' : $2)#es) { }
 
         my $result = $parser->startrule($data);
         die "Parse failed" unless defined $result;
     
-        my $translator = $self->translator;
         my $schema = $translator->schema;
         $schema->name($result->{'database_name'}) if $result->{'database_name'};
     
@@ -68,7 +70,7 @@ role SQL::Translator::Parser::DDL::MySQL {
                 $field->comments($fdata->{comments});
                 $table->add_column($field);
     
-                $table->primary_key( $field->name ) if $fdata->{'is_primary_key'};
+                $field->is_primary_key(1) if $fdata->{is_primary_key};
 
                 my %extra;
                 for my $qual ( qw[ binary unsigned zerofill list collate ],
@@ -105,25 +107,25 @@ role SQL::Translator::Parser::DDL::MySQL {
             }
             
     
-#            if ( my @options = @{ $tdata->{'table_options'} || [] } ) {
-#                my @cleaned_options;
-#                my @ignore_opts = $self->parser_args->{'ignore_opts'}
-#                    ? split( /,/, $self->parser_args->{'ignore_opts'} )
-#                    : ();
-#                if (@ignore_opts) {
-#                    my $ignores = { map { $_ => 1 } @ignore_opts };
-#                    foreach my $option (@options) {
-#                        # make sure the option isn't in ignore list
-#                        my ($option_key) = keys %$option;
-#                        if ( !exists $ignores->{$option_key} ) {
-#                            push @cleaned_options, $option;
-#                        }
-#                    }
-#                } else {
-#                    @cleaned_options = @options;
-#                }
-#                $table->options( \@cleaned_options ) or die $table->error;
-#            }
+            if ( my @options = @{ $tdata->{'table_options'} || [] } ) {
+                my @cleaned_options;
+                my @ignore_opts = $translator->has_parser_args && $translator->parser_args->{'ignore_opts'}
+                    ? split( /,/, $translator->parser_args->{'ignore_opts'} )
+                    : ();
+                if (@ignore_opts) {
+                    my $ignores = { map { $_ => 1 } @ignore_opts };
+                    foreach my $option (@options) {
+                        # make sure the option isn't in ignore list
+                        my ($option_key) = keys %$option;
+                        if ( !exists $ignores->{$option_key} ) {
+                            push @cleaned_options, $option;
+                        }
+                    }
+                } else {
+                    @cleaned_options = @options;
+                }
+                $table->options( \@cleaned_options ); # or die $table->error;
+            }
     
             for my $cdata ( @{ $tdata->{constraints} || [] } ) {
                 my $constraint;
@@ -134,7 +136,7 @@ role SQL::Translator::Parser::DDL::MySQL {
                     $constraint = ForeignKey->new({ name => $cdata->{name} || '',
                                                     table => $table,
                                                     reference_table => $cdata->{reference_table},
-                                                    reference_columns => $cdata->{reference_fields},
+                                                    defined $cdata->{reference_fields} ? (reference_columns => $cdata->{reference_fields}) : (),
                                                     on_delete => $cdata->{on_delete} || $cdata->{on_delete_do},
                                                     on_update => $cdata->{on_update} || $cdata->{on_update_do} });
                     $table->get_column($_)->is_foreign_key(1) for @{$cdata->{fields}};