DBIx-Class-Preview

 view release on metacpan or  search on metacpan

lib/DBIx/Class/ResultSource/Table/Previewed.pm  view on Meta::CPAN

package DBIx::Class::ResultSource::Table::Previewed;

use warnings;
use strict;

use DBIx::Class::ResultSource::Table::Preview;
use base qw/DBIx::Class::ResultSource::Table/;

sub schema {
  my $self = shift;

  if ( @_ && !$self->{schema} ) {    # only fire if we're getting schema set for first time
    my ($schema) = @_;

    my $new_source = DBIx::Class::ResultSource::Table::Preview->new({
			%$self,
			name           => $self->name . "_preview",
			_relationships => Storable::dclone( $self->_relationships ),
		});
    $new_source->add_column('dirty' => { data_type => 'integer', default_value => 0 });
    $new_source->add_column('deleted' => { data_type => 'integer', default_value => 0 });
    $new_source->preview_table($self->from . '_preview');
    my $target_class = $new_source->result_class . '::preview';
    $self->inject_base(
        $target_class => $new_source->result_class
        );
    $new_source->result_class( $target_class );
    $target_class->result_source_instance($new_source)
        if $target_class->can('result_source_instance');

    $new_source->relationship_info($_)->{attrs}{cascade_delete} = 0
			for $new_source->relationships;
    my $new_source_name =
			$self->source_name . '::preview';
    $schema->register_extra_source( $new_source_name => $new_source );
	}
  return $self->next::method(@_);
}

sub previewed {
  my ( $self ) = @_;

  my $schema = $self->schema || die "No schema";
  my $partition =
    $schema->source( $self->source_name . '::preview' );
  return $partition;
}


1;



( run in 4.186 seconds using v1.01-cache-2.11-cpan-ceb78f64989 )