user
passwd
path
+ input_encoding
));
use Encode;
my $sql = read_file $self->path;
my $log = $self->_get_logger;
- $log->debug( "dsn: ", $self->dsn );
+ $log->debug( "args: ", sub { dump($arg) } );
my $dbh = DBI->connect( $self->dsn, $self->user, $self->passwd, { RaiseError => 1 } );
- $dbh->{sqlite_unicode} = 1;
+ if ( my $db_encoding = $arg->{encoding} ) {
+ $self->debug("encoding $db_encoding");
+ my $dsn = $self->dsn;
+ if ( $dsn =~ m{Pg} ) {
+ $dbh->do( qq{ set client_encoding = '$db_encoding'; } );
+ $dbh->{pg_enable_utf8} = 1; # force utf-8 encoding for SQL_ASCII databases
+ } elsif ( $dsn =~ m{mysql} ) {
+ $dbh->do( qq{ set names '$db_encoding'; } );
+ } elsif ( $dsn =~ m{SQLite} ) {
+ $dbh->{sqlite_unicode} = 1;
+ } else {
+ warn "Don't know how to set encoding to $db_encoding for $dsn";
+ }
+ }
$log->debug( "sql ",$self->path, "\n", $sql );
sub fetch_rec {
my ( $self, $mfn, $filter_coderef ) = @_;
+ my $log = $self->_get_logger;
my $rec = { '000' => [ $mfn ] };
my $row = $self->{_rec}->[$mfn-1] || die "no record $mfn";
foreach my $c ( keys %$row ) {
$rec->{$c} = [ $row->{$c} ];
}
+ $log->debug("fetch_rec ",sub { dump($rec) });
return $rec;
}