DBI: number of rows updated?

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

Aldric G. wrote:

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

On Dec 24, 7:35 am, Aldric G. [email protected] wrote:

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

yermej wrote:

On Dec 24, 7:35�am, Aldric G. [email protected] wrote:

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

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 :slight_smile: