File Coverage

blib/lib/SPOPS/Import/DBI/GenericOperation.pm
Criterion Covered Total %
statement 6 6 100.0
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 8 8 100.0


line stmt bran cond sub pod time code
1             package SPOPS::Import::DBI::GenericOperation;
2              
3             # $Id: GenericOperation.pm,v 1.2 2004/06/02 00:33:20 lachoy Exp $
4              
5 2     2   15 use strict;
  2         4  
  2         94  
6 2     2   11 use base qw( SPOPS::Import );
  2         4  
  2         1174  
7             use SPOPS::Exception qw( spops_error );
8             use SPOPS::SQLInterface;
9              
10             $SPOPS::Import::DBI::GenericOperation::VERSION = sprintf("%d.%02d", q$Revision: 1.2 $ =~ /(\d+)\.(\d+)/);
11              
12             my @FIELDS = qw( table db where );
13             SPOPS::Import::DBI::GenericOperation->mk_accessors( @FIELDS );
14              
15             sub add_where_params {
16             my ( $self, @args ) = @_;
17             push @{ $self->{where_params} }, @args;
18             }
19              
20             sub where_params {
21             my ( $self, $all_args ) = @_;
22             if ( $all_args ) {
23             $self->{where_params} = ( ref $all_args )
24             ? $all_args : [ $all_args ];
25             }
26             return $self->{where_params};
27             }
28              
29             ########################################
30             # Core API
31              
32             sub get_fields { return ( $_[0]->SUPER::get_fields(), @FIELDS ) }
33              
34             sub run {
35             my ( $self ) = @_;
36              
37             unless ( $self->db ) { spops_error "Cannot run without a database handle available" }
38             unless ( $self->table ) { spops_error "Cannot run without table defined" }
39             unless ( $self->where ) { spops_error "Cannot run without where clause defined" }
40              
41             my %op_args = (
42             db => $self->db,
43             table => $self->table,
44             where => $self->where,
45             value => $self->where_params,
46             );
47             my $rv = eval { $self->_run_operation( \%op_args ) };
48             return ( $@ ) ? [ [ undef, $rv, $@ ] ]
49             : [ [ 1, $rv, undef ] ];
50             }
51              
52             sub _run_operation {
53             my ( $self ) = @_;
54             die "'", ref( $self ), "' does not implement the required ",
55             "method '_run_operation()'";
56             }
57              
58             ########################################
59             # For subclasses...
60              
61             sub data_from_file {
62             my ( $self, $filename ) = @_;
63             $self->assign_data( $self->raw_data_from_file( $filename ) );
64             }
65              
66              
67             sub data_from_fh {
68             my ( $self, $fh ) = @_;
69             $self->assign_data( $self->raw_data_from_fh( $fh ) );
70             }
71              
72              
73             sub assign_raw_data {
74             my ( $self, $metadata ) = @_;
75             for ( qw( where table where_params ) ) {
76             $self->$_( $metadata->{$_} );
77             delete $metadata->{ $_ };
78             }
79             $self->extra_metadata( $metadata );
80             return $self;
81             }
82              
83             1;
84              
85             __END__