/*
 * call-seq:
 *    res.error_field(fieldcode) -> String
 *
 * Returns the individual field of an error.
 *
 * +fieldcode+ is one of:
 * * +PG_DIAG_SEVERITY+
 * * +PG_DIAG_SQLSTATE+
 * * +PG_DIAG_MESSAGE_PRIMARY+
 * * +PG_DIAG_MESSAGE_DETAIL+
 * * +PG_DIAG_MESSAGE_HINT+
 * * +PG_DIAG_STATEMENT_POSITION+
 * * +PG_DIAG_INTERNAL_POSITION+
 * * +PG_DIAG_INTERNAL_QUERY+
 * * +PG_DIAG_CONTEXT+
 * * +PG_DIAG_SOURCE_FILE+
 * * +PG_DIAG_SOURCE_LINE+
 * * +PG_DIAG_SOURCE_FUNCTION+
 *
 * An example:
 * 
 *   begin
 *       conn.exec( "SELECT * FROM nonexistant_table" )
 *   rescue PGError => err
 *       p [
 *           result.error_field( PGresult::PG_DIAG_SEVERITY ),
 *           result.error_field( PGresult::PG_DIAG_SQLSTATE ),
 *           result.error_field( PGresult::PG_DIAG_MESSAGE_PRIMARY ),
 *           result.error_field( PGresult::PG_DIAG_MESSAGE_DETAIL ),
 *           result.error_field( PGresult::PG_DIAG_MESSAGE_HINT ),
 *           result.error_field( PGresult::PG_DIAG_STATEMENT_POSITION ),
 *           result.error_field( PGresult::PG_DIAG_INTERNAL_POSITION ),
 *           result.error_field( PGresult::PG_DIAG_INTERNAL_QUERY ),
 *           result.error_field( PGresult::PG_DIAG_CONTEXT ),
 *           result.error_field( PGresult::PG_DIAG_SOURCE_FILE ),
 *           result.error_field( PGresult::PG_DIAG_SOURCE_LINE ),
 *           result.error_field( PGresult::PG_DIAG_SOURCE_FUNCTION ),
 *       ]
 *   end
 * 
 * Outputs:
 * 
 *   ["ERROR", "42P01", "relation \"nonexistant_table\" does not exist", nil, nil, 
 *    "15", nil, nil, nil, "path/to/parse_relation.c", "857", "parserOpenTable"]
 */
static VALUE
pgresult_error_field(VALUE self, VALUE field)
{
        PGresult *result = get_pgresult( self );
        int fieldcode = NUM2INT( field );
        char * fieldstr = PQresultErrorField( result, fieldcode );
        VALUE ret = Qnil;

        if ( fieldstr ) {
                ret = rb_tainted_str_new2( fieldstr );
                ASSOCIATE_INDEX( ret, self );
        }

        return ret;
}