Thanks, but that's already in the next release. I hope to work on
actually making a release within the next week or so.
Tim.
On Wed, Mar 21, 2001 at 09:34:15PM -0500, Mark Stosberg wrote:
>
> Hello! First, thanks to you all for your work on DBI. I use it
> frequently and find it well put together as well as useful tool.
> Attached is a simple patch to the code AND pod of 1.14 which adds the
> function 'selectall_hashref', which is just like selectall_arrayref, but
> it defaults to returning an array of hashes instead of an array of
> arrays. This is extremely useful in some cases. For example, this sort
> of construct can be passed directly into an HTML::Template object.
>
> Thanks.
>
> -mark
>
> http://mark.stosberg.com/
> --- DBI.pm.org Wed Mar 21 20:22:02 2001
> +++ DBI.pm Wed Mar 21 21:20:09 2001
> @@ -29,6 +29,7 @@
> $rv = $dbh->do($statement, \%attr, @bind_values);
>
> $ary_ref = $dbh->selectall_arrayref($statement);
> + $ary_ref = $dbh->selectall_hashref($statement);
> @row_ary = $dbh->selectrow_array($statement);
> $ary_ref = $dbh->selectcol_arrayref($statement);
>
> @@ -275,8 +276,9 @@
> prepare => { U =>[2,3,'$statement [, \%attr]'] },
> prepare_cached => { U =>[2,4,'$statement [, \%attr [, $allow_active ] ]'] },
> selectrow_array => { U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'] },
> - selectall_arrayref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'] },
> selectcol_arrayref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'] },
> + selectall_hashref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'] },
> + selectall_arrayref=>{U =>[2,0,'$statement [, \%attr [, @bind_params ] ]'] },
> handler => { U =>[2,2,'\&handler'] },
> ping => { U =>[1,1] },
> disconnect => { U =>[1,1] },
> @@ -955,6 +957,16 @@
> return $sth->fetchall_arrayref($slice);
> }
>
> + sub selectall_hashref {
> + my ($dbh, $stmt, $attr, @bind) = @_;
> + my $sth = (ref $stmt) ? $stmt
> + : $dbh->prepare($stmt, $attr);
> + return unless $sth;
> + $sth->execute(@bind) || return;
> + my $slice = $attr->{dbi_fetchall_arrayref_attr} ||= {};
> + return $sth->fetchall_arrayref($slice);
> + }
> +
> sub selectcol_arrayref {
> my ($dbh, $stmt, $attr, @bind) = @_;
> my $sth = (ref $stmt) ? $stmt
> @@ -2236,6 +2248,24 @@
> L</RaiseError> is not set, then it will return with whatever data it
> has fetched thus far.
>
> +=item C<selectall_hashref>
> +
> + $ary_ref = $dbh->selectall_hashref($statement);
> + $ary_ref = $dbh->selectall_hashref($statement, \%attr);
> + $ary_ref = $dbh->selectall_arrayref($statement, \%attr, @bind_values);
> +
> +This utility method combines L</prepare>, L</execute> and
> +L</fetchall_arrayref> into a single call. It returns a reference to an
> +array containing a reference to an hash for each row of data fetched.
> +
> +The C<$statement> parameter can be a previously prepared statement handle,
> +in which case the C<prepare> is skipped. This is recommended if the
> +statement is going to be executed many times.
> +
> +If any method except C<fetch> fails, and L</RaiseError> is not set,
> +C<selectall_arrayref> will return C<undef>. If C<fetch> fails and
> +L</RaiseError> is not set, then it will return with whatever data it
> +has fetched thus far.
>
> =item C<selectcol_arrayref>
>