I'm trying to create a subclass of the DBI class. My goal is twofold:
1) Override the connect method so that I can hide many of the details
of connecting from the rest of my package, and
2) Add a few extra "helper" methods.
I want to access my extra helper methods, plus all the standard DBI
methods.
My subclass has no data of its own, so I just wanted to use the normal
DBI handle as the object reference.
I did something like this:
package My::DB;
use strict;
use vars qw(@ISA);
use DBI;
@ISA = qw(DBI);
sub connect {
my $self = shift;
my $class = ref($self) || $self;
#... figure connect info $data_source, $username, $password
return $class->SUPER::connect($data_source, $username, $password);
}
sub MyMethod {
my $this = shift;
# ... do some stuff
}
Now when I do this:
$dbh = My::DB->connect();
it works, but this:
$dbh->MyMethod();
fails with "Can't locate object method "MyMethod" via package My::DB at
...". Can I not inherit from DBI? I thought that the reference would
be for my class, if DBI uses the two-argument form of bless... What am
I doing wrong here?
So, then I thought I'd try re-blessing it into my class, like this:
sub connect {
my $self = shift;
my $class = ref($self) || $self;
#... figure connect info $data_source, $username, $password
my $this = $class->SUPER::connect($data_source, $username, $password);
return bless($this, $class);
}
Now I can get to $dbh->MyMethod(), but I can't get to any of the DBI
methods; for example $dbh->prepare() fails with:
Can't locate auto/My/DB/prepare.al in @INC ...
I can't even get there using SUPER; this also fails:
sub MyMethod {
my $this = shift;
# ... do some stuff
return $this->SUPER::prepare(...);
}
Gives me:
Can't locate auto/My/DB/SUPER/prepare.al in @INC ...
which seems strange to me.
Anyway, can anyone help me make a subclass of DBI that does what I want?
Do I have to write some kind of AUTOLOAD to do a delegator, as described
in Camel? I was hoping that the @ISA thing would allow any method that
wasn't known in my class to be automatically looked for in my parent
classes... why doesn't that work?
Thanks!
--
-------------------------------------------------------------------------------
Paul D. Smith <[EMAIL PROTECTED]> HASMAT--HA Software Methods & Tools
"Please remain calm...I may be mad, but I am a professional." --Mad Scientist
-------------------------------------------------------------------------------
These are my opinions---Nortel Networks takes no responsibility for them.