/[webpac2]/trunk/lib/WebPAC/Input/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/Input/DBI.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1361 - (hide annotations)
Wed Mar 16 20:16:42 2011 UTC (13 years, 3 months ago) by dpavlin
File size: 2105 byte(s)
added sqlite_unicode to force utf-8 from SQLite
1 dpavlin 1359 package WebPAC::Input::DBI;
2    
3     use warnings;
4     use strict;
5    
6     use WebPAC::Input;
7     use base qw/WebPAC::Common Class::Accessor/;
8     __PACKAGE__->mk_accessors(qw(
9     dsn
10     user
11     passwd
12     path
13     ));
14    
15     use Encode;
16     use Data::Dump qw/dump/;
17     use DBI;
18     use File::Slurp;
19    
20     =head1 NAME
21    
22     WebPAC::Input::DBI - read data from RDBMS using DBI
23    
24     =cut
25    
26     =head1 FUNCTIONS
27    
28     =head2 new
29    
30     my $input = new WebPAC::Input::DBI(
31     dsn => 'dbi:SQLite:dbname=/dev/shm/test.sqlite',
32     user => '',
33     passwd => '',
34     path => '/path/to.sql',
35     );
36    
37     =back
38    
39     =cut
40    
41     sub new {
42     my $class = shift;
43     my $self = {@_};
44     bless($self, $class);
45    
46     my $arg = {@_};
47    
48     my $sql = read_file $self->path;
49    
50     my $log = $self->_get_logger;
51     $log->debug( "dsn: ", $self->dsn );
52    
53     my $dbh = DBI->connect( $self->dsn, $self->user, $self->passwd, { RaiseError => 1 } );
54    
55 dpavlin 1361 $dbh->{sqlite_unicode} = 1;
56    
57 dpavlin 1359 $log->debug( "sql ",$self->path, "\n", $sql );
58    
59     my $sth = $dbh->prepare( $sql );
60     $sth->execute;
61    
62     # XXX this should really be in fetch_rec, but DBD::SQLite doesn't return
63     # $sth->rows correctly, and we really need number of rows...
64     $self->{size} = 0;
65    
66     while ( my $row = $sth->fetchrow_hashref ) {
67     push @{ $self->{_rec} }, $row;
68     $self->{size}++;
69     }
70    
71     $log->info( $self->dsn, " query produced ", $self->size, " records");
72    
73     $self ? return $self : return undef;
74     }
75    
76     =head2 fetch_rec
77    
78     Return record with ID C<$mfn> from database
79    
80     my $rec = $input->fetch_rec( $mfn, $filter_coderef );
81    
82     =cut
83    
84     sub fetch_rec {
85     my ( $self, $mfn, $filter_coderef ) = @_;
86    
87     my $rec = { '000' => [ $mfn ] };
88     my $row = $self->{_rec}->[$mfn-1] || die "no record $mfn";
89     foreach my $c ( keys %$row ) {
90     $rec->{$c} = [ $row->{$c} ];
91     }
92     return $rec;
93     }
94    
95    
96     =head2 size
97    
98     Return number of records in database
99    
100     my $size = $input->size;
101    
102     =cut
103    
104     sub size {
105     my $self = shift;
106     return $self->{size};
107     }
108    
109     =head1 AUTHOR
110    
111     Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
112    
113     =head1 COPYRIGHT & LICENSE
114    
115     Copyright 2011 Dobrica Pavlinusic, All Rights Reserved.
116    
117     This program is free software; you can redistribute it and/or modify it
118     under the same terms as Perl itself.
119    
120     =cut
121    
122     1; # End of WebPAC::Input::DBI

  ViewVC Help
Powered by ViewVC 1.1.26