X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource%2FView.pm;h=3dde9bd3b8c8ea48959c5d21d892d5c2131d317b;hb=052e84314b031e1148b245cf628341825ad46322;hp=f1ab5f1698558d3cd9fba4435cff995f05b1b079;hpb=00be2e0bdac3e84d7da0b17e22aa25a8c249e173;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource/View.pm b/lib/DBIx/Class/ResultSource/View.pm index f1ab5f1..3dde9bd 100644 --- a/lib/DBIx/Class/ResultSource/View.pm +++ b/lib/DBIx/Class/ResultSource/View.pm @@ -17,28 +17,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. @@ -46,21 +58,52 @@ L unless you set L to true. Deploying the view does B translate it between different database syntaxes, so be careful what you write in your view SQL. -Virtual views (L unset or false), are assumed to not +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 -=item is_virtual set to true +=item is_virtual set to false $schema->resultset('Year2000CDs')->all(); SELECT cdid, artist, title FROM year2000cds me -=item is_virtual set to false +=item is_virtual set to true $schema->resultset('Year2000CDs')->all(); @@ -115,6 +158,8 @@ Guillermo Roditi Egroditi@cpan.orgE Jess Robinson +Wallace Reis + =head1 LICENSE You may distribute this code under the same terms as Perl itself.