Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: dbi_query_iterator and my misunderstanding the $row

by japhy (Canon)
on Mar 01, 2007 at 04:02 UTC ( #602643=note: print w/ replies, xml ) Need Help??


in reply to dbi_query_iterator and my misunderstanding the $row

I think this is because fetchrow_arrayref uses the same location in memory every time, as the DBI docs state: Note that the same array reference is returned for each fetch, so don't store the reference and then use it after a later fetch. Also, the elements of the array are also reused for each row, so take care if you want to take a reference to an element.


Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart


Comment on Re: dbi_query_iterator and my misunderstanding the $row
Download Code
Re^2: dbi_query_iterator and my misunderstanding the $row
by jfroebe (Parson) on Mar 01, 2007 at 22:04 UTC
      Oh, sorry. Maybe I misunderstood. Does the code actually work, and you want to know why it works?

      $oldrow is the previous row. The function that builds the iterator stores the first row before it creates the iterator function:

      sub dbi_query_iterator { my ($sth, @params) = @_; $sth->execute(@params) or return; # get the first row of results NOW my $row = $sth->fetchrow_arrayref(); return Iterator { my $action = shift() || 'nextval'; if ($action eq 'exhausted?') { return ! defined $row; } elsif ($action eq 'nextval') { # save the current row of results my $oldrow = $row; # get the next row of results $row = $sth->fetchrow_arrayref; # return the previous row (before we advanced) return $oldrow->[0]; } } }

      Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
      How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://602643]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (5)
As of 2015-07-04 22:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls