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 )