package SQL::Translator::Schema::Object;
# ----------------------------------------------------------------------
-# $Id: Object.pm,v 1.6 2005-06-28 21:43:28 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
use vars qw[ $VERSION ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.6 $ =~ /(\d+)\.(\d+)/;
-
+$VERSION = '1.60';
=head1 Construction
-Derived classes should decalare their attributes using the C<_attributes>
+Derived classes should declare their attributes using the C<_attributes>
method. They can then inherit the C<init> method from here which will call
accessors of the same name for any values given in the hash passed to C<new>.
Note that you will have to impliment the accessors your self and we expect perl
return wantarray ? %$extra : $extra;
}
+# ----------------------------------------------------------------------
+sub remove_extra {
+
+=head2 remove_extra
+
+L</extra> can only be used to get or set "extra" attributes but not to
+remove some. Call with no args to remove all extra attributes that
+have been set before. Call with a list of key names to remove
+certain extra attributes only.
+
+ # remove all extra attributes
+ $field->remove_extra();
+
+ # remove timezone and locale attributes only
+ $field->remove_extra(qw/timezone locale/);
+
+=cut
+
+ my ( $self, @keys ) = @_;
+ unless (@keys) {
+ $self->{'extra'} = {};
+ }
+ else {
+ delete $self->{'extra'}{$_} for @keys;
+ }
+}
# ----------------------------------------------------------------------
sub equals {
my $other = shift;
return 0 unless $other;
- return 1 if $self eq $other;
+ return 1 if overload::StrVal($self) eq overload::StrVal($other);
return 0 unless $other->isa( __PACKAGE__ );
return 1;
}
# ----------------------------------------------------------------------
sub _compare_objects {
- my $self = shift;
- my $obj1 = shift;
- my $obj2 = shift;
+ my $self = shift;
+ my $obj1 = shift;
+ my $obj2 = shift;
my $result = (ref_compare($obj1, $obj2) == 0);
-# if ( !$result ) {
-# use Carp qw(cluck);
-# cluck("How did I get here?");
-# use Data::Dumper;
-# $Data::Dumper::Maxdepth = 1;
-# print "obj1: ", Dumper($obj1), "\n";
-# print "obj2: ", Dumper($obj2), "\n";
-# }
+
return $result;
}
=pod
-=head1 SEE ALSO
-
-=head1 TODO
-
-=head1 BUGS
-
=head1 AUTHOR
-Ken Y. Clark E<lt>kclark@cpan.orgE<gt>, Mark Addison E<lt>mark.addison@itn.co.ukE<gt>
+Ken Youens-Clark E<lt>kclark@cpan.orgE<gt>,
+Mark Addison E<lt>mark.addison@itn.co.ukE<gt>.
=cut