/*! * \brief Get a reference to a message in the log. * * The caller (SQLInstallerError) could call logPeekMsg directly * but we would have to extern hODBCINSTLog and I have not given * any thought to that at this time. * * \param nMsg * \param phMsg * * \return int */ int inst_logPeekMsg( long nMsg, HLOGMSG *phMsg ) { int ret = LOG_NO_DATA; mutex_entry(); if ( hODBCINSTLog ) ret = logPeekMsg( hODBCINSTLog, nMsg, phMsg ); mutex_exit(); return ret; }
SQLRETURN SQLGetDiagRec_( SQLSMALLINT nHandleType, SQLHANDLE hHandle, SQLSMALLINT nRecordNumber, SQLCHAR * pszState, SQLINTEGER * pnNativeError, SQLCHAR * pszMessageText, SQLSMALLINT nBufferLength, SQLSMALLINT * pnStringLength ) { HLOG hLog = NULL; HLOGMSG hMsg = NULL; /* sanity checks */ if ( !hHandle ) return SQL_INVALID_HANDLE; /* clear return values */ if ( pszState ) strcpy((char*) pszState, "-----" ); if ( pnNativeError ) *pnNativeError = 0; if ( pszMessageText ) memset( pszMessageText, 0, nBufferLength ); if ( pnStringLength ) *pnStringLength = 0; /* get hLog */ switch ( nHandleType ) { case SQL_HANDLE_ENV: hLog = ((HDRVENV)hHandle)->hLog; break; case SQL_HANDLE_DBC: hLog = ((HDRVDBC)hHandle)->hLog; break; case SQL_HANDLE_STMT: hLog = ((HDRVSTMT)hHandle)->hLog; break; case SQL_HANDLE_DESC: default: return SQL_ERROR; } /* get message */ if ( logPeekMsg( hLog, 1, &hMsg ) != LOG_SUCCESS ) return SQL_NO_DATA; if ( pnNativeError ) *pnNativeError = hMsg->nCode; if ( pszMessageText ) strncpy( (char*)pszMessageText, hMsg->pszMessage, nBufferLength-1 ); if ( pnStringLength ) *pnStringLength = strlen( (char*)hMsg->pszMessage ); return SQL_SUCCESS; }