X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource%2FView.pm;h=4410563e20b35ba2a32f7b1d9d5a40117b863d81;hb=0edbc8f0aab7586741d86c94b37fbf3b883361b2;hp=0bcb0fc1c2af8e86048d71b54a3f6af64d018a77;hpb=66d2a14ea3256b7f4bb2d31c9e0d066e07833d97;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource/View.pm b/lib/DBIx/Class/ResultSource/View.pm index 0bcb0fc..4410563 100644 --- a/lib/DBIx/Class/ResultSource/View.pm +++ b/lib/DBIx/Class/ResultSource/View.pm @@ -8,8 +8,7 @@ use DBIx::Class::ResultSet; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/ResultSource/); __PACKAGE__->mk_group_accessors( - 'simple' => qw(is_virtual view_definition) -); + 'simple' => qw(is_virtual view_definition deploy_depends_on) ); =head1 NAME @@ -17,28 +16,40 @@ DBIx::Class::ResultSource::View - ResultSource object representing a view =head1 SYNOPSIS - package MyDB::Schema::Year2000CDs; + package MyDB::Schema::Result::Year2000CDs; - use DBIx::Class::ResultSource::View; + use base qw/DBIx::Class::Core/; - __PACKAGE__->load_components('Core'); __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); __PACKAGE__->table('year2000cds'); __PACKAGE__->result_source_instance->is_virtual(1); __PACKAGE__->result_source_instance->view_definition( "SELECT cdid, artist, title FROM cd WHERE year ='2000'" - ); + ); + __PACKAGE__->add_columns( + 'cdid' => { + data_type => 'integer', + is_auto_increment => 1, + }, + 'artist' => { + data_type => 'integer', + }, + 'title' => { + data_type => 'varchar', + size => 100, + }, + ); =head1 DESCRIPTION View object that inherits from L -This class extends ResultSource to add basic view support. +This class extends ResultSource to add basic view support. -A view has a L, which contains an SQL query. The -query cannot have parameters. It may contain JOINs, sub selects and -any other SQL your database supports. +A view has a L, which contains a SQL query. The query can +only have parameters if L is set to true. It may contain JOINs, +sub selects and any other SQL your database supports. View definition SQL is deployed to your database on L unless you set L to true. @@ -50,6 +61,37 @@ Virtual views (L true), are assumed to not exist in your database as a real view. The L in this case replaces the view name in a FROM clause in a subselect. +=head1 EXAMPLES + +Having created the MyDB::Schema::Year2000CDs schema as shown in the SYNOPSIS +above, you can then: + + $2000_cds = $schema->resultset('Year2000CDs') + ->search() + ->all(); + $count = $schema->resultset('Year2000CDs') + ->search() + ->count(); + +If you modified the schema to include a placeholder + + __PACKAGE__->result_source_instance->view_definition( + "SELECT cdid, artist, title FROM cd WHERE year ='?'" + ); + +and ensuring you have is_virtual set to true: + + __PACKAGE__->result_source_instance->is_virtual(1); + +You could now say: + + $2001_cds = $schema->resultset('Year2000CDs') + ->search({}, { bind => [2001] }) + ->all(); + $count = $schema->resultset('Year2000CDs') + ->search({}, { bind => [2001] }) + ->count(); + =head1 SQL EXAMPLES =over @@ -87,6 +129,14 @@ database-based view. An SQL query for your view. Will not be translated across database syntaxes. +=head2 deploy_depends_on + + __PACKAGE__->result_source_instance->deploy_depends_on( + ["MyDB::Schema::Result::Year","MyDB::Schema::Result::CD"] + ); + +Specify the views (and only the views) that this view depends on. +Pass this an array reference of fully qualified result classes. =head1 OVERRIDDEN METHODS @@ -98,24 +148,34 @@ or the SQL as a subselect if this is a virtual view. =cut sub from { - my $self = shift; - return \"(${\$self->view_definition})" if $self->is_virtual; - return $self->name; + my $self = shift; + return \"(${\$self->view_definition})" if $self->is_virtual; + return $self->name; } -1; +=head1 OTHER METHODS -=head1 AUTHORS +=head2 new -Matt S. Trout +The constructor. -With Contributions from: +=cut -Guillermo Roditi Egroditi@cpan.orgE +sub new { + my ( $self, @args ) = @_; + my $new = $self->next::method(@args); + $new->{deploy_depends_on} = + { map { $_ => 1 } + @{ $new->{deploy_depends_on} || [] } } + unless ref $new->{deploy_depends_on} eq 'HASH'; + return $new; +} -Jess Robinson +1; + +=head1 AUTHORS -Wallace Reis +See L. =head1 LICENSE