/*
 * 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;
}