/*static*/ short NAType::convertTypeToText(char * text, // OUTPUT Lng32 fs_datatype, // all other vars: INPUT Lng32 length, Lng32 precision, Lng32 scale, rec_datetime_field datetimestart, rec_datetime_field datetimeend, short datetimefractprec, short intervalleadingprec, short upshift, short caseinsensitive, CharInfo::CharSet charSet, CharInfo::Collation collation, const char * displaydatatype, short displayCaseSpecific) { return convertTypeToText_basic(text, fs_datatype, length, precision, scale, datetimestart, datetimeend, datetimefractprec, intervalleadingprec, upshift, caseinsensitive, charSet, CharInfo::getCollationName(collation), displaydatatype, displayCaseSpecific); }
//Detailed error support for conversions, especially for use in convdoit. ComDiagsArea *ExRaiseDetailSqlError(CollHeap* heap, ComDiagsArea** diagsArea, ExeErrorCode err, char *src, Int32 srcLength, Int16 srcType, Int32 srcScale, Int16 tgtType, UInt32 flags, Int32 tgtLength, Int32 tgtScale, Int32 tgtPrecision, Int32 srcPrecision) { //if looping situation, no need to proceed further, return back. if(flags & CONV_CONTROL_LOOPING) return NULL; NABoolean intermediate; if( flags & CONV_INTERMEDIATE_CONVERSION ) intermediate = TRUE; else intermediate = FALSE; if (diagsArea == NULL) return NULL; if (*diagsArea == NULL){ if (heap == NULL) return NULL; *diagsArea = ComDiagsArea::allocate(heap); } //Allocate buf once, for formatting and opstring[1]. // |--------formatting--------|--opstring[1]------| char *buf = new (heap) char[FORMATTING+ OPVALUE_LEN] ; if( !buf ){ ExRaiseSqlError(heap, diagsArea, err); return *diagsArea; } char *opString = &buf[FORMATTING]; ExConvertErrorToString(heap, diagsArea, src, srcLength, srcType, srcScale, opString, OPVALUE_LEN); char srcDatatypeDetail[200]; char tgtDatatypeDetail[200]; char srcTypeAsText[1000]; char tgtTypeAsText[100]; srcTypeAsText[0] = 0; tgtTypeAsText[0] = 0; if (srcPrecision != -1) { rec_datetime_field startField; rec_datetime_field endField; ExpDatetime::getDatetimeFields(srcPrecision, startField, endField); convertTypeToText_basic(srcTypeAsText, srcType, srcLength, srcPrecision, srcScale, startField, endField, 0, 0, 0, 0, (CharInfo::CharSet)srcScale, NULL, NULL, 0); strcpy(srcDatatypeDetail, getDatatypeAsString(srcType, false)); } else if ((DFS2REC::isCharacterString(srcType)) && (srcLength >= 0) && (srcScale > 0) && (srcPrecision == -1)) str_sprintf(srcDatatypeDetail, "%s,%d BYTES,%s", getDatatypeAsString(srcType, false), srcLength, (srcScale == CharInfo::ISO88591 ? "ISO88591" : "UTF8")); else strcpy(srcDatatypeDetail, getDatatypeAsString(srcType, false)); if (tgtLength != -1) { rec_datetime_field startField; rec_datetime_field endField; ExpDatetime::getDatetimeFields(tgtPrecision, startField, endField); convertTypeToText_basic(tgtTypeAsText, tgtType, tgtLength, tgtPrecision, tgtScale, startField, endField, 0, 0, 0, 0, (CharInfo::CharSet)tgtScale, NULL, NULL, 0); strcpy(tgtDatatypeDetail, getDatatypeAsString(tgtType, false)); } else if ((DFS2REC::isCharacterString(tgtType)) && (tgtLength >= 0) && (tgtScale > 0)) str_sprintf(tgtDatatypeDetail, "%s,%d %s,%s", getDatatypeAsString(tgtType, false), tgtPrecision ? tgtPrecision : tgtLength, tgtPrecision ? "CHARS" : "BYTES", (tgtScale == CharInfo::ISO88591 ? "ISO88591" : "UTF8")); else strcpy(tgtDatatypeDetail, getDatatypeAsString(tgtType, false)); str_sprintf(buf, " %s of Source Type:%s(%s) Source Value:%s to Target Type:%s(%s).", intermediate? "Intermediate conversion" : "Conversion", (strlen(srcTypeAsText) == 0 ? getDatatypeAsString(srcType,true) : srcTypeAsText), srcDatatypeDetail, opString, (strlen(tgtTypeAsText) == 0 ? getDatatypeAsString(tgtType,true) : tgtTypeAsText), tgtDatatypeDetail); **diagsArea << DgSqlCode(-err); **diagsArea<<DgString0(buf); NADELETEBASICARRAY(buf, (heap)); return *diagsArea; }