Second rework
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/729472c2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/729472c2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/729472c2 Branch: refs/heads/master Commit: 729472c2e647332d9084eefe5504db99e2e1f4bd Parents: 237f9e8 Author: Dave Birdsall <[email protected]> Authored: Mon Jan 23 21:16:21 2017 +0000 Committer: Dave Birdsall <[email protected]> Committed: Mon Jan 23 21:16:21 2017 +0000 ---------------------------------------------------------------------- core/sql/exp/ExpLOBaccess.cpp | 72 ++++++++------- core/sql/regress/executor/EXPECTED130 | 97 +++++++++++--------- core/sql/regress/executor/TEST130 | 6 ++ .../src/asciidoc/_chapters/executor_msgs.adoc | 15 +++ 4 files changed, 114 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/729472c2/core/sql/exp/ExpLOBaccess.cpp ---------------------------------------------------------------------- diff --git a/core/sql/exp/ExpLOBaccess.cpp b/core/sql/exp/ExpLOBaccess.cpp index 8c40bf7..3e06949 100644 --- a/core/sql/exp/ExpLOBaccess.cpp +++ b/core/sql/exp/ExpLOBaccess.cpp @@ -199,7 +199,7 @@ Ex_Lob_Error ExLob::fetchCursor(char *handleIn, Int32 handleLenIn, Int64 &outOff lobCursors_it it = lobCursors_.find(string(handleIn, handleLenIn)); char logBuf[4096]; lobDebugInfo("In ExLob::fetchCursor",0,__LINE__,lobTrace_); - char *blackBox = new(getLobGlobalHeap()) char[MAX_LOB_FILE_NAME_LEN+6]; // TODO: do we ever go this way for Hive? + char *blackBox = new(getLobGlobalHeap()) char[MAX_LOB_FILE_NAME_LEN+6]; Int32 blackBoxLen = 0; if (it == lobCursors_.end()) @@ -2338,7 +2338,6 @@ Ex_Lob_Error ExLobsOper ( { Ex_Lob_Error err = LOB_OPER_OK; ExLob *lobPtr = NULL; - string fn; struct timespec startTime; struct timespec endTime; Int64 secs, nsecs, totalnsecs; @@ -2491,26 +2490,31 @@ Ex_Lob_Error ExLobsOper ( err = lobPtr->openCursor(handleIn, handleInLen,transId); break; - case Lob_OpenDataCursorSimple: - if (openType == 1) { // preopen - char temp1[30]; // big enough for :%Lx: - sprintf(temp1, ":%Lx:",(long long unsigned int)lobName); - fn = lobPtr->getDataFileName(); - fn += temp1; - fn += cursorId; - preOpenObj = new (lobGlobals->getHeap()) ExLobPreOpen(lobPtr, fn.c_str(), descNumIn, sourceLen, - cursorBytes, waited, lobGlobals->getHeap()); - lobGlobals->addToPreOpenList(preOpenObj); - } else if (openType == 2) { // must open - char temp2[30]; // big enough for :%Lx: - sprintf(temp2, ":%Lx:",(long long unsigned int)lobName); - fn = lobPtr->getDataFileName(); - fn += temp2; - fn += cursorId; - fileName = fn.c_str(); - err = lobPtr->openDataCursor(fileName, Lob_Cursor_Simple, descNumIn, sourceLen, cursorBytes, waited, lobGlobals, (Int32 *)blackBox); - } else - err = LOB_SUBOPER_ERROR; + case Lob_OpenDataCursorSimple: + { + size_t dataFileNameLen = strlen(lobPtr->getDataFileName()); + size_t cursorIdLen = strlen(cursorId); + if (openType == 1) { // preopen + char temp1[30]; // big enough for :%Lx: + sprintf(temp1, ":%Lx:",(long long unsigned int)lobName); + char fn[dataFileNameLen + sizeof(temp1) + cursorIdLen + 1]; + strcpy(fn,lobPtr->getDataFileName()); + strcpy(fn + dataFileNameLen, temp1); + strcpy(fn + dataFileNameLen + strlen(temp1), cursorId); + preOpenObj = new (lobGlobals->getHeap()) ExLobPreOpen(lobPtr, fn, descNumIn, sourceLen, + cursorBytes, waited, lobGlobals->getHeap()); + lobGlobals->addToPreOpenList(preOpenObj); + } else if (openType == 2) { // must open + char temp2[30]; // big enough for :%Lx: + sprintf(temp2, ":%Lx:",(long long unsigned int)lobName); + char fn[dataFileNameLen + sizeof(temp2) + cursorIdLen + 1]; + strcpy(fn,lobPtr->getDataFileName()); + strcpy(fn + dataFileNameLen, temp2); + strcpy(fn + dataFileNameLen + strlen(temp2), cursorId); + err = lobPtr->openDataCursor(fn, Lob_Cursor_Simple, descNumIn, sourceLen, cursorBytes, waited, lobGlobals, (Int32 *)blackBox); + } else + err = LOB_SUBOPER_ERROR; + } break; case Lob_ReadCursor: @@ -2526,11 +2530,13 @@ Ex_Lob_Error ExLobsOper ( { char temp3[30]; // big enough for :%Lx: sprintf(temp3, ":%Lx:",(long long unsigned int)lobName); - fn = lobPtr->getDataFileName(); - fn += temp3; - fn += cursorId; - fileName = fn.c_str(); - err = lobPtr->readDataCursorSimple(fileName, source, sourceLen, retOperLen, lobGlobals); + size_t dataFileNameLen = strlen(lobPtr->getDataFileName()); + size_t cursorIdLen = strlen(cursorId); + char fn[dataFileNameLen + sizeof(temp3) + cursorIdLen + 1]; + strcpy(fn,lobPtr->getDataFileName()); + strcpy(fn + dataFileNameLen, temp3); + strcpy(fn + dataFileNameLen + strlen(temp3), cursorId); + err = lobPtr->readDataCursorSimple(fn, source, sourceLen, retOperLen, lobGlobals); } break; @@ -2553,11 +2559,13 @@ Ex_Lob_Error ExLobsOper ( { char temp4[30]; // big enough for :%Lx: sprintf(temp4, ":%Lx:",(long long unsigned int)lobName); - fn = lobPtr->getDataFileName(); - fn += temp4; - fn += cursorId; - fileName = fn.c_str(); - err = lobPtr->closeDataCursorSimple(fileName, lobGlobals); + size_t dataFileNameLen = strlen(lobPtr->getDataFileName()); + size_t cursorIdLen = strlen(cursorId); + char fn[dataFileNameLen + sizeof(temp4) + cursorIdLen + 1]; + strcpy(fn,lobPtr->getDataFileName()); + strcpy(fn + dataFileNameLen, temp4); + strcpy(fn + dataFileNameLen + strlen(temp4), cursorId); + err = lobPtr->closeDataCursorSimple(fn, lobGlobals); } break;
