Asking for style critics: Collecting the result of a query

R

Ronald Fischer

May I ask some kind soul to criticize the following piece of code?
I don't have that much experience with Ruby yet, but I feel I could
do it simpler than that.

Problem: Fetch result of a query (it happens to be a SQL query to a
database, but the essential point here is that I need to generate
the resulting lines piecewise, each iteration returning the next=20
row as an array of values). The result should be returned as a=20
matrix (i.e. array of arrays). In practice, the number of rows returned
will be well below 1000, each row containing around 10 items.

Here is my code:

def fetch_result(querystring)
result=3D[]
qres =3D dbhandle.query(qstr)
while row =3D fetch_result.fetch_row # deliver next row
result.push row # add row to the result array - is this OK?
end
result # return result array
end

I suspect there might be an overhead in appending to an array
new rows piecewise as I'm doing it here. Is there a better way
to do it?=20

Ronald
--=20
Ronald Fischer <[email protected]>
Phone: +49-89-452133-162
 
R

Robert Klemme

May I ask some kind soul to criticize the following piece of code?
I don't have that much experience with Ruby yet, but I feel I could
do it simpler than that.

Problem: Fetch result of a query (it happens to be a SQL query to a
database, but the essential point here is that I need to generate
the resulting lines piecewise, each iteration returning the next
row as an array of values). The result should be returned as a
matrix (i.e. array of arrays). In practice, the number of rows returned
will be well below 1000, each row containing around 10 items.

Here is my code:

def fetch_result(querystring)
result=[]
qres = dbhandle.query(qstr)
while row = fetch_result.fetch_row # deliver next row
result.push row # add row to the result array - is this OK?
end
result # return result array
end

I suspect there might be an overhead in appending to an array
new rows piecewise as I'm doing it here. Is there a better way
to do it?

Ronald

Your sample seems to be missing something: Where does "fetch_result"
come into existence? And why don't you use "qres"?

Attempting to answer your question, if you just append rows without
modification you might as well do fetch_result.to_a.

Kind regards

robert
 
R

Ronald Fischer

def fetch_result(querystring)
result=3D[]
qres =3D dbhandle.query(qstr)
while row =3D fetch_result.fetch_row # deliver next row
result.push row # add row to the result array - is this OK?
end
result # return result array
end
Your sample seems to be missing something: Where does "fetch_result"=20
come into existence? And why don't you use "qres"?

Sorry, my fault when condensing the original code to a form better
useful for discussing this issue (and during which I also renamed
variables to make understanding easier in this context). The
line should say:

while row =3D qres.fetch_row ....
=20
Attempting to answer your question, if you just append rows without=20
modification you might as well do fetch_result.to_a.

Given my corrections, I guess you would propose

result =3D qres.to_a

Right? But this would give:

warning: default `to_a' will be obsolete

and not return the result. The reason is that qres is, in my case, the
result object for a MySql query, so I think to_a is not applicable here.

Ronald
--=20
Ronald Fischer <[email protected]>
Phone: +49-89-452133-162
=20
 
R

Robert Klemme

def fetch_result(querystring)
result=[]
qres = dbhandle.query(qstr)
while row = fetch_result.fetch_row # deliver next row
result.push row # add row to the result array - is this OK?
end
result # return result array
end
Your sample seems to be missing something: Where does "fetch_result"
come into existence? And why don't you use "qres"?

Sorry, my fault when condensing the original code to a form better
useful for discussing this issue (and during which I also renamed
variables to make understanding easier in this context). The
line should say:

while row = qres.fetch_row ....
Attempting to answer your question, if you just append rows without
modification you might as well do fetch_result.to_a.

Given my corrections, I guess you would propose

result = qres.to_a

Right? But this would give:

warning: default `to_a' will be obsolete

and not return the result. The reason is that qres is, in my case, the
result object for a MySql query, so I think to_a is not applicable here.

Hm, it does not implement to_a properly? I guess then it does not
extend Enumerable as well. You can do this:

qres.extend(Enumerable).to_a

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top