DBI: number of rows updated?

A

Aldric Giacomoni

Is there a way with the DBI gem to figure out how many rows were
touched? I have the following ugly and naive code which, of course,
doesn't give me the number of rows updated (but works like a charm
otherwise):

def run_query query
begin
dbh = DBI.connect( 'DBI:ODBC:pACS' )
statement_handle = dbh.prepare query
statement_handle.execute
rows = statement_handle.rows
statement_handle.finish
dbh.commit
rescue DBI::DatabaseError => e
puts "An error occurred"
puts "Error code: #{e.err}"
puts "Error message: #{e.errstr}"
dbh.rollback
ensure
# disconnect from server
dbh.disconnect if dbh
end
return rows rescue 0
end

def fix_ultrasounds
rows_updated = 0
[UPDATE_QUERY1, UPDATE_QUERY2].each do |q|
rows_updated += run_query q
end
puts "#{rows_updated} rows updated."
end
 
Y

yermej

Is there a way with the DBI gem to figure out how many rows were
touched?
    rows = statement_handle.rows

With Ruby 1.8.4 and DBI 0.1.0 this line works as expected for me. Have
you checked the value of rows right after it's assigned? Maybe there's
something else going on.

Jeremy
 
B

Brian Candler

Aldric said:
statement_handle.execute

Have you checked the return value from this lin?
return rows rescue 0

The 'rescue 0' is superfluous here, it can never be triggered.

Maybe you want:

return rows || 0

(i.e. if rows is nil, return 0). Note that even if the statement which
assigns to rows has never been executed, it will contain nil.

e.g.

if false
foo = 123
end
puts foo.inspect # shows nil
 
A

Aldric Giacomoni

yermej said:
With Ruby 1.8.4 and DBI 0.1.0 this line works as expected for me. Have
you checked the value of rows right after it's assigned? Maybe there's
something else going on.

Jeremy

It all looks fine, and works fine when separated from the rest of the
code; so it must be broken somewhere else. Thanks for helping me check
this bit, both of you :)
 

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,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top