/[webpac2]/trunk/lib/WebPAC/Output/DBI.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/WebPAC/Output/DBI.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1210 - (hide annotations)
Sat May 30 15:26:25 2009 UTC (14 years, 11 months ago) by dpavlin
File size: 2212 byte(s)
 r1906@llin:  dpavlin | 2009-05-30 17:26:17 +0200
 added table name to row normalize command so we can create
 data in different tables directly from normalization file

1 dpavlin 1207 package WebPAC::Output::DBI;
2    
3     use warnings;
4     use strict;
5    
6     use base qw/WebPAC::Common WebPAC::Output Class::Accessor/;
7     __PACKAGE__->mk_accessors(qw(
8     input
9    
10     dsn
11     user
12     passwd
13    
14     schema
15    
16     table
17     ));
18    
19     use Data::Dump qw/dump/;
20     use DBI;
21     use File::Slurp;
22    
23     =head1 NAME
24    
25     WebPAC::Output::DBI - feed data into RDBMS via DBI
26    
27     =head1 FUNCTIONS
28    
29     =head2 init
30    
31     $out->init;
32    
33     =cut
34    
35     sub init {
36     my $self = shift;
37     my $log = $self->_get_logger;
38    
39     $log->info($self->dsn);
40    
41 dpavlin 1210 $self->{_rows} = {};
42     $self->{_sth} = {};
43 dpavlin 1207
44     $self->{_dbh} = DBI->connect( $self->dsn, $self->user, $self->passwd, { RaiseError => 1 } );
45    
46     eval {
47     $self->{_dbh}->do( scalar read_file( $self->schema ) ) if -e $self->schema;
48     };
49    
50     return 1;
51     }
52    
53    
54     =head2 add
55    
56     Adds one entry to database.
57    
58     $out->add( 42, $ds );
59    
60     =cut
61    
62     sub add {
63     my $self = shift;
64    
65     my ( $id, $ds ) = @_;
66    
67     return unless defined $ds->{_rows};
68    
69     my $log = $self->_get_logger;
70    
71     $id = $self->input . '-' . $id if $self->input;
72    
73 dpavlin 1210 foreach my $table ( keys %{ $ds->{_rows} } ) {
74 dpavlin 1207
75 dpavlin 1210 my @rows = @{ $ds->{_rows}->{$table} };
76     foreach my $row ( @rows ) {
77 dpavlin 1207
78 dpavlin 1210 my @cols = sort keys %$row;
79 dpavlin 1207
80 dpavlin 1210 my $sth_id = $table . ':' . join(',',@cols);
81    
82     my $sth
83     = $self->{_sth}->{$sth_id}
84     ;
85    
86     if ( ! $sth ) {
87    
88     my $sql = join( ''
89     , 'insert into '
90     , $table
91     . ' (' . join(',', @cols), ')'
92     , ' values ('
93     , join(',', map { '?' } 0 .. $#cols )
94     , ')'
95     );
96    
97     $log->debug( "SQL $sth_id: $sql" );
98    
99     $sth
100     = $self->{_sth}->{$sth_id}
101     = $self->{_dbh}->prepare( $sql )
102     ;
103     };
104    
105     $log->debug( "row $table ", sub { dump( $row ) } );
106     $sth->execute( map { $row->{$_} } @cols );
107    
108     push @{ $self->{_rows}->{$table} }, $_ foreach @rows;
109    
110     }
111 dpavlin 1207 }
112    
113     return 1;
114     }
115    
116     =head2 finish
117    
118     $out->finish;
119    
120     =cut
121    
122     sub finish {
123     my $self = shift;
124    
125     my $log = $self->_get_logger();
126    
127     $log->info('finish and dump data into database');
128    
129     warn dump( $self->{_rows} );
130    
131     return 1;
132     }
133    
134     =head1 AUTHOR
135    
136     Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
137    
138     =head1 COPYRIGHT & LICENSE
139    
140     Copyright 2009 Dobrica Pavlinusic, All Rights Reserved.
141    
142     This program is free software; you can redistribute it and/or modify it
143     under the same terms as Perl itself.
144    
145     =cut
146    
147     1; # End of WebPAC::Output::CouchDB

  ViewVC Help
Powered by ViewVC 1.1.26