void NAWriteConsole(const NAWchar *str, ostream& outStream, NABoolean newline, NABoolean comment, CharInfo::CharSet terminal_cs) { if (!str) return; char mbstr[DEST_BUF_SIZE + 16]; #pragma nowarn(1506) // warning elimination UnicodeStringToLocale(terminal_cs, str, NAWstrlen(str), mbstr, DEST_BUF_SIZE+16); #pragma warn(1506) // warning elimination NAWriteConsole(mbstr, outStream, newline, comment); }
// Changes to this function should be emulated in HandleCLIError (SqlCmd.C) void NADumpDiags(ostream& outStream, ComDiagsArea* diags, NABoolean newline, Int32 commentIf, FILE* fp, short verbose, CharInfo::CharSet terminal_cs) { if (!diags) return; Int32 numDiags = diags->getNumber(); if (!numDiags) return; Int32 numWarns = diags->getNumber(DgSqlCode::WARNING_); if ( commentIf != NO_COMMENT ) outStream << endl; // blank line at beginning if (fp) fprintf(fp, "\n"); NABoolean sqlcodePrefixAdded = (commentIf != NO_COMMENT); for (Int32 i = 0; i++ < numDiags; ) { NABoolean cmt = sqlcodePrefixAdded && commentIf && (commentIf < 0 || (*diags)[i].getSQLCODE() >= 0); if ( verbose || (!verbose) && (*diags)[i].getSQLCODE() <= 0 ) { const NAWchar *msg = (*diags)[i].getMessageText(sqlcodePrefixAdded); // NAWchar, not TCHAR NAWriteConsole(msg, outStream, newline, cmt, terminal_cs); if (fp) // if a logfile is open, mirror messages to it { char mbstr[DEST_BUF_SIZE + 16]; #pragma nowarn(1506) // warning elimination UnicodeStringToLocale(terminal_cs, msg, NAWstrlen(msg), mbstr, DEST_BUF_SIZE); #pragma warn(1506) // warning elimination FixCarriageReturn(mbstr); fprintf(fp, "%s\n", mbstr); if (newline) fprintf(fp, "\n"); } } } outStream << flush; if (fp) fflush(fp); }
////////////////////////////////////////////// // Begin ERROR //////////////////////////////////////////////// short Error::process(SqlciEnv * sqlci_env) { NAWchar *error_msg; Int32 codeE, codeW; char stateE[10], stateW[10]; NABoolean msgNotFound; ostringstream omsg; #define GETERRORMESS(in, out, typ) GetErrorMessage(in, (NAWchar *&)out, typ) codeW = ABS(atoi(get_argument())); // >= 0, i.e. warning codeE = -codeW; // <= 0, i.e. error // These calls must be done before any of the GETERRORMESS(), // as they all use (overwrite) the same static buffer in GetErrorMessage.cpp. ComSQLSTATE(codeE, stateE); ComSQLSTATE(codeW, stateW); msgNotFound = GETERRORMESS(codeE, error_msg, ERROR_TEXT); if (type == ENVCMD_) { if (msgNotFound) { error_msg[0] = NAWchar('\n'); error_msg[1] = NAWchar('\0'); } else { // Extract the {braces-enclosed version string} // that msgfileVrsn.ksh (called by GenErrComp.bat) // has put into this ENVCMD_ message. NAWchar *v = NAWstrchr(error_msg, NAWchar(']')); if (v) error_msg = v; v = NAWstrchr(error_msg, NAWchar('{')); if (v) error_msg = v; v = NAWstrchr(error_msg, NAWchar('}')); if (v++ && *v == NAWchar('.')) *v = NAWchar(' '); } NAWriteConsole(error_msg, omsg, FALSE); } else if (!msgNotFound || codeE == 0) // SQL "success", special case { omsg << "\n*** SQLSTATE (Err): " << stateE << " SQLSTATE (Warn): " << stateW; omsg << endl; NAWriteConsole(error_msg,omsg, TRUE); } else { // Msg not found. ComDiagsArea diags; diags << DgSqlCode(codeW); NADumpDiags(omsg, &diags, TRUE/*newline*/); } #if 0 // CAUSE/EFFECT/RECOVERY text not implemented yet! if (!msgNotFound && type == DETAIL_) { GETERRORMESS(codeE, error_msg, CAUSE_TEXT); NAWriteConsole(error_msg,omsg, TRUE); GETERRORMESS(codeE, error_msg, EFFECT_TEXT); NAWriteConsole(error_msg,omsg, TRUE); GETERRORMESS(codeE, error_msg, RECOVERY_TEXT); NAWriteConsole(error_msg,omsg, TRUE); } #endif // 0 // CAUSE/EFFECT/RECOVERY text not implemented yet! omsg << ends; // to tack on a null-terminator sqlci_env->get_logfile()->WriteAllWithoutEOL(omsg.str().c_str()); return 0; }