Exemple #1
0
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() );
}
Exemple #3
0
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;
}