From: Mark Addison Date: Tue, 23 Mar 2004 21:05:20 +0000 (+0000) Subject: Added stringify to name and error check to stop creation of object without a name. X-Git-Tag: v0.06~125 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=65dd38c0dfaf8674117cdd07a943287d736a02af;p=dbsrgits%2FSQL-Translator.git Added stringify to name and error check to stop creation of object without a name. --- diff --git a/lib/SQL/Translator/Schema/Field.pm b/lib/SQL/Translator/Schema/Field.pm index 2e76f89..c574fb1 100644 --- a/lib/SQL/Translator/Schema/Field.pm +++ b/lib/SQL/Translator/Schema/Field.pm @@ -1,7 +1,7 @@ package SQL::Translator::Schema::Field; # ---------------------------------------------------------------------- -# $Id: Field.pm,v 1.13 2004-02-09 22:15:15 kycl4rk Exp $ +# $Id: Field.pm,v 1.14 2004-03-23 21:05:19 grommit Exp $ # ---------------------------------------------------------------------- # Copyright (C) 2002-4 SQLFairy Authors # @@ -50,7 +50,16 @@ 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.13 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.14 $ =~ /(\d+)\.(\d+)/; + +# 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 +# still true when it doesn't have a name (which shouldn't happen!). +use overload + '""' => sub { shift->name }, + 'bool' => sub { $_[0]->name || $_[0] }, + fallback => 1, +; # ---------------------------------------------------------------------- sub init { @@ -416,15 +425,22 @@ sub name { Get or set the field's name. - my $name = $field->name('foo'); + my $name = $field->name('foo'); + +The field object will also stringify to its name. + + my $setter_name = "set_$field"; + +Errors ("No field name") if you try to set a blank name. =cut my $self = shift; - if ( my $arg = shift ) { + if ( @_ ) { + my $arg = shift || return $self->error( "No field name" ); if ( my $table = $self->table ) { - return $self->error( qq[Can't use field name "$arg": table exists] ) + return $self->error( qq[Can't use field name "$arg": field exists] ) if $table->get_field( $arg ); } diff --git a/lib/SQL/Translator/Schema/Table.pm b/lib/SQL/Translator/Schema/Table.pm index f18a798..9e4e4e2 100644 --- a/lib/SQL/Translator/Schema/Table.pm +++ b/lib/SQL/Translator/Schema/Table.pm @@ -1,7 +1,7 @@ package SQL::Translator::Schema::Table; # ---------------------------------------------------------------------- -# $Id: Table.pm,v 1.24 2004-02-09 22:15:15 kycl4rk Exp $ +# $Id: Table.pm,v 1.25 2004-03-23 21:05:20 grommit Exp $ # ---------------------------------------------------------------------- # Copyright (C) 2002-4 SQLFairy Authors # @@ -51,7 +51,17 @@ use Data::Dumper; use base 'Class::Base'; use vars qw( $VERSION $FIELD_ORDER ); -$VERSION = sprintf "%d.%02d", q$Revision: 1.24 $ =~ /(\d+)\.(\d+)/; +$VERSION = sprintf "%d.%02d", q$Revision: 1.25 $ =~ /(\d+)\.(\d+)/; + + +# 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 +# still true when it doesn't have a name (which shouldn't happen!). +use overload + '""' => sub { shift->name }, + 'bool' => sub { $_[0]->name || $_[0] }, + fallback => 1, +; # ---------------------------------------------------------------------- sub init { @@ -244,7 +254,8 @@ existing field, you will get an error and the field will not be created. } $field->order( ++$FIELD_ORDER ); - my $field_name = $field->name or return $self->error('No name'); + # We know we have a name as the Field->new above errors if none given. + my $field_name = $field->name; if ( exists $self->{'fields'}{ $field_name } ) { return $self->error(qq[Can't create field: "$field_name" exists]); @@ -576,8 +587,11 @@ sub name { Get or set the table's name. -If provided an argument, checks the schema object for a table of -that name and disallows the change if one exists. +Errors ("No table name") if you try to set a blank name. + +If provided an argument, checks the schema object for a table of +that name and disallows the change if one exists (setting the error to +"Can't use table name "%s": table exists"). my $table_name = $table->name('foo'); @@ -585,7 +599,8 @@ that name and disallows the change if one exists. my $self = shift; - if ( my $arg = shift ) { + if ( @_ ) { + my $arg = shift || return $self->error( "No table name" ); if ( my $schema = $self->schema ) { return $self->error( qq[Can't use table name "$arg": table exists] ) if $schema->get_table( $arg );