static STATUS gcd_api_status( char *func_name, IIAPI_GENPARM *genParm, GCD_CCB *ccb, GCD_RCB **rcb_ptr ) { IIAPI_STATUS api_status = genParm->gp_status; bool api_error = API_ERROR( genParm->gp_status ); bool dbms_error = FALSE; STATUS status = OK; if ( (api_error && GCD_global.gcd_trace_level >= 1) || GCD_global.gcd_trace_level >= 2 ) TRdisplay( "%4d GCD %s status: %s\n", ccb->id, func_name, gcu_lookup( apiMap, genParm->gp_status ) ); if ( genParm->gp_errorHandle ) { IIAPI_GETEINFOPARM get; get.ge_errorHandle = genParm->gp_errorHandle; IIapi_getErrorInfo( &get ); while( get.ge_status == IIAPI_ST_SUCCESS ) { u_i2 msg_len = get.ge_message ? (u_i2)STlength(get.ge_message) : 0; switch( get.ge_type ) { case IIAPI_GE_ERROR : switch( get.ge_errorCode ) { case E_AP0001_CONNECTION_ABORTED : ccb->cib->flags |= GCD_CONN_ABORT; break; case E_AP0002_TRANSACTION_ABORTED : ccb->cib->flags |= GCD_XACT_ABORT; break; case E_AP0003_ACTIVE_TRANSACTIONS : case E_AP0004_ACTIVE_QUERIES : case E_AP0006_INVALID_SEQUENCE : ccb->cib->flags |= GCD_LOGIC_ERR; break; } if ( ! dbms_error ) { status = get.ge_errorCode; dbms_error = TRUE; } if ( GCD_global.gcd_trace_level >= 2 ) TRdisplay( "%4d GCD Error 0x%x '%s'\n", ccb->id, get.ge_errorCode, get.ge_SQLSTATE ); if ( GCD_global.gcd_trace_level >= 3 && get.ge_message ) TRdisplay( "%4d GCD %s\n", ccb->id, get.ge_message ); if ( rcb_ptr ) gcd_send_error( ccb, rcb_ptr, MSG_ET_ERR, get.ge_errorCode, get.ge_SQLSTATE, msg_len, get.ge_message ); break; case IIAPI_GE_XAERR : if ( GCD_global.gcd_trace_level >= 2 ) TRdisplay( "%4d GCD XA Error %d\n", ccb->id, get.ge_errorCode ); if ( ! dbms_error ) { status = FAIL; dbms_error = TRUE; } if ( rcb_ptr ) gcd_send_error( ccb, rcb_ptr, MSG_ET_XA, get.ge_errorCode, get.ge_SQLSTATE, msg_len, get.ge_message ); break; case IIAPI_GE_WARNING : if ( GCD_global.gcd_trace_level >= 2 ) TRdisplay( "%4d GCD Warning 0x%x '%s'\n", ccb->id, get.ge_errorCode, get.ge_SQLSTATE ); if ( GCD_global.gcd_trace_level >= 3 && get.ge_message ) TRdisplay( "%4d GCD %s\n", ccb->id, get.ge_message ); if ( rcb_ptr ) gcd_send_error( ccb, rcb_ptr, MSG_ET_WRN, get.ge_errorCode, get.ge_SQLSTATE, msg_len, get.ge_message ); break; default : if ( GCD_global.gcd_trace_level >= 2 ) TRdisplay( "%4d GCD User Message 0x%x\n", ccb->id, get.ge_errorCode ); if ( GCD_global.gcd_trace_level >= 3 && get.ge_message ) TRdisplay( "%4d GCD %s\n", ccb->id, get.ge_message ); if ( rcb_ptr ) gcd_send_error( ccb, rcb_ptr, MSG_ET_MSG, get.ge_errorCode, get.ge_SQLSTATE, msg_len, get.ge_message ); break; } IIapi_getErrorInfo( &get ); } } if ( dbms_error && ! status ) status = E_GC4809_INTERNAL_ERROR; else if ( api_error && ! dbms_error ) { status = (api_status == IIAPI_ST_OUT_OF_MEMORY) ? E_GC4808_NO_MEMORY : E_GC4809_INTERNAL_ERROR; if ( rcb_ptr ) gcd_sess_error( ccb, rcb_ptr, status ); } return( status ); }
void OGRIngresStatement::ReportError( IIAPI_GENPARM *genParm, const char *pszDescription ) { IIAPI_GETEINFOPARM getErrParm; /* ** Check API call status. */ const char *pszCode = (genParm->gp_status == IIAPI_ST_SUCCESS) ? "IIAPI_ST_SUCCESS" : (genParm->gp_status == IIAPI_ST_MESSAGE) ? "IIAPI_ST_MESSAGE" : (genParm->gp_status == IIAPI_ST_WARNING) ? "IIAPI_ST_WARNING" : (genParm->gp_status == IIAPI_ST_NO_DATA) ? "IIAPI_ST_NO_DATA" : (genParm->gp_status == IIAPI_ST_ERROR) ? "IIAPI_ST_ERROR" : (genParm->gp_status == IIAPI_ST_FAILURE) ? "IIAPI_ST_FAILURE" : (genParm->gp_status == IIAPI_ST_NOT_INITIALIZED) ? "IIAPI_ST_NOT_INITIALIZED" : (genParm->gp_status == IIAPI_ST_INVALID_HANDLE) ? "IIAPI_ST_INVALID_HANDLE" : (genParm->gp_status == IIAPI_ST_OUT_OF_MEMORY) ? "IIAPI_ST_OUT_OF_MEMORY" : "(unknown status)"; /* ** Check for error information. */ if ( ! genParm->gp_errorHandle ) { CPLDebug( "INGRES", "No gp_errorHandle in ReportError(%s)", pszDescription ); return; } getErrParm.ge_errorHandle = genParm->gp_errorHandle; CPLString osErrorMessage; CPLErr eType = CE_Failure; osErrorMessage.Printf( "%s: %s", pszDescription, pszCode ); do { /* ** Invoke API function call. */ IIapi_getErrorInfo( &getErrParm ); /* ** Break out of the loop if no data or failed. */ if ( getErrParm.ge_status != IIAPI_ST_SUCCESS ) break; /* ** Process result. */ switch( getErrParm.ge_type ) { case IIAPI_GE_ERROR : eType = CE_Failure; break; case IIAPI_GE_WARNING : eType = CE_Warning; break; case IIAPI_GE_MESSAGE : eType = CE_Debug; break; default: eType = CE_Failure; break; } CPLString osMoreMsg; osMoreMsg.Printf( "\n'%s' 0x%x\n%s", getErrParm.ge_SQLSTATE, getErrParm.ge_errorCode, getErrParm.ge_message ? getErrParm.ge_message : "NULL" ); osErrorMessage += osMoreMsg; } while( 1 ); CPLError( eType, CPLE_AppDefined, "%s", osErrorMessage.c_str() ); }
static void IIdemo_checkError( IIAPI_GENPARM *genParm ) { IIAPI_GETEINFOPARM getErrParm; char type[33]; /* ** Check API call status. */ printf( "\tgp_status = %s\n", (genParm->gp_status == IIAPI_ST_SUCCESS) ? "IIAPI_ST_SUCCESS" : (genParm->gp_status == IIAPI_ST_MESSAGE) ? "IIAPI_ST_MESSAGE" : (genParm->gp_status == IIAPI_ST_WARNING) ? "IIAPI_ST_WARNING" : (genParm->gp_status == IIAPI_ST_NO_DATA) ? "IIAPI_ST_NO_DATA" : (genParm->gp_status == IIAPI_ST_ERROR) ? "IIAPI_ST_ERROR" : (genParm->gp_status == IIAPI_ST_FAILURE) ? "IIAPI_ST_FAILURE" : (genParm->gp_status == IIAPI_ST_NOT_INITIALIZED) ? "IIAPI_ST_NOT_INITIALIZED" : (genParm->gp_status == IIAPI_ST_INVALID_HANDLE) ? "IIAPI_ST_INVALID_HANDLE" : (genParm->gp_status == IIAPI_ST_OUT_OF_MEMORY) ? "IIAPI_ST_OUT_OF_MEMORY" : "(unknown status)" ); /* ** Check for error information. */ if ( ! genParm->gp_errorHandle ) return; getErrParm.ge_errorHandle = genParm->gp_errorHandle; do { /* ** Invoke API function call. */ IIapi_getErrorInfo( &getErrParm ); /* ** Break out of the loop if no data or failed. */ if ( getErrParm.ge_status != IIAPI_ST_SUCCESS ) break; /* ** Process result. */ switch( getErrParm.ge_type ) { case IIAPI_GE_ERROR : strcpy( type, "ERROR" ); break; case IIAPI_GE_WARNING : strcpy( type, "WARNING" ); break; case IIAPI_GE_MESSAGE : strcpy(type, "USER MESSAGE"); break; default: sprintf( type, "unknown error type: %d", getErrParm.ge_type); break; } printf( "\tError Info: %s '%s' 0x%x: %s\n", type, getErrParm.ge_SQLSTATE, getErrParm.ge_errorCode, getErrParm.ge_message ? getErrParm.ge_message : "NULL" ); } while( 1 ); return; }