X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource.pm;h=cfa8bc983852307014a2f1d39112b1deedd3232d;hb=880a1a0cc6a48a3165656fe5daf7ec288901c3e2;hp=250cc5d81c0e2da4eceabff5ce38c9aac3bf2054;hpb=772547820db1ef7538e36902bd728c6afc11bde8;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index 250cc5d..cfa8bc9 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -10,9 +10,12 @@ use Storable; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/AccessorGroup/); -__PACKAGE__->mk_group_accessors('simple' => - qw/_ordered_columns _columns _primaries _unique_constraints name resultset_attributes schema from _relationships/); -__PACKAGE__->mk_group_accessors('component_class' => qw/resultset_class result_class/); +__PACKAGE__->mk_group_accessors('simple' => qw/_ordered_columns + _columns _primaries _unique_constraints name resultset_attributes + schema from _relationships/); + +__PACKAGE__->mk_group_accessors('component_class' => qw/resultset_class + result_class/); =head1 NAME @@ -91,7 +94,8 @@ If the column is allowed to contain NULL values, set a true value =item is_auto_increment Set this to a true value if this is a column that is somehow -automatically filled. This is currently not used by DBIx::Class. +automatically filled. This is used to determine which columns to empty +when cloning objects using C. =item is_foreign_key @@ -106,11 +110,9 @@ currently not used by DBIx::Class. =item sequence -If your column is using a sequence to create it's values, set the name -of the sequence here, to allow the values to be retrieved -automatically by the L module. PK::Auto will -attempt to retrieve the sequence name from the database, if this value -is left unset. +Sets the name of the sequence to use to generate values. If not +specified, L will attempt to retrieve the +name of the sequence from the database automatically. =back @@ -197,13 +199,19 @@ Returns all column names in the order they were declared to add_columns sub columns { my $self = shift; - $self->throw_exception("columns() is a read-only accessor, did you mean add_columns()?") if (@_ > 1); + $self->throw_exception( + "columns() is a read-only accessor, did you mean add_columns()?" + ) if (@_ > 1); return @{$self->{_ordered_columns}||[]}; } =head2 set_primary_key -=head3 Arguments: (@cols) +=over 4 + +=item Arguments: (@cols) + +=back Defines one or more columns as primary key for this source. Should be called after C. @@ -243,8 +251,12 @@ Declare a unique constraint on this source. Call once for each unique constraint. Unique constraints are used when you call C on a L, only columns in the constraint are searched, - # For e.g. UNIQUE (column1, column2) - __PACKAGE__->add_unique_constraint(constraint_name => [ qw/column1 column2/ ]); +e.g., + + # For UNIQUE (column1, column2) + __PACKAGE__->add_unique_constraint( + constraint_name => [ qw/column1 column2/ ], + ); =cut @@ -355,7 +367,8 @@ relationship. sub add_relationship { my ($self, $rel, $f_source_name, $cond, $attrs) = @_; - $self->throw_exception("Can't create relationship without join condition") unless $cond; + $self->throw_exception("Can't create relationship without join condition") + unless $cond; $attrs ||= {}; my %rels = %{ $self->_relationships }; @@ -405,7 +418,11 @@ sub relationships { =head2 relationship_info -=head3 Arguments: ($relname) +=over 4 + +=item Arguments: ($relname) + +=back Returns the relationship information for the specified relationship name @@ -418,7 +435,11 @@ sub relationship_info { =head2 has_relationship -=head3 Arguments: ($rel) +=over 4 + +=item Arguments: ($rel) + +=back Returns 1 if the source has a relationship of this name, 0 otherwise. @@ -431,7 +452,11 @@ sub has_relationship { =head2 resolve_join -=head3 Arguments: ($relation) +=over 4 + +=item Arguments: ($relation) + +=back Returns the join structure required for the related result source @@ -466,7 +491,11 @@ sub resolve_join { =head2 resolve_condition -=head3 Arguments: ($cond, $as, $alias|$object) +=over 4 + +=item Arguments: ($cond, $as, $alias|$object) + +=back Resolves the passed condition to a concrete query fragment. If given an alias, returns a join condition; if given an object, inverts that object to produce @@ -481,8 +510,10 @@ sub resolve_condition { my %ret; while (my ($k, $v) = each %{$cond}) { # XXX should probably check these are valid columns - $k =~ s/^foreign\.// || $self->throw_exception("Invalid rel cond key ${k}"); - $v =~ s/^self\.// || $self->throw_exception("Invalid rel cond val ${v}"); + $k =~ s/^foreign\.// || + $self->throw_exception("Invalid rel cond key ${k}"); + $v =~ s/^self\.// || + $self->throw_exception("Invalid rel cond val ${v}"); if (ref $for) { # Object #warn "$self $k $for $v"; $ret{$k} = $for->get_column($v); @@ -503,7 +534,11 @@ sub resolve_condition { =head2 resolve_prefetch -=head3 Arguments: (hashref/arrayref/scalar) +=over 4 + +=item Arguments: (hashref/arrayref/scalar) + +=back Accepts one or more relationships for the current source and returns an array of column names for each of those relationships. Column names are @@ -604,7 +639,11 @@ sub resolve_prefetch { =head2 related_source -=head3 Arguments: ($relname) +=over 4 + +=item Arguments: ($relname) + +=back Returns the result source object for the given relationship @@ -620,7 +659,11 @@ sub related_source { =head2 related_class -=head3 Arguments: ($relname) +=over 4 + +=item Arguments: ($relname) + +=back Returns the class object for the given relationship @@ -636,10 +679,13 @@ sub related_class { =head2 resultset -Returns a resultset for the given source, by calling: +Returns a resultset for the given source. This will initially be created +on demand by calling $self->resultset_class->new($self, $self->resultset_attributes) +but is cached from then on unless resultset_class changes. + =head2 resultset_class Set the class of the resultset, this is useful if you want to create your @@ -654,9 +700,15 @@ Specify here any attributes you wish to pass to your specialised resultset. sub resultset { my $self = shift; - $self->throw_exception('resultset does not take any arguments. If you want another resultset, call it on the schema instead.') if scalar @_; - return $self->{_resultset} if ref $self->{_resultset} eq $self->resultset_class; - return $self->{_resultset} = $self->resultset_class->new($self, $self->{resultset_attributes}); + $self->throw_exception( + 'resultset does not take any arguments. If you want another resultset, '. + 'call it on the schema instead.' + ) if scalar @_; + return $self->{_resultset} + if ref $self->{_resultset} eq $self->resultset_class; + return $self->{_resultset} = $self->resultset_class->new( + $self, $self->{resultset_attributes} + ); } =head2 throw_exception