X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FSchema%2FGraph%2FNode.pm;h=8b397784ad1790847f796c3b4ba0d46591e02eee;hb=ba506e52c480afe33dfec6b38a12759fad1e7fa2;hp=156370adcd838dd92b21d0df67ad1233e6adf92d;hpb=0caaf4c3fb70de1a3dcc6e8e70c06c53b56c007c;p=dbsrgits%2FSQL-Translator.git diff --git a/lib/SQL/Translator/Schema/Graph/Node.pm b/lib/SQL/Translator/Schema/Graph/Node.pm index 156370a..8b39778 100644 --- a/lib/SQL/Translator/Schema/Graph/Node.pm +++ b/lib/SQL/Translator/Schema/Graph/Node.pm @@ -2,14 +2,149 @@ package SQL::Translator::Schema::Graph::Node; use strict; +use vars qw[ $VERSION ]; +$VERSION = '1.60'; + use Class::MakeMethods::Template::Hash ( - new => [ 'new' ], - 'array_of_objects -class SQL::Translator::Schema::Graph::Edge' => [ qw( edges ) ], - 'array_of_objects -class SQL::Translator::Schema::Graph::CompoundEdge' => [ qw( compoundedges ) ], - 'array_of_objects -class SQL::Translator::Schema::Graph::HyperEdge' => [ qw( hyperedges ) ], - 'hash' => [ qw( many via has ) ], - scalar => [ qw( base name order primary_key primary_key_accessor table ) ], - number => [ qw( order ) ], + new => ['new'], + 'array_of_objects -class SQL::Translator::Schema::Graph::Edge' => + [qw( edges )], + 'array_of_objects -class SQL::Translator::Schema::Graph::CompoundEdge' => + [qw( compoundedges )], + 'array_of_objects -class SQL::Translator::Schema::Graph::HyperEdge' => + [qw( hyperedges )], + + #'hash' => [ qw( many via has edgecount data_fields) ], + #'hash' => [ qw( many via has data_fields) ], + scalar => [ + qw( base name order primary_key primary_key_accessor table is_trivial_link ) + ], + number => [qw( order )], ); +sub many { + my ($self) = shift; + + $self->{_many} ||= {}; + + if ( scalar(@_) == 1 ) { + my $k = shift; + return $self->{_many}{$k} || 0; + } + elsif (@_) { + my %arg = @_; + + foreach my $k ( keys %arg ) { + + #warn $a,"\t",$arg{$k}; + $self->{_many}{$k} = $arg{$k}; + } + + return %arg; + } + else { + return $self->{_many}; + } +} + +sub via { + my ($self) = shift; + + $self->{_via} ||= {}; + + if ( scalar(@_) == 1 ) { + my $k = shift; + return $self->{_via}{$k} || 0; + } + elsif (@_) { + my %arg = @_; + + foreach my $k ( keys %arg ) { + + #warn $a,"\t",$arg{$k}; + $self->{_via}{$k} = $arg{$k}; + } + + return %arg; + } + else { + return $self->{_via}; + } +} + +sub has { + my ($self) = shift; + + $self->{_has} ||= {}; + + if ( scalar(@_) == 1 ) { + my $k = shift; + return $self->{_has}{$k} || 0; + } + elsif (@_) { + my %arg = @_; + + foreach my $k ( keys %arg ) { + + #warn $a,"\t",$arg{$k}; + $self->{_has}{$k} = $arg{$k}; + } + + return %arg; + } + else { + return $self->{_has}; + } +} + +sub edgecount { + my ($self) = shift; + + $self->{_edgecount} ||= {}; + + if ( scalar(@_) == 1 ) { + my $k = shift; + return $self->{_edgecount}{$k} || 0; + } + elsif (@_) { + my %arg = @_; + + foreach my $k ( keys %arg ) { + + #warn $a,"\t",$arg{$k}; + $self->{_edgecount}{$k} = $arg{$k}; + } + + return %arg; + } + else { + return $self->{_edgecount}; + } +} + +sub data_fields { + my ($self) = shift; + + $self->{_data_fields} ||= {}; + + if ( scalar(@_) == 1 ) { + my $k = shift; + return $self->{_data_fields}{$k}; + } + elsif (@_) { + my %arg = @_; + + foreach my $k ( keys %arg ) { + + #warn $a,"\t",$arg{$k}; + $self->{_data_fields}{$k} = $arg{$k}; + } + + return %arg; + } + else { + return $self->{_data_fields}; + } +} + 1;