roman has asked for the wisdom of the Perl Monks concerning the following question:
Dear monks,
hope there's someone skilled enough in DBI.
Can I subclass DBI (DBI::db) and have the errors (I use RaiseError = 1) reported in user not in subclassing code?
Better with example:
#!/usr/bin/perl use strict; use warnings; { package MyDBI; use base qw(DBI); package MyDBI::db; use base qw(DBI::db); sub selectrow_array { my ($this) = shift; # only for ilustration return $this->SUPER::selectrow_array(@_); } package MyDBI::st; use base qw(DBI::st); } my $db = ...; # any connection, user, pwd my $user = ...; my $auth = ...; my $dbh = DBI->connect( "dbi:mysql:$db", $user, $auth, { 'RaiseError' => 1, 'RootClass' => 'MyDBI', 'PrintError' => 0, } ); warn ref($dbh); warn join ';', $dbh->selectrow_array("SELECT 'dog', 'cat', 'rat' "); warn join ';', $dbh->selectrow_array("SELECT 'dog', 'cat', 'rat' FROM +no_such_table");
running this code I give
MyDBI::db at simple.pl line 35. dog;cat;rat at simple.pl line 36. DBD::mysql::db selectrow_array failed: Table 'devel.no_such_table' doe +sn't exist at simple.pl line 15.
As you see the error is reported to occur on line 15 (inside MyDBI::db::selectrow_array), but I want it to be reported on line 38 (where selectrow_array is called).
Can I make DBI to report it this way?
Thanks for any help
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: How to subclass DBI and still have the errors reported in user code
by moritz (Cardinal) on Sep 11, 2007 at 12:06 UTC | |
by roman (Monk) on Sep 11, 2007 at 13:14 UTC | |
by moritz (Cardinal) on Sep 11, 2007 at 13:47 UTC | |
Re: How to subclass DBI and still have the errors reported in user code
by pilcrow (Sexton) on Sep 11, 2007 at 14:40 UTC | |
Re: How to subclass DBI and still have the errors reported in user code
by thospel (Hermit) on Sep 12, 2007 at 13:31 UTC |