X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FSchema%2FTable.pm;h=3e02c4352aff6b917f321fb550aa9484318cf8f1;hb=f4b8e04b825168484da452b5a8492b0ab4adb853;hp=7bef851ce717037c9955d459e2ef57097f6f10ff;hpb=4598b71c61d9fcb8a91ee6174a68a34d6f0eae24;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Schema/Table.pm b/lib/SQL/Translator/Schema/Table.pm index 7bef851..3e02c43 100644 --- a/lib/SQL/Translator/Schema/Table.pm +++ b/lib/SQL/Translator/Schema/Table.pm @@ -1,9 +1,7 @@ package SQL::Translator::Schema::Table; # ---------------------------------------------------------------------- -# $Id: Table.pm,v 1.33 2005-06-29 22:02:29 duality72 Exp $ -# ---------------------------------------------------------------------- -# Copyright (C) 2002-4 SQLFairy Authors +# Copyright (C) 2002-2009 SQLFairy Authors # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -49,10 +47,9 @@ use Data::Dumper; use base 'SQL::Translator::Schema::Object'; -use vars qw( $VERSION $FIELD_ORDER ); - -$VERSION = sprintf "%d.%02d", q$Revision: 1.33 $ =~ /(\d+)\.(\d+)/; +use vars qw( $VERSION ); +$VERSION = '1.59'; # Stringify to our name, being careful not to pass any args through so we don't # accidentally set it to undef. We also have to tweak bool so the object is @@ -80,6 +77,20 @@ Object constructor. =cut +sub new { + my $class = shift; + my $self = $class->SUPER::new (@_) + or return; + + $self->{_order} = { map { $_ => 0 } qw/ + field + /}; + + return $self; +} + + + # ---------------------------------------------------------------------- sub add_constraint { @@ -238,7 +249,9 @@ C object. $index = $index_class->new( \%args ) or return $self->error( $index_class->error ); } - + foreach my $ex_index ($self->get_indices) { + return if ($ex_index->equals($index)); + } push @{ $self->{'indices'} }, $index; return $index; } @@ -321,7 +334,7 @@ existing field, you will get an error and the field will not be created. $self->error( $field_class->error ); } - $field->order( ++$FIELD_ORDER ); + $field->order( ++$self->{_order}{field} ); # We know we have a name as the Field->new above errors if none given. my $field_name = $field->name; @@ -490,6 +503,14 @@ Returns a field by the name provided. my $self = shift; my $field_name = shift or return $self->error('No field name'); + my $case_insensitive = shift; + if ( $case_insensitive ) { + $field_name = uc($field_name); + foreach my $field ( keys %{$self->{fields}} ) { + return $self->{fields}{$field} if $field_name eq uc($field); + } + return $self->error(qq[Field "$field_name" does not exist]); + } return $self->error( qq[Field "$field_name" does not exist] ) unless exists $self->{'fields'}{ $field_name }; return $self->{'fields'}{ $field_name }; @@ -916,9 +937,10 @@ Determines if this table is the same as another my $self = shift; my $other = shift; + my $case_insensitive = shift; return 0 unless $self->SUPER::equals($other); - return 0 unless $self->name eq $other->name; + return 0 unless $case_insensitive ? uc($self->name) eq uc($other->name) : $self->name eq $other->name; return 0 unless $self->_compare_objects(scalar $self->options, scalar $other->options); return 0 unless $self->_compare_objects(scalar $self->extra, scalar $other->extra); @@ -926,8 +948,8 @@ Determines if this table is the same as another # Go through our fields my %checkedFields; foreach my $field ( $self->get_fields ) { - my $otherField = $other->get_field($field->name); - return 0 unless $field->equals($otherField); + my $otherField = $other->get_field($field->name, $case_insensitive); + return 0 unless $field->equals($otherField, $case_insensitive); $checkedFields{$field->name} = 1; } # Go through the other table's fields @@ -942,7 +964,7 @@ Determines if this table is the same as another CONSTRAINT: foreach my $constraint ( $self->get_constraints ) { foreach my $otherConstraint ( $other->get_constraints ) { - if ( $constraint->equals($otherConstraint) ) { + if ( $constraint->equals($otherConstraint, $case_insensitive) ) { $checkedConstraints{$otherConstraint} = 1; next CONSTRAINT; } @@ -954,7 +976,7 @@ CONSTRAINT2: foreach my $otherConstraint ( $other->get_constraints ) { next if $checkedFields{$otherConstraint}; foreach my $constraint ( $self->get_constraints ) { - if ( $otherConstraint->equals($constraint) ) { + if ( $otherConstraint->equals($constraint, $case_insensitive) ) { next CONSTRAINT2; } } @@ -967,7 +989,7 @@ CONSTRAINT2: INDEX: foreach my $index ( $self->get_indices ) { foreach my $otherIndex ( $other->get_indices ) { - if ( $index->equals($otherIndex) ) { + if ( $index->equals($otherIndex, $case_insensitive) ) { $checkedIndices{$otherIndex} = 1; next INDEX; } @@ -979,7 +1001,7 @@ INDEX2: foreach my $otherIndex ( $other->get_indices ) { next if $checkedIndices{$otherIndex}; foreach my $index ( $self->get_indices ) { - if ( $otherIndex->equals($index) ) { + if ( $otherIndex->equals($index, $case_insensitive) ) { next INDEX2; } } @@ -1100,7 +1122,7 @@ sub DESTROY { =head1 AUTHORS -Ken Y. Clark Ekclark@cpan.orgE, +Ken Youens-Clark Ekclark@cpan.orgE, Allen Day Eallenday@ucla.eduE. =cut