package DBD::PO::Statement; use strict; use warnings; our $VERSION = '2.09'; use DBD::File; use parent qw(-norequire DBD::File::Statement); use Carp qw(croak); use English qw(-no_match_vars $OS_ERROR); use DBD::PO::Text::PO qw($EOL_DEFAULT $SEPARATOR_DEFAULT @COL_NAMES); sub open_table { ## no critic (ExcessComplexity) my ($self, $data, $table, $create_mode, $lock_mode) = @_; my $dbh = $data->{Database}; my $tables = $dbh->{po_tables}; if (! exists $tables->{$table}) { $tables->{$table} = {}; } my $meta = $tables->{$table} || {}; my $po = $meta->{po} || $dbh->{po_po}; if (! $po) { @{ $dbh->FETCH('f_valid_attrs') }{qw(po_eol po_separator po_charset)} = (1) x 3; ## no critic (MagicNumbers) my $class = $meta->{class} || $dbh->{po_class} || 'DBD::PO::Text::PO'; my %opts = ( eol => exists $meta->{eol} ? $meta->{eol} : exists $dbh->{po_eol} ? $dbh->{po_eol} : $EOL_DEFAULT, separator => exists $meta->{separator} ? $meta->{separator} : exists $dbh->{po_separator} ? $dbh->{po_separator} : $SEPARATOR_DEFAULT, charset => exists $meta->{charset} ? $meta->{charset} : $dbh->{po_charset} ? $dbh->{po_charset} : undef, ); $po = $meta->{po} = $class->new(\%opts); } my $file = $meta->{file} || $table; my $tbl = $self->SUPER::open_table($data, $file, $create_mode, $lock_mode); if ($tbl) { { my $po_charset = exists $meta->{charset} ? $meta->{charset} : $dbh->{po_charset} ? $dbh->{po_charset} : undef; if ($po_charset && $tbl->{fh}) { $tbl->{fh}->binmode("encoding($po_charset)") or croak "binmode $OS_ERROR"; } } $tbl->{po_po} = $po; my $types = $meta->{types}; if ($types) { # The 'types' array contains DBI types, but we need types # suitable for DBD::Text::PO. my $t = []; for (@{$types}) { if ($_) { $_ = $DBD::PO::PO_TYPES[$_ + 6] ## no critic (MagicNumbers) || $DBD::PO::PV; } else { $_ = $DBD::PO::PV; } push @{$t}, $_; } $tbl->{types} = $t; } if ( ! $create_mode && ! $self->{ignore_missing_table} && $self->command() ne 'DROP' ) { $tbl->{col_names} = \@COL_NAMES; } } return $tbl; } sub command { return shift->{command}; } 1; __END__ =head1 NAME DBD::PO::Statement - statement class for DBD::File $Id: Statement.pm 420 2009-12-22 07:36:43Z steffenw $ $HeadURL: https://dbd-po.svn.sourceforge.net/svnroot/dbd-po/trunk/DBD-PO/lib/DBD/PO/Statement.pm $ =head1 VERSION 2.09 =head1 SYNOPSIS do not use =head1 DESCRIPTION statement class for DBD::File =head1 SUBROUTINES/METHODS =head2 method open_table =head2 method command =head1 DIAGNOSTICS none =head1 CONFIGURATION AND ENVIRONMENT none =head1 DEPENDENCIES parent Carp English L L =head1 INCOMPATIBILITIES not known =head1 BUGS AND LIMITATIONS not known =head1 AUTHOR Steffen Winkler =head1 LICENSE AND COPYRIGHT Copyright (c) 2008, Steffen Winkler C<< >>. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut