/* * call-seq: * res[ n ] -> Hash * * Returns tuple _n_ as a hash. */ static VALUE pgresult_aref(VALUE self, VALUE index) { PGresult *result = get_pgresult(self); int tuple_num = NUM2INT(index); int field_num; VALUE fname,val; VALUE tuple; if(tuple_num >= PQntuples(result)) rb_raise(rb_eIndexError, "Index %d is out of range", tuple_num); tuple = rb_hash_new(); for(field_num = 0; field_num < PQnfields(result); field_num++) { fname = rb_tainted_str_new2(PQfname(result,field_num)); if(PQgetisnull(result, tuple_num, field_num)) { rb_hash_aset(tuple, fname, Qnil); } else { val = rb_tainted_str_new(PQgetvalue(result, tuple_num, field_num), PQgetlength(result, tuple_num, field_num)); rb_hash_aset(tuple, fname, val); } } return tuple; }