/*
* call-seq:
* res.values -> Array
*
* Returns all tuples as an array of arrays.
*/
static VALUE
pgresult_values(VALUE self, VALUE index)
{
PGresult* result = (PGresult*) get_pgresult(self);
int row;
int field;
int num_rows = PQntuples(result);
int num_fields = PQnfields(result);
VALUE ary = rb_ary_new2(num_rows);
for ( row = 0; row < num_rows; row++ ) {
/* create new row */
VALUE new_row = rb_ary_new2(num_fields);
/* add to return array */
rb_ary_store( ary, row, new_row );
/* populate it */
for ( field = 0; field < num_fields; field++ ) {
if ( PQgetisnull(result, row, field) ) {
rb_ary_store( new_row, field, Qnil );
}
else {
VALUE val = rb_tainted_str_new( PQgetvalue(result, row, field),
PQgetlength(result, row, field) );
/* associate client encoding for text format only */
if ( 0 == PQfformat(result, field) ) {
ASSOCIATE_INDEX( val, self );
} else {
#ifdef M17N_SUPPORTED
rb_enc_associate( val, rb_ascii8bit_encoding() );
#endif
}
rb_ary_store( new_row, field, val );
}
}
}
return ary;
}