Knoerl, Thomas wrote:
Hello folks,
Is there are reason why the 'select(all|col)_*' methods support the handover of
statement handles, but 'do' doesn't?
$dbh->do() is what I would call a 'short hand' or 'short cut' method.
It was included for the CUD (Creation Update Delete) operations of SQL
as any of these operations do not involve the return of a 'Result Set'.
All it is doing is wrapping the the 'prepare' and 'execute' into the
'do' and it does not bother to return a 'Statement' handle. It is not a
'Magic' function the eliminates a step or two.
In fact there is a big performance hit when using 'do' repeatedly, say
in the insertion of may row into a db, You would be doing a prepare many
hundreds of times over when you could just
do it once and just change the params ie
Very slow
foreach my $i (1...100){
$dbh->do("insert into bla (id) values ($i)");
}
much faster
my $sth =$dbh->prepare("insert into bla (id) values (?)");
foreach my $i (1...100){
$sth->execute($i);
}
Even faster the execute_array
my @in_values=(1...1000)
my @status;
my $sth = $dbh->prepare(qq{ INSERT INTO foo (id, bar) VALUES ( ?) });
$sth->bind_param_array(1,\...@in_values);
$sth->execute_array({ArrayTupleStatus=>\...@status}) or die "error inserting";
Is it possible to change the statement assignment?
Current:
my $sth = $dbh->prepare($statement, $attr) or return undef;
Suggested:
my $sth = (ref $stmt) ? $stmt : $dbh->prepare($stmt, $attr) or return;
The suggested solution makes it possible to work with cached statements and
would therefore, in my opinion, improve performance.
You will have to ask Tim Bunce or maybe Alligator Descartes for that
change but I do not see any use in having it.
A statement handle without 'SQL' ( a statement) would be meaningless,
something like a sentence with only punctuation.
cheers
John Scoles
With best regards,
Thomas Knoerl
Siemens AG
Siemens IT Solutions and Services
SIS IT SM CP
Wuerzburger Str. 121
90766 Fuerth, Germany
Tel.: +49 (911) 978-3034
Fax: +49 (911) 978-2037
Mobile: +49 (1522) 2795353
mailto:thomas.kno...@siemens.com
Siemens Aktiengesellschaft: Chairman of the Supervisory Board: Gerhard Cromme;
Managing Board: Peter Loescher, Chairman, President and Chief Executive
Officer; Wolfgang Dehen, Heinrich Hiesinger, Joe Kaeser, Barbara Kux, Hermann
Requardt, Siegfried Russwurm, Peter Y. Solmssen; Registered offices: Berlin and
Munich, Germany; Commercial registries: Berlin Charlottenburg, HRB 12300,
Munich, HRB 6684; WEEE-Reg.-No. DE 23691322