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