RE: [dbi] Re: execute not seen on selectrow_* for suclassed DBI
- From: martin.evans@xxxxxxxxxxxx (Martin J. Evans)
- Date: Wed, 29 Mar 2006 16:49:32 +0100 (BST)
Tim,
Thanks, I do keep forgetting about Driver.xst.
So, just to be clear. In DBI.pm, selectrow_array calls _do_selectrow which
calls prepare/execute/fetchsomething but this may be overriden by a driver
using selectrow_array in Driver.xst. If this is the case:
a) is there any way for my subclassed DBI to know this?
b) is there an easy way to identify which other methods this could apply to
Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com
On 29-Mar-2006 Tim Bunce wrote:
On Wed, Mar 29, 2006 at 11:54:32AM +0100, Martin J. Evans wrote:.
The issue I am seeing is not quite as general as I made it sound. For
selectrow_hashref I see prepare/execute/fetch/fetchrow_hashref (as I expect)
but
for selectrow_arrayref and selectrow_array I only see prepare.
Generally... Drivers are free to implement any method in any way they choose.
Their own methods don't have to call execute(), for example.
Specifically... you're probably seeing the effect of the Driver.xst
C code that most compiled drivers embed into themselves. That code
embeds C implementations of selectall_arrayref and several other
methods into the driver itself. The selectall_arrayref code calls the
drivers C functions to do the work. The result is much, much, faster
than going though perl/DBI method dispatch for each row.
Tim.
Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com
On 29-Mar-2006 Martin J. Evans wrote:
Hi,
I have subclassed DBI and override many methods including prepare, execute
and
select* although they are predominantly just passed on to DBI.
If I do:
my $sth->prepare(sql);
$sth->execute;
I see the prepare and execute and pass them on to DBI.
If I do:
$dbh->selectrow_array(sql);
I see prepare and pass it on, but do not see execute. In my case this is
more
than an annoyance as I cannot see any bound parameter passed to execute.
e.g.
$selectrow_array = [
'select b from mytest where a = ?',
undef,
\1
];
prepare: select b from mytest where a = ?
!!! no execute here
Or, perhaps I'm doing something wrong.
Can anyone tell me if I should be seeing the execute when $dbh->select***
is
called? I think I should.
Thanks
Martin
--
Martin J. Evans
Easysoft Ltd, UK
http://www.easysoft.com
- Follow-Ups:
- Re: [dbi] Re: execute not seen on selectrow_* for suclassed DBI
- From: Tim Bunce
- Re: [dbi] Re: execute not seen on selectrow_* for suclassed DBI
- References:
- Re: execute not seen on selectrow_* for suclassed DBI
- From: Tim Bunce
- Re: execute not seen on selectrow_* for suclassed DBI
- Prev by Date: RE: Upgrade.. DBI
- Next by Date: Possible bug in execute_array with dbd::mysql
- Previous by thread: Re: execute not seen on selectrow_* for suclassed DBI
- Next by thread: Re: [dbi] Re: execute not seen on selectrow_* for suclassed DBI
- Index(es):
Relevant Pages
|
|