DBIx-Class-Indexed

 view release on metacpan or  search on metacpan

lib/DBIx/Class/Indexed.pm  view on Meta::CPAN


    my $indexer = $schema->{ _indexers }->{ $key };
    
    # lazy load the indexer
    if( !$indexer ) {
        my $name    = $self->indexer_package;
        my $package = "DBIx::Class::Indexer::$name";
        
        load $package;

        $indexer = $package->new( $self->indexer_connection_info, ref $self );
        $schema->{ _indexers }->{ $key } = $indexer;
    }

    return $indexer;
}

=head2 set_indexer( $name [, \%connection_info ] )

Set the indexer information. Connection information is stored in the C<indexer_connection_info> 
accessor and the package name is stored in C<indexer_package>.

=cut

sub set_indexer {
    my $class        = shift;
    my $name         = shift;
    my $connect_info = shift;
    
    $class->indexer_package( $name );
    $class->indexer_connection_info( $connect_info || {} );
}

=head2 insert( )

Sends the object to the indexer's C<insert> method, if C<index_on_insert> is true.

=cut

sub insert {
    my $self   = shift;
    my $result = $self->next::method( @_ );
    
    if ( $self->index_on_insert and my $indexer = $self->indexer ) {
        $indexer->insert( $self, @_ );
        
        if ( $self->is_changed ) {
            $result = $self->next::method( @_ );
        }
    }
    
    return $result;
}

=head2 update( )

Sends the object to the indexer's C<update> method, if C<index_on_update> is true.

=cut

sub update {
    my $self   = shift;
    my $result = $self->next::method( @_ );
    
    if ( $self->index_on_update and my $indexer = $self->indexer ) {
        $indexer->update( $self, @_ );
        
        if ( $self->is_changed ) {
            $result = $self->next::method( @_ );
        }
    }
    
    return $result;
}

=head2 delete( )

Sends the object to the indexer's C<delete> method, if C<index_on_delete> is true.

=cut

sub delete {
    my $self = shift;
    
    if ( $self->index_on_delete and my $indexer = $self->indexer ) {
        $indexer->delete( $self, @_ );
    }
    
    $self->next::method( @_ );
}

=head2 register_column ( $column, \%info )

Overrides DBIx::Class's C<register_column>. If %info contains
the key 'indexed', calls C<register_field>.

=cut

sub register_column {
    my( $class, $column, $info ) = @_;
    $class->next::method( $column, $info );
    
    if (exists $info->{ indexed }) {
        $class->register_field( $column => $info->{ indexed } );
    }
}

=head2 add_index_fields ( @fields )

Behaves similarly to DBIx::Class's C<add_columns>. Calls
C<register_field> underneath.

=cut

sub add_index_fields {
    my( $class, @fields ) = @_;
    my $fields = $class->index_fields;
    
    while ( my $field = shift @fields ) {
        # If next entry is { ... } use that for the column info, if not
        # use an empty hashref



( run in 1.026 second using v1.01-cache-2.11-cpan-39bf76dae61 )