Database interfaces in Ruby are a little off, if you ask me; they’re as usable as PHP’s, for sure (which are really just raw API for whatever database you use, unless you use ADODB), but I expect more out of Ruby’s.

First off, I expect libraries to use basic data structures whenever possible. People are used to them. If there’s no reason to have your own class of stuff, don’t.

From DBI, I would expect queries to return a hash, with fields either being a string as a key, and value as the natural basic Ruby type for whatever type the field is: text, varchar and char fields should be Strings. int I would expect to be a Fixnum.

I expect all the fields in the query to be in the hash, even if the fields are null — given fields foo and bar, with bar being null in this row, I would expect the hash to contain { :foo => "foodata", :bar => nil }.

Using hashes, it’s possible to create tuples for update with a little addition to the Hash class, like so:

class Hash def import(other) each_key do |k| self[k] = other[k] if other[k] end end end

That would update the hash with just new values; if HTTP POST parameters are also handled as a hash, that makes merging data from the web into the database as painless as db.store data.import request.query.