On Fri, 15 May 2009 17:30:44 +0200, "H.Merijn Brand" <h.m.br...@xs4all.nl> wrote:
> How strict should handler attributes be checked? > Isn't barfing on fetchrow_hashref () not a tad bit too late in below > described situation? > > /tmp > cat test.pl > #!/pro/bin/perl > > use strict; > use warnings; > > use DBI; > use Data::Peek; > > my ($dsn, $fhkn) = @ARGV; > > my $dbh = DBI->connect ($dsn, $ENV{DBI_USER}, $ENV{DBI_PASS}, { > FetchHashKeyName => $fhkn, > PrintError => 1, > RaiseError => 1, > }) or die $DBI::errstr; > > my $sth = $dbh->prepare ("select * from test"); > $sth->execute; > DDumper $sth->fetchrow_hashref; > /tmp > > > /tmp > perl test.pl dbi:Pg: NAME_lc > $VAR1 = { > c_test => '1', > test => 'test' > }; > /tmp > perl test.pl dbi:Pg: NAME_uc > $VAR1 = { > C_TEST => '1', > TEST => 'test' > }; > /tmp > perl test.pl dbi:Pg: NAME > $VAR1 = { > c_test => '1', > test => 'test' > }; > /tmp > perl test.pl dbi:Pg: 1 > DBD::Pg::st fetchrow_hashref failed: Can't use attribute '1' because it > doesn't contain a reference to an array (undef) at test.pl line 19. > DBD::Pg::st fetchrow_hashref failed: Can't use attribute '1' because it > doesn't contain a reference to an array (undef) at test.pl line 19. > Exit 255 > /tmp > > > > /tmp > perl test.pl dbi:CSV: NAME_lc > $VAR1 = { > c_test => '1', > test => 'test' > }; > /tmp > perl test.pl dbi:CSV: NAME_uc > $VAR1 = { > C_TEST => '1', > TEST => 'test' > }; > /tmp > perl test.pl dbi:CSV: NAME > $VAR1 = { > c_test => '1', > test => 'test' > }; > /tmp > perl test.pl dbi:CSV: 1 > DBD::CSV::st fetchrow_hashref failed: Can't use attribute '1' because it > doesn't contain a reference to an array (undef) [for Statement "select * from > test"] at test.pl line 19. > DBD::CSV::st fetchrow_hashref failed: Can't use attribute '1' because it > doesn't contain a reference to an array (undef) [for Statement "select * from > test"] at test.pl line 19. > Exit 255 > /tmp > It is obviously just any of the known statement handle attributes. I suggest to make it barf early /tmp > perl test.pl dbi:CSV: TYPE Use of uninitialized value in subroutine entry at test.pl line 19. Use of uninitialized value in subroutine entry at test.pl line 19. $VAR1 = { => 'test' }; /tmp > perl test.pl dbi:CSV: PRECISION Use of uninitialized value in subroutine entry at test.pl line 19. Use of uninitialized value in subroutine entry at test.pl line 19. $VAR1 = { => 'test' }; I'm willing to patch DBI if people agree on this -- H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/ using & porting perl 5.6.2, 5.8.x, 5.10.x, 5.11.x on HP-UX 10.20, 11.00, 11.11, 11.23, and 11.31, OpenSuSE 10.3, 11.0, and 11.1, AIX 5.2 and 5.3. http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/ http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/