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
__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(
only have parameters if L</is_virtual> is set to true. It may contain JOINs,
sub selects and any other SQL your database supports.
+For virtual views the column names returned by the view definition SQL
+must match the names in
+L<add_columns|DBIx::Class::ResultSource/add_columns>, while for
+non-vritual views the order must match.
+
View definition SQL is deployed to your database on
L<DBIx::Class::Schema/deploy> unless you set L</is_virtual> to true.
=head1 EXAMPLES
-Having created the MyApp::Schema::Year2000CDs schema as shown in the SYNOPSIS
-above, you can then:
+Having created the MyApp::Schema::Result::Year2000CDs schema as shown in the
+SYNOPSIS above, you can then:
$y2000_cds = $schema->resultset('Year2000CDs')
->search()
If you modified the schema to include a placeholder
- __PACKAGE__->result_source_instance->view_definition(
+ __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:
=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'"
);
=head2 deploy_depends_on
- __PACKAGE__->result_source_instance->deploy_depends_on(
+ __PACKAGE__->result_source->deploy_depends_on(
["MyApp::Schema::Result::Year","MyApp::Schema::Result::CD"]
);
=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