X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource%2FView.pm;h=ede6d1d4439925adcb918c47fdbd59c40faabfbf;hb=e570488a;hp=669306016e04e033ca469c94d4f41cde83a89855;hpb=bf5c3a3f1c0f706106d762e52a0b7092bee1932a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource/View.pm b/lib/DBIx/Class/ResultSource/View.pm index 6693060..ede6d1d 100644 --- a/lib/DBIx/Class/ResultSource/View.pm +++ b/lib/DBIx/Class/ResultSource/View.pm @@ -3,12 +3,8 @@ package DBIx::Class::ResultSource::View; use strict; use warnings; -use DBIx::Class::ResultSet; -use SQL::Translator::Parser::DBIx::Class; -use Data::Dumper::Concise; +use base 'DBIx::Class::ResultSource'; -use base qw/DBIx::Class/; -__PACKAGE__->load_components(qw/ResultSource/); __PACKAGE__->mk_group_accessors( 'simple' => qw(is_virtual view_definition deploy_depends_on) ); @@ -18,15 +14,15 @@ DBIx::Class::ResultSource::View - ResultSource object representing a view =head1 SYNOPSIS - package MyDB::Schema::Result::Year2000CDs; + package MyApp::Schema::Result::Year2000CDs; use base qw/DBIx::Class::Core/; __PACKAGE__->table_class('DBIx::Class::ResultSource::View'); __PACKAGE__->table('year2000cds'); - __PACKAGE__->result_source_instance->is_virtual(1); - __PACKAGE__->result_source_instance->view_definition( + __PACKAGE__->result_source->is_virtual(1); + __PACKAGE__->result_source->view_definition( "SELECT cdid, artist, title FROM cd WHERE year ='2000'" ); __PACKAGE__->add_columns( @@ -65,34 +61,34 @@ 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 +Having created the MyApp::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(); + $y2000_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 ='?'" + __PACKAGE__->result_source->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); + __PACKAGE__->result_source->is_virtual(1); You could now say: - $2001_cds = $schema->resultset('Year2000CDs') - ->search({}, { bind => [2001] }) - ->all(); - $count = $schema->resultset('Year2000CDs') - ->search({}, { bind => [2001] }) - ->count(); + $y2001_cds = $schema->resultset('Year2000CDs') + ->search({}, { bind => [2001] }) + ->all(); + $count = $schema->resultset('Year2000CDs') + ->search({}, { bind => [2001] }) + ->count(); =head1 SQL EXAMPLES @@ -108,7 +104,7 @@ You could now say: $schema->resultset('Year2000CDs')->all(); - SELECT cdid, artist, title FROM + SELECT cdid, artist, title FROM (SELECT cdid, artist, title FROM cd WHERE year ='2000') me =back @@ -117,47 +113,31 @@ You could now say: =head2 is_virtual - __PACKAGE__->result_source_instance->is_virtual(1); + __PACKAGE__->result_source->is_virtual(1); Set to true for a virtual view, false or unset for a real database-based view. =head2 view_definition - __PACKAGE__->result_source_instance->view_definition( + __PACKAGE__->result_source->view_definition( "SELECT cdid, artist, title FROM cd WHERE year ='2000'" ); An SQL query for your view. Will not be translated across database syntaxes. -=head2 deploy_depends_on +=head2 deploy_depends_on - __PACKAGE__->result_source_instance->deploy_depends_on( - "MyDB::Schema::Result::Year","MyDB::Schema::Result::CD" + __PACKAGE__->result_source->deploy_depends_on( + ["MyApp::Schema::Result::Year","MyApp::Schema::Result::CD"] ); -Specify the result classes that comprise this view. Pass this -method a list. +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 -=head2 new - -The constructor. This is a private method, as only other DBIC modules -should call this. - -=cut - -sub new { - my ( $self, @args ) = @_; - my $new = $self->next::method(@args); - $new->{deploy_depends_on} - = { map { $_->result_source_instance->name => 1 } @{ $new->{deploy_depends_on}||[] } } - unless ref $new->{deploy_depends_on} eq 'HASH'; - return $new; -} - =head2 from Returns the FROM entry for the table (i.e. the view name) @@ -166,39 +146,42 @@ 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; + $_[0]->throw_exception('from() is not a setter method') if @_ > 1; + $_[0]->is_virtual + ? \( '(' . $_[0]->view_definition .')' ) + : $_[0]->name + ; } -=head1 PRIVATE METHODS +=head1 OTHER METHODS -=head2 deploy_depends_on +=head2 new -An internal method for the construction of a hashref of the view's -superclasses, e.g., the sources that comprise it. +The constructor. =cut -1; - -=head1 AUTHORS - -Matt S. Trout - -With Contributions from: - -Guillermo Roditi Egroditi@cpan.orgE - -Jess Robinson +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; +} -Wallace Reis +=head1 FURTHER QUESTIONS? -Amiri Barksdale +Check the list of L. -=head1 LICENSE +=head1 COPYRIGHT AND LICENSE -You may distribute this code under the same terms as Perl itself. +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. =cut +1;