Is this too advanced a question for [EMAIL PROTECTED]?
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 "Send" via package My::DB at ...".
Is this telling me that DBI was implemented using only the 1-arg form of
bless? Can I not inherit from DBI?
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 (or use
Class::Delegate or something), 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.