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