Protect several resolve_relationship_condition() callsites
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSource / View.pm
index 3cf5cf8..818295e 100644 (file)
@@ -3,12 +3,11 @@ package DBIx::Class::ResultSource::View;
 use strict;
 use warnings;
 
-use DBIx::Class::ResultSet;
+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) );
+__PACKAGE__->mk_group_accessors( rsrc_instance_specific_attribute => qw(
+  is_virtual view_definition deploy_depends_on
+));
 
 =head1 NAME
 
@@ -16,15 +15,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(
@@ -63,34 +62,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
 
@@ -106,7 +105,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
@@ -115,28 +114,28 @@ 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 views (and only the views) that this view depends on.
-Pass this an array reference.
+Pass this an array reference of fully qualified result classes.
 
 =head1 OVERRIDDEN METHODS
 
@@ -148,42 +147,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 OTHER METHODS
+
+=head2 new
+
+The constructor.
+
+=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';
+    $new->{deploy_depends_on} =
+      { map { $_ => 1 }
+          @{ $new->{deploy_depends_on} || [] } }
+      unless ref $new->{deploy_depends_on} eq 'HASH';
     return $new;
 }
 
-1;
-
-=head1 AUTHORS
+=head1 FURTHER QUESTIONS?
 
-Matt S. Trout <mst@shadowcatsystems.co.uk>
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
 
-With Contributions from:
+=head1 COPYRIGHT AND LICENSE
 
-Guillermo Roditi E<lt>groditi@cpan.orgE<gt>
-
-Jess Robinson <castaway@desert-island.me.uk>
-
-Wallace Reis <wreis@cpan.org>
-
-Amiri Barksdale <amiri@metalabel.com>
-
-=head1 LICENSE
-
-You may distribute this code under the same terms as Perl itself.
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
 
 =cut
 
+1;