From: Mark Addison Date: Mon, 29 Mar 2004 10:19:08 +0000 (+0000) Subject: fields returns Field objects when it can. Added field_names(). X-Git-Tag: v0.06~115 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=ac095e5e7412c29c6342093878b84ba583b79d94;p=dbsrgits%2FSQL-Translator.git fields returns Field objects when it can. Added field_names(). --- diff --git a/lib/SQL/Translator/Schema/Constraint.pm b/lib/SQL/Translator/Schema/Constraint.pm index e8ae2ab..e4ede91 100644 --- a/lib/SQL/Translator/Schema/Constraint.pm +++ b/lib/SQL/Translator/Schema/Constraint.pm @@ -1,7 +1,7 @@ package SQL::Translator::Schema::Constraint; # ---------------------------------------------------------------------- -# $Id: Constraint.pm,v 1.11 2004-02-29 16:05:31 grommit Exp $ +# $Id: Constraint.pm,v 1.12 2004-03-29 10:19:08 grommit Exp $ # ---------------------------------------------------------------------- # Copyright (C) 2002-4 SQLFairy Authors # @@ -51,7 +51,7 @@ use SQL::Translator::Utils 'parse_list_arg'; use base 'Class::Base'; use vars qw($VERSION $TABLE_COUNT $VIEW_COUNT); -$VERSION = sprintf "%d.%02d", q$Revision: 1.11 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.12 $ =~ /(\d+)\.(\d+)/; my %VALID_CONSTRAINT_TYPE = ( PRIMARY_KEY, 1, @@ -222,6 +222,12 @@ Gets and set the fields the constraint is on. Accepts a string, list or arrayref; returns an array or array reference. Will unique the field names and keep them in order by the first occurrence of a field name. +The fields are returned as Field objects if they exist or as plain +names if not. (If you just want the names and want to avoid the Field's overload +magic use L). + +Returns undef or an empty list if the constraint has no fields set. + $constraint->fields('id'); $constraint->fields('id', 'name'); $constraint->fields( 'id, name' ); @@ -247,13 +253,33 @@ names and keep them in order by the first occurrence of a field name. } if ( @{ $self->{'fields'} || [] } ) { - return wantarray ? @{ $self->{'fields'} } : $self->{'fields'}; + # We have to return fields that don't exist on the table as names in + # case those fields havn't been created yet. + my @ret = map { + $self->table->get_field($_) || $_ } @{ $self->{'fields'} }; + return wantarray ? @ret : \@ret; } else { return wantarray ? () : undef; } } +sub field_names { + +=head2 field_names + +Read-only method to return a list or array ref of the field names. Returns undef +or an empty list if the constraint has no fields set. Usefull if you want to +avoid the overload magic of the Field objects returned by the fields method. + + my @names = $constraint->field_names; + +=cut + + my $self = shift; + return wantarray ? @{ $self->{'fields'} } : $self->{'fields'}; +} + # ---------------------------------------------------------------------- sub match_type {