X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource.pm;h=0d49c0051e2a2cbd9e53241b66a0f351bf345c31;hb=70bb942d89a34bc025ecf75f750c57fc9d2f4109;hp=cbba2a056c6851b4273e57734dd60da576cecb40;hpb=2d7d8459576fcc3f41845b40d755fc83a4b04c01;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index cbba2a0..0d49c00 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -29,6 +29,8 @@ DBIx::Class::ResultSource - Result source object A ResultSource is a component of a schema from which results can be directly retrieved, most usually a table (see L) +Basic view support also exists, see L<. + =head1 METHODS =pod @@ -72,7 +74,7 @@ the hashref as the column_info for that column. Repeated calls of this method will add more columns, not replace them. The column names given will be created as accessor methods on your -L objects, you can change the name of the accessor +L objects. You can change the name of the accessor by supplying an L in the column_info hash. The contents of the column_info are not set in stone. The following @@ -136,7 +138,7 @@ automatically. =item auto_nextval Set this to a true value for a column whose value is retrieved -automatically from an oracle sequence. If you do not use an oracle +automatically from an oracle sequence. If you do not use an Oracle trigger to get the nextval, you have to set sequence as well. =item extra @@ -544,6 +546,76 @@ sub unique_constraint_columns { return @{ $unique_constraints{$constraint_name} }; } +=head2 sqlt_deploy_callback + +=over + +=item Arguments: $callback + +=back + + __PACKAGE__->sqlt_deploy_callback('mycallbackmethod'); + +An accessor to set a callback to be called during deployment of +the schema via L or +L. + +The callback can be set as either a code reference or the name of a +method in the current result class. + +If not set, the L is called. + +Your callback will be passed the $source object representing the +ResultSource instance being deployed, and the +L object being created from it. The +callback can be used to manipulate the table object or add your own +customised indexes. If you need to manipulate a non-table object, use +the L. + +See L for examples. + +This sqlt deployment callback can only be used to manipulate +SQL::Translator objects as they get turned into SQL. To execute +post-deploy statements which SQL::Translator does not currently +handle, override L in your Schema class +and call L. + +=head2 default_sqlt_deploy_hook + +=over + +=item Arguments: $source, $sqlt_table + +=item Return value: undefined + +=back + +This is the sensible default for L. + +If a method named C exists in your Result class, it +will be called and passed the current C<$source> and the +C<$sqlt_table> being deployed. + +=cut + +sub default_sqlt_deploy_hook { + my $self = shift; + + my $class = $self->result_class; + + if ($class and $class->can('sqlt_deploy_hook')) { + $class->sqlt_deploy_hook(@_); + } +} + +sub _invoke_sqlt_deploy_hook { + my $self = shift; + if ( my $hook = $self->sqlt_deploy_callback) { + $self->$hook(@_); + } +} + =head2 resultset =over 4 @@ -577,7 +649,7 @@ but is cached from then on unless resultset_class changes. $source->resultset_class('My::ResultSet::Class'); -Set the class of the resultset, this is useful if you want to create your +Set the class of the resultset. This is useful if you want to create your own resultset methods. Create your own class derived from L, and set it here. If called with no arguments, this method returns the name of the existing resultset class, if one @@ -1367,8 +1439,6 @@ and don't actually accomplish anything on their own: Creates a new ResultSource object. Not normally called directly by end users. -=cut - =head2 column_info_from_storage =over @@ -1379,84 +1449,12 @@ Creates a new ResultSource object. Not normally called directly by end users. =back + __PACKAGE__->column_info_from_storage(1); + Enables the on-demand automatic loading of the above column metadata from storage as neccesary. This is *deprecated*, and should not be used. It will be removed before 1.0. - __PACKAGE__->column_info_from_storage(1); - -=cut - -=head2 sqlt_deploy_hook - -=over 4 - -=item Arguments: $source, $sqlt_table - -=item Return value: undefined - -=back - -An optional sub which you can declare in your own Result class that will get -passed the L object when you deploy the schema -via L or L. - -This is useful to make L create non-unique indexes, or set -table options such as C. For an example of what you can do with -this, see -L. - -Note that sqlt_deploy_hook is called by -L, which in turn is called before -L. Therefore the hook can be used only to manipulate -the L object before it is turned into SQL fed to the -database. If you want to execute post-deploy statements which can not be generated -by L, the currently suggested method is to overload -L and use L. - -Starting from DBIC 0.08100 a simple hook is inherited by all result sources, which -invokes the method or coderef specified in L. You can still -overload this method like in older DBIC versions without any compatibility issues. - -=cut - -sub sqlt_deploy_hook { - my $self = shift; - if ( my $hook = $self->sqlt_deploy_callback) { - $self->$hook(@_); - } -} - -=head2 sqlt_deploy_callback - -An attribute which contains the callback to trigger on C. -Defaults to C. Can be a code reference or the name -of a method in a result class. You would change the default value in case you -want to share a hook between several result sources, or if you want to use a -result source without a declared result class. - -=head2 default_sqlt_deploy_hook($table) - -Delegates to a an optional C method on the C. - -This will get passed the L object when you -deploy the schema via L or L. - -For an example of what you can do with this, see -L. - -=cut - -sub default_sqlt_deploy_hook { - my $self = shift; - - my $class = $self->result_class; - - if ($class and $class->can('sqlt_deploy_hook')) { - $class->sqlt_deploy_hook(@_); - } -} - =head1 AUTHORS