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