package SQL::Translator::Schema::Object;
# ----------------------------------------------------------------------
-# $Id: Object.pm,v 1.2 2004-11-05 13:19:31 grommit 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 Class::Base;
use base 'Class::Data::Inheritable';
use base 'Class::Base';
+use Class::MakeMethods::Utility::Ref qw( ref_compare );
use vars qw[ $VERSION ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/;
+$VERSION = '1.59';
=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
__PACKAGE__->mk_classdata("__attributes");
-__PACKAGE__->__attributes([]);
+
+# Define any global attributes here
+__PACKAGE__->__attributes([qw/extra/]);
# Set the classes attribute names. Multiple calls are cumulative.
# We need to be careful to create a new ref so that all classes don't end up
return $self;
}
+# ----------------------------------------------------------------------
+sub extra {
+
+=pod
+
+=head1 Global Attributes
+
+The following attributes are defined here, therefore all schema objects will
+have them.
+
+=head2 extra
+
+Get or set the objects "extra" attibutes (e.g., "ZEROFILL" for MySQL fields).
+Call with no args to get all the extra data.
+Call with a single name arg to get the value of the named extra attribute,
+returned as a scalar. Call with a hash or hashref to set extra attributes.
+Returns a hash or a hashref.
+
+ $field->extra( qualifier => 'ZEROFILL' );
+
+ $qualifier = $field->extra('qualifier');
+
+ %extra = $field->extra;
+ $extra = $field->extra;
+
+=cut
+
+ my $self = shift;
+ @_ = %{$_[0]} if ref $_[0] eq "HASH";
+ my $extra = $self->{'extra'} ||= {};
+
+ if (@_==1) {
+ return exists($extra->{$_[0]}) ? $extra->{$_[0]} : undef ;
+ }
+ elsif (@_) {
+ my %args = @_;
+ while ( my ( $key, $value ) = each %args ) {
+ $extra->{$key} = $value;
+ }
+ }
+
+ return wantarray ? %$extra : $extra;
+}
+
+
+# ----------------------------------------------------------------------
+sub equals {
+
+=pod
+
+=head2 equals
+
+Determines if this object is the same as another.
+
+ my $isIdentical = $object1->equals( $object2 );
+
+=cut
+
+ my $self = shift;
+ my $other = shift;
+
+ return 0 unless $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 $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;
+}
#=============================================================================