1 package WebPAC::Output::DBI;
6 use base qw/WebPAC::Common WebPAC::Output Class::Accessor/;
7 __PACKAGE__->mk_accessors(qw(
21 use Data::Dump qw/dump/;
27 WebPAC::Output::DBI - feed data into RDBMS via DBI
39 my $log = $self->_get_logger;
41 $log->info($self->dsn);
45 $self->{_dbh} = DBI->connect( $self->dsn, $self->user, $self->passwd, { RaiseError => 1 } );
47 $self->{_dbh}->begin_work unless $self->no_transaction;
49 if ( -e $self->schema ) {
50 foreach my $sql ( split(/;/, scalar read_file( $self->schema )) ) {
52 eval { $self->{_dbh}->do( $sql ); };
62 Adds one entry to database.
73 return unless defined $ds->{_rows};
75 my $log = $self->_get_logger;
77 $id = $self->input . '-' . $id if $self->input;
79 foreach my $table ( keys %{ $ds->{_rows} } ) {
81 my @rows = @{ $ds->{_rows}->{$table} };
82 foreach my $row ( @rows ) {
84 my @cols = sort keys %$row;
86 my $sth_id = $table . ':' . join(',',@cols);
89 = $self->{_sth}->{$sth_id}
97 . ' (' . join(',', @cols), ')'
99 , join(',', map { '?' } 0 .. $#cols )
103 $log->debug( "SQL $sth_id: $sql" );
106 = $self->{_sth}->{$sth_id}
107 = $self->{_dbh}->prepare( $sql )
111 $log->debug( "row $table ", sub { dump( $row ) } );
112 $sth->execute( map { $row->{$_} } @cols );
129 my $log = $self->_get_logger();
131 $log->info('finish');
133 unless ( $self->no_transaction ) {
134 $self->{_dbh}->commit;
135 $log->info('commit done');
143 Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
145 =head1 COPYRIGHT & LICENSE
147 Copyright 2009 Dobrica Pavlinusic, All Rights Reserved.
149 This program is free software; you can redistribute it and/or modify it
150 under the same terms as Perl itself.
154 1; # End of WebPAC::Output::CouchDB