This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Counting the Rows Returned by a Query | ||
---|---|---|
Code | Expected | Actual |
require 'cookbook_dbconnect' with_db do |c| c.do %{drop table if exists letters} c.do %{create table letters(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, letter CHAR(1) NOT NULL)} letter_sql = ('a'..'z').collect.join('"),("') c.do %{insert into letters(letter) values ("#{letter_sql}")} end |
26 | 26 |
vowel_query = %{select id from letters where letter in ("a","e","i","o","u")} with_db do |c| h = c.execute vowel_query "My collection contains #{h.rows} vowels." end |
"My collection contains 5 vowels." | "My collection contains 5 vowels." |
with_db do |c| vowels = c.select_all(vowel_query) "My collection still contains #{vowels.size} vowels." end |
"My collection still contains 5 vowels." | "My collection still contains 5 vowels." |
with_db do |c| rows = 0 c.execute(vowel_query).each do |row| rows += 1 # Process the row... end "Yup, all #{rows} vowels are still there." end |
"Yup, all 5 vowels are still there." | "Yup, all 5 vowels are still there." |
module DBI class DatabaseHandle def execute_with_count(query, *args) re = /^\s*select .* from/i count_query = query.sub(re, 'select count(*) from') count = select_one(count_query) [count, execute(query)] end end end with_db do |c| count, handle = c.execute_with_count(vowel_query) puts "I can't believe none of the #{count} vowels " + "have been stolen from my collection!" puts 'Here they are in the database:' handle.each do |r| puts "Row #{r['id']}" end end |
I can't believe none of the 5 vowels have been stolen from my collection! Here they are in the database: Row 1 Row 5 Row 9 Row 15 Row 21 |
I can't believe none of the 5 vowels have been stolen from my collection! Here they are in the database: Row 1 Row 5 Row 9 Row 15 Row 21 |