From 33ba9950d4d7a83f187fdbe9edfbeee9cb3f5611 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Fri, 13 Aug 2010 16:23:09 +0200 Subject: [PATCH] selectall_hashref_query umgestellt auf die DBI funktion selectall_arrayref. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Mit einem bestimmten Parameter tut diese genau das gleiche wie die selectall_hashref, was zur Folge hat, das ein Großteil des Overheads der Datenbankkommunikation gespart oder nach XS ausgelagert wird. Grosse Requests mit sehr viel Datenbankzugriff (Schwalfenberg Fall) sind gut 25% schneller damit. Der Slice Parameter sollte mindestens auf Debian Sarge und darauf basierenden Distributionen funktionieren, davor habe ich nicht nachgeschaut. --- SL/DBUtils.pm | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/SL/DBUtils.pm b/SL/DBUtils.pm index e041e1001..e0a362f4e 100644 --- a/SL/DBUtils.pm +++ b/SL/DBUtils.pm @@ -147,12 +147,11 @@ sub selectall_hashref_query { my ($form, $dbh, $query) = splice(@_, 0, 3); - my $sth = prepare_execute_query($form, $dbh, $query, @_); - my $result = []; - while (my $ref = $sth->fetchrow_hashref()) { - push(@{ $result }, $ref); - } - $sth->finish(); + dump_query(LXDebug->QUERY(), '', $query, @_); + + # this works back 'til at least DBI 1.46 on perl 5.8.4 on Debian Sarge (2004) + my $result = $dbh->selectall_arrayref($query, { Slice => {} }, @_) + or $form->dberror($query . (@_ ? " (" . join(", ", @_) . ")" : '')); $main::lxdebug->leave_sub(2); -- 2.20.1