From a96968e401666a99f36b1729597dab23dd87b74b Mon Sep 17 00:00:00 2001 From: Sandhya Sundaresan Date: Wed, 31 Jan 2018 18:35:48 +0000 Subject: [PATCH 1/3] New syntax to retrieve the LOB HDFS filename for both external and internal LOBs . Also added syntax to return starting offset of a particular LOB handle in the LOB Hdfs data file. --- core/sql/cli/Cli.cpp | 45 ++++++++-- core/sql/comexe/ComTdbExeUtil.h | 15 +++- core/sql/executor/ExExeUtil.h | 2 + core/sql/executor/ExExeUtilLoad.cpp | 85 +++++++++++++++++-- core/sql/exp/ExpLOBaccess.cpp | 71 ++++++++++++++++ core/sql/exp/ExpLOBaccess.h | 2 + core/sql/exp/ExpLOBenums.h | 4 +- core/sql/exp/ExpLOBexternal.h | 5 +- core/sql/exp/ExpLOBinterface.cpp | 115 ++++++++++++++++++++++++++ core/sql/exp/ExpLOBinterface.h | 21 +++++ core/sql/generator/GenRelExeUtil.cpp | 12 ++- core/sql/optimizer/RelExeUtil.h | 3 +- core/sql/parser/ParKeyWords.cpp | 1 + core/sql/parser/sqlparser.y | 54 ++++++++++++ core/sql/regress/executor/EXPECTED130 | 96 ++++++++++++--------- core/sql/regress/executor/TEST130 | 17 ++++ 16 files changed, 492 insertions(+), 56 deletions(-) diff --git a/core/sql/cli/Cli.cpp b/core/sql/cli/Cli.cpp index a3ba081d21..d3892c675f 100644 --- a/core/sql/cli/Cli.cpp +++ b/core/sql/cli/Cli.cpp @@ -9160,11 +9160,45 @@ Lng32 SQLCLI_LOBcliInterface Int64 outlen = 0;Lng32 len = 0; cliRC = cliInterface->executeImmediate(query,(char *)dataLen, &len, FALSE); - if (inoutDescPartnKey) - *inoutDescPartnKey = descPartnKey; + if (inoutDescPartnKey) + *inoutDescPartnKey = descPartnKey; - if (inoutDescSyskey) - *inoutDescSyskey = inDescSyskey; + if (inoutDescSyskey) + *inoutDescSyskey = inDescSyskey; + + Lng32 saveCliErr = cliRC; + + + if (cliRC < 0) + { + cliInterface->retrieveSQLDiagnostics(myDiags); + + goto error_return; + } + + cliRC = saveCliErr; + } + break; + case LOB_CLI_SELECT_LOBOFFSET: + { + + //Retrive offset of the first chunk + str_sprintf(query, "select c.dataOffset from table(ghost table %s) h, table(ghost table %s) c where h.descPartnKey = c.descPartnKey and h.syskey = c.descSyskey and h.descPartnKey = %ld and h.syskey = %ld and c.chunkNum = 1 for read committed access", + lobDescHandleName, lobDescChunksName, + descPartnKey, inDescSyskey); + + lobDebugInfo(query,0,__LINE__,lobTrace); + // set parserflags to allow ghost table + currContext.setSqlParserFlags(0x1); + + + Lng32 len = 0; + cliRC = cliInterface->executeImmediate(query,(char *)dataOffset, &len, FALSE); + if (inoutDescPartnKey) + *inoutDescPartnKey = descPartnKey; + + if (inoutDescSyskey) + *inoutDescSyskey = inDescSyskey; @@ -9180,8 +9214,7 @@ Lng32 SQLCLI_LOBcliInterface cliRC = saveCliErr; } - break; - + break; } // switch // normal return. Fall down to deallocate of structures. diff --git a/core/sql/comexe/ComTdbExeUtil.h b/core/sql/comexe/ComTdbExeUtil.h index fd62fa5962..fba4d7b855 100644 --- a/core/sql/comexe/ComTdbExeUtil.h +++ b/core/sql/comexe/ComTdbExeUtil.h @@ -2798,7 +2798,8 @@ class ComTdbExeUtilLobExtract : public ComTdbExeUtil enum ExtractToType { TO_FILE_, TO_STRING_, TO_BUFFER_, TO_EXTERNAL_FROM_STRING_, - TO_EXTERNAL_FROM_FILE_, RETRIEVE_LENGTH_,NOOP_ + TO_EXTERNAL_FROM_FILE_, RETRIEVE_LENGTH_, RETRIEVE_HDFSFILENAME_, + RETRIEVE_OFFSET_,NOOP_ }; @@ -2879,7 +2880,13 @@ class ComTdbExeUtilLobExtract : public ComTdbExeUtil void setRetrieveLength(NABoolean v) {(v ? flags_ |= RETRIEVE_LENGTH : flags_ &= ~RETRIEVE_LENGTH); }; NABoolean retrieveLength() { return (flags_ & RETRIEVE_LENGTH) != 0; }; - + + void setRetrieveHdfsFileName(NABoolean v) + {(v ? flags_ |= RETRIEVE_HDFSFILENAME : flags_ &= ~RETRIEVE_HDFSFILENAME); }; + NABoolean retrieveHdfsFileName() { return (flags_ & RETRIEVE_HDFSFILENAME) != 0; }; + void setRetrieveOffset(NABoolean v) + {(v ? flags_ |= RETRIEVE_OFFSET : flags_ &= ~RETRIEVE_OFFSET); }; + NABoolean retrieveOffset() { return (flags_ & RETRIEVE_OFFSET) != 0; }; void setErrorIfNotExists(NABoolean v) {(v ? flags_ |= ERROR_IF_NOT_EXISTS : flags_ &= ~ERROR_IF_NOT_EXISTS); }; NABoolean errorIfNotExists() { return (flags_ & ERROR_IF_NOT_EXISTS) != 0; }; @@ -2913,7 +2920,9 @@ class ComTdbExeUtilLobExtract : public ComTdbExeUtil ERROR_IF_NOT_EXISTS =0x0010, ERROR_IF_EXISTS =0x0020, TRUNCATE_EXISTING = 0x0040, - APPEND_OR_CREATE = 0x0080 + APPEND_OR_CREATE = 0x0080, + RETRIEVE_HDFSFILENAME= 0x0100, + RETRIEVE_OFFSET=0x0200 }; diff --git a/core/sql/executor/ExExeUtil.h b/core/sql/executor/ExExeUtil.h index d26f66068e..403f2f8afa 100644 --- a/core/sql/executor/ExExeUtil.h +++ b/core/sql/executor/ExExeUtil.h @@ -2943,6 +2943,8 @@ class ExExeUtilLobExtractTcb : public ExExeUtilTcb GET_NO_CHILD_HANDLE_, GET_LOB_HANDLE_, RETRIEVE_LOB_LENGTH_, + EXTRACT_HDFSFILENAME_, + RETRIEVE_OFFSET_, EXTRACT_LOB_DATA_, RETURN_STATUS_, SEND_REQ_TO_CHILD_, diff --git a/core/sql/executor/ExExeUtilLoad.cpp b/core/sql/executor/ExExeUtilLoad.cpp index 5d253cdf2a..f311c648c8 100644 --- a/core/sql/executor/ExExeUtilLoad.cpp +++ b/core/sql/executor/ExExeUtilLoad.cpp @@ -3081,10 +3081,13 @@ short ExExeUtilLobExtractTcb::work() NADELETEBASIC(lobColNameList[0],getHeap()); NADELETEBASIC(lobNumList,getHeap()); NADELETEBASIC(lobTypList,getHeap()); - if (lobTdb().getToType() == ComTdbExeUtilLobExtract::TO_BUFFER_) + if (lobTdb().getToType() == ComTdbExeUtilLobExtract::RETRIEVE_HDFSFILENAME_) + step_ = EXTRACT_HDFSFILENAME_; + else if (lobTdb().getToType() == ComTdbExeUtilLobExtract::RETRIEVE_OFFSET_) + step_ = RETRIEVE_OFFSET_; + else if (lobTdb().getToType() == ComTdbExeUtilLobExtract::TO_BUFFER_) step_ = EXTRACT_LOB_DATA_; - else - if ((lobTdb().getToType() == ComTdbExeUtilLobExtract::RETRIEVE_LENGTH_) || (lobTdb().getToType() == ComTdbExeUtilLobExtract::TO_FILE_)) + else if ((lobTdb().getToType() == ComTdbExeUtilLobExtract::RETRIEVE_LENGTH_) || (lobTdb().getToType() == ComTdbExeUtilLobExtract::TO_FILE_)) step_ = RETRIEVE_LOB_LENGTH_; else { @@ -3101,6 +3104,42 @@ short ExExeUtilLobExtractTcb::work() } break; } + case EXTRACT_HDFSFILENAME_: + { + Int16 flags; + Lng32 lobNum; + Int64 uid, inDescSyskey, descPartnKey; + short schNameLen; + char schName[1024]={'\0'}; + char hdfsFileName[MAX_LOB_FILE_NAME_LEN]={'\0'}; + + Int32 fileNameLen = 0; + ExpLOBoper::extractFromLOBhandle(&flags, &lobType_, &lobNum, &uid, + &inDescSyskey, &descPartnKey, + &schNameLen, (char *)schName, + (char *)lobHandle_, (Lng32)lobHandleLen_); + + + lobName_ = ExpLOBoper::ExpGetLOBname(uid, lobNum, lobNameBuf_, 1000); + //Retrieve the filename of this lob using the handle info and return to the caller + retcode = ExpLOBInterfaceGetFileName( lobGlobs, + lobName_, + lobLoc_, + lobType_, + lobTdb().getLobHdfsServer(), + lobTdb().getLobHdfsPort(), + lobHandleLen_, lobHandle_, + hdfsFileName, + fileNameLen); + + if ((lobTdb().getBufAddr() != -1) && (lobTdb().getBufAddr() != 0)) + str_cpy_all((char *)lobTdb().getBufAddr(), (char *)&lobDataLen_,sizeof(Int64)); + str_sprintf(statusString_," LOB filename : %s", hdfsFileName); + step_ = RETURN_STATUS_; + break; + + } + break; case RETRIEVE_LOB_LENGTH_ : { Int16 flags; @@ -3108,6 +3147,7 @@ short ExExeUtilLobExtractTcb::work() Int64 uid, inDescSyskey, descPartnKey; short schNameLen; char schName[1024]; + ExpLOBoper::extractFromLOBhandle(&flags, &lobType_, &lobNum, &uid, &inDescSyskey, &descPartnKey, &schNameLen, (char *)schName, @@ -3139,6 +3179,43 @@ short ExExeUtilLobExtractTcb::work() step_ = EXTRACT_LOB_DATA_; break; + } + case RETRIEVE_OFFSET_ : + { + Int16 flags; + Lng32 lobNum; + Int64 uid, inDescSyskey, descPartnKey; + short schNameLen; + char schName[1024]; + Int64 lobOffset = 0; + + ExpLOBoper::extractFromLOBhandle(&flags, &lobType_, &lobNum, &uid, + &inDescSyskey, &descPartnKey, + &schNameLen, (char *)schName, + (char *)lobHandle_, (Lng32)lobHandleLen_); + + + lobName_ = ExpLOBoper::ExpGetLOBname(uid, lobNum, lobNameBuf_, 1000); + + //Retrieve the total length of this lob using the handle info and return to the caller + + retcode = ExpLOBInterfaceGetOffset( lobGlobs, + lobName_, + lobLoc_, + lobType_, + lobTdb().getLobHdfsServer(), + lobTdb().getLobHdfsPort(), + lobHandleLen_, lobHandle_, + lobOffset); + + + if ((lobTdb().getBufAddr() != -1) && (lobTdb().getBufAddr() != 0)) + str_cpy_all((char *)lobTdb().getBufAddr(), (char *)&lobOffset,sizeof(Int64)); + str_sprintf(statusString_," LOB Offset : %ld", lobOffset); + step_ = RETURN_STATUS_; + break; + + } case EXTRACT_LOB_DATA_ : { @@ -3223,8 +3300,6 @@ short ExExeUtilLobExtractTcb::work() } break; - - case OPEN_CURSOR_: { retcode = ExpLOBInterfaceSelectCursor diff --git a/core/sql/exp/ExpLOBaccess.cpp b/core/sql/exp/ExpLOBaccess.cpp index 6b13f864c0..df6b4ea8ff 100644 --- a/core/sql/exp/ExpLOBaccess.cpp +++ b/core/sql/exp/ExpLOBaccess.cpp @@ -870,6 +870,67 @@ Ex_Lob_Error ExLob::getLength(char *handleIn, Int32 handleInLen,Int64 &outLobLen } return err; } +Ex_Lob_Error ExLob::getOffset(char *handleIn, Int32 handleInLen,Int64 &outLobOffset,LobsSubOper so, Int64 transId) +{ + char logBuf[4096]; + Int32 cliErr = 0; + Ex_Lob_Error err=LOB_OPER_OK; + char *blackBox = new(getLobGlobalHeap()) char[MAX_LOB_FILE_NAME_LEN+6]; + Int32 blackBoxLen = 0; + Int64 dummy = 0; + Int32 dummy2 = 0; + if (so != Lob_External_File) + { + + cliErr = SQL_EXEC_LOBcliInterface(handleIn, handleInLen,NULL,NULL,NULL,NULL,LOB_CLI_SELECT_LOBOFFSET,LOB_CLI_ExecImmed,&outLobOffset,0, 0, 0,0,transId,lobTrace_); + + if (cliErr < 0 ) { + str_sprintf(logBuf,"CLI SELECT_LOBOFFSET returned error %d",cliErr); + lobDebugInfo(logBuf, 0,__LINE__,lobTrace_); + + return LOB_DESC_READ_ERROR; + } + } + + return err; +} + +Ex_Lob_Error ExLob::getFileName(char *handleIn, Int32 handleInLen, char *outFileName, Int32 &outFileLen , LobsSubOper so, Int64 transId) +{ + char logBuf[4096]; + Int32 cliErr = 0; + Ex_Lob_Error err=LOB_OPER_OK; + Int64 dummy = 0; + Int32 dummy2 = 0; + if (so != Lob_External_File) + { + //Derive the filename from the LOB handle and return + str_cpy_all(outFileName, (char *)lobDataFile_.data(),lobDataFile_.length()); + } + else + { + //Get the lob external filename from the descriptor file + cliErr = SQL_EXEC_LOBcliInterface(handleIn, + handleInLen, + (char *)outFileName, &outFileLen, + NULL, 0, + LOB_CLI_SELECT_UNIQUE, LOB_CLI_ExecImmed, + &dummy, &dummy, + &dummy, &dummy, + 0, + transId,lobTrace_); + if (cliErr < 0 ) { + str_sprintf(logBuf,"CLI SELECT_FILENAME returned error %d",cliErr); + lobDebugInfo(logBuf, 0,__LINE__,lobTrace_); + + return LOB_DESC_READ_ERROR; + } + + } + return err; +} + + Ex_Lob_Error ExLob::writeDesc(Int64 &sourceLen, char *source, LobsSubOper subOper, Int64 &descNumOut, Int64 &operLen, Int64 lobMaxSize,Int64 lobMaxChunkMemSize,Int64 lobGCLimit, char * handleIn, Int32 handleInLen, char *blackBox, Int32 *blackBoxLen, char *handleOut, Int32 &handleOutLen, Int64 xnId, void *lobGlobals) { Ex_Lob_Error err=LOB_OPER_OK; @@ -2744,6 +2805,16 @@ Ex_Lob_Error ExLobsOper ( err = lobPtr->getLength(handleIn, handleInLen,retOperLen,subOperation,transId); } break; + case Lob_GetOffset: + { + err = lobPtr->getOffset(handleIn, handleInLen,retOperLen,subOperation,transId); + } + break; + case Lob_GetFileName: + { + err = lobPtr->getFileName(handleIn, handleInLen, (char *)blackBox, blackBoxLen, subOperation, transId); + } + break; case Lob_ReadDesc: // read desc only. Needed for pass thru. err = lobPtr->getDesc(desc,handleIn,handleInLen,(char *)blackBox, &blackBoxLen,handleOut,handleOutLen,transId); retOperLen = 0; diff --git a/core/sql/exp/ExpLOBaccess.h b/core/sql/exp/ExpLOBaccess.h index 9604aabae6..47f06df3f5 100644 --- a/core/sql/exp/ExpLOBaccess.h +++ b/core/sql/exp/ExpLOBaccess.h @@ -497,6 +497,8 @@ class ExLob : public NABasicObject ExLobStats *getStats() { return &stats_; } NAHeap *getLobGlobalHeap() { return lobGlobalHeap_;} Ex_Lob_Error getLength(char *handleIn, Int32 handleInLen,Int64 &outLobLen,LobsSubOper so, Int64 transId); + Ex_Lob_Error getOffset(char *handleIn, Int32 handleInLen,Int64 &outOffset,LobsSubOper so, Int64 transId); + Ex_Lob_Error getFileName(char *handleIn, Int32 handleInLen, char *outFileName, Int32 &outFileLen, LobsSubOper so, Int64 transId); // ExLobRequest *getRequest() { return &request_; } //The next 2 functions are not active at this point. They serve as an example diff --git a/core/sql/exp/ExpLOBenums.h b/core/sql/exp/ExpLOBenums.h index d04b080b86..9c14dafd24 100644 --- a/core/sql/exp/ExpLOBenums.h +++ b/core/sql/exp/ExpLOBenums.h @@ -260,7 +260,9 @@ typedef enum { Lob_PerformGC, Lob_RestoreLobDataFile, Lob_PurgeBackupLobDataFile, - Lob_GetLength + Lob_GetLength, + Lob_GetFileName, + Lob_GetOffset } LobsOper; diff --git a/core/sql/exp/ExpLOBexternal.h b/core/sql/exp/ExpLOBexternal.h index 1bfd33e824..657ef1233f 100644 --- a/core/sql/exp/ExpLOBexternal.h +++ b/core/sql/exp/ExpLOBexternal.h @@ -96,7 +96,10 @@ enum LOBcliQueryType LOB_CLI_SELECT_LOBLENGTH, // performs GC of lob file - LOB_CLI_PERFORM_LOB_GC + LOB_CLI_PERFORM_LOB_GC, + + //returns beginning offset of a lob + LOB_CLI_SELECT_LOBOFFSET }; diff --git a/core/sql/exp/ExpLOBinterface.cpp b/core/sql/exp/ExpLOBinterface.cpp index 718538e2e4..8e73864380 100644 --- a/core/sql/exp/ExpLOBinterface.cpp +++ b/core/sql/exp/ExpLOBinterface.cpp @@ -1050,6 +1050,121 @@ Lng32 ExpLOBInterfaceGetLobLength(ExLobGlobals * exLobGlob, return LOB_ACCESS_SUCCESS; } + +Lng32 ExpLOBInterfaceGetOffset(ExLobGlobals * exLobGlob, + char * lobName, + char * lobLoc, + Lng32 lobType, + char * lobHdfsServer, + Lng32 lobHdfsPort, + Int32 handleLen, + char * lobHandle, + Int64 &outLobOffset + + ) +{ + Ex_Lob_Error err; + + Int64 dummyParam = 0; + Int32 dummyParam2 = 0; + Ex_Lob_Error status; + Int64 cliError=0; + + LobsOper lo; + LobsSubOper so; + LobsStorage ls = (LobsStorage)lobType; + if (ls == Lob_External_HDFS_File) + { + so = Lob_External_File; + outLobOffset = 0; + return LOB_ACCESS_SUCCESS; + } + else + so = Lob_Buffer; + err = ExLobsOper(lobName, + lobHandle, handleLen, + lobHdfsServer, lobHdfsPort, + NULL, dummyParam2, + dummyParam, dummyParam, + outLobOffset, + dummyParam, dummyParam, + status, cliError, + lobLoc, ls, //Lob_HDFS_File, + NULL, 0, + dummyParam,NULL, + Lob_GetOffset, + so, + TRUE, + exLobGlob, + 0, + 0, 0,0,0,0,0,0,0, + 0 + ); + + if (err != LOB_OPER_OK) + { + return -err; + } + + return LOB_ACCESS_SUCCESS; +} + +Lng32 ExpLOBInterfaceGetFileName(ExLobGlobals * exLobGlob, + char * lobName, + char * lobLoc, + Lng32 lobType, + char * lobHdfsServer, + Lng32 lobHdfsPort, + Int32 handleLen, + char * lobHandle, + char * fileName, + Int32 &outFileLen + + ) +{ + Ex_Lob_Error err; + + Int64 dummyParam = 0; + Int32 dummyParam2 = 0; + Ex_Lob_Error status; + Int64 cliError=0; + Int64 hdfsFileLen = 0; + LobsOper lo; + LobsSubOper so; + LobsStorage ls = (LobsStorage)lobType; + if (ls == Lob_External_HDFS_File) + so = Lob_External_File; + else + so = Lob_Buffer; + err = ExLobsOper(lobName, + lobHandle, handleLen, + lobHdfsServer, lobHdfsPort, + NULL, dummyParam2, + dummyParam, dummyParam, + dummyParam, + dummyParam, dummyParam, + status, cliError, + lobLoc, ls, //Lob_HDFS_File, + NULL, 0, + dummyParam,NULL, + Lob_GetFileName, + so, + TRUE, + exLobGlob, + 0, + fileName, outFileLen, + 0,0,0,0,0,0, + 0 + ); + + if (err != LOB_OPER_OK) + { + return -err; + } + + + return LOB_ACCESS_SUCCESS; +} Lng32 ExpLOBinterfaceStats( ExLobGlobals * exLobGlob, ExLobStats * lobStats, diff --git a/core/sql/exp/ExpLOBinterface.h b/core/sql/exp/ExpLOBinterface.h index fa4694d1d4..c8a85917a7 100644 --- a/core/sql/exp/ExpLOBinterface.h +++ b/core/sql/exp/ExpLOBinterface.h @@ -342,7 +342,28 @@ Lng32 ExpLOBInterfaceGetLobLength(ExLobGlobals * exLobGlob, Int64 &outLobLen ); +Lng32 ExpLOBInterfaceGetFileName(ExLobGlobals * exLobGlob, + char * lobName, + char * lobLoc, + Lng32 lobType, + char * lobHdfsServer, + Lng32 lobHdfsPort, + Int32 handleLen, + char * lobHandle, + char * outFileName, + Int32 &outFileLen); +Lng32 ExpLOBInterfaceGetOffset(ExLobGlobals * exLobGlob, + char * lobName, + char * lobLoc, + Lng32 lobType, + char * lobHdfsServer, + Lng32 lobHdfsPort, + Int32 handleLen, + char * lobHandle, + Int64 &outLobOffset + + ); /* class HdfsFileInfo diff --git a/core/sql/generator/GenRelExeUtil.cpp b/core/sql/generator/GenRelExeUtil.cpp index 21275d131d..c667f99529 100644 --- a/core/sql/generator/GenRelExeUtil.cpp +++ b/core/sql/generator/GenRelExeUtil.cpp @@ -4165,11 +4165,13 @@ short ExeUtilLobExtract::codeGen(Generator * generator) handleLen, (toType_ == TO_BUFFER_ ? ComTdbExeUtilLobExtract::TO_BUFFER_ : (toType_ == RETRIEVE_LENGTH_ ? ComTdbExeUtilLobExtract::RETRIEVE_LENGTH_ : + (toType_ == RETRIEVE_HDFSFILENAME_ ? ComTdbExeUtilLobExtract::RETRIEVE_HDFSFILENAME_ : + (toType_ == RETRIEVE_OFFSET_ ? ComTdbExeUtilLobExtract::RETRIEVE_OFFSET_ : (toType_ == TO_STRING_ ? ComTdbExeUtilLobExtract::TO_STRING_ : (toType_ == TO_FILE_ ? ComTdbExeUtilLobExtract::TO_FILE_ : (toType_ == TO_EXTERNAL_FROM_STRING_ ? ComTdbExeUtilLobExtract::TO_EXTERNAL_FROM_STRING_ : (toType_ == TO_EXTERNAL_FROM_FILE_ ? ComTdbExeUtilLobExtract::TO_EXTERNAL_FROM_FILE_ : - ComTdbExeUtilLobExtract::NOOP_)))))), + ComTdbExeUtilLobExtract::NOOP_)))))))), bufAddr_, extractSizeAddr_, intParam_, @@ -4226,6 +4228,14 @@ if (handleInStringFormat_) { exe_util_tdb->setRetrieveLength(TRUE); } + if (toType_ == RETRIEVE_HDFSFILENAME_) + { + exe_util_tdb->setRetrieveHdfsFileName(TRUE); + } + if (toType_ == RETRIEVE_OFFSET_) + { + exe_util_tdb->setRetrieveOffset(TRUE); + } exe_util_tdb->setTotalBufSize(CmpCommon::getDefaultNumeric(LOB_MAX_CHUNK_MEM_SIZE)*1024*1024); generator->setCriDesc(givenDesc, Generator::DOWN); diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h index db5855ac69..73d6ed7a00 100644 --- a/core/sql/optimizer/RelExeUtil.h +++ b/core/sql/optimizer/RelExeUtil.h @@ -2089,7 +2089,8 @@ class ExeUtilLobExtract : public ExeUtilExpr enum ExtractToType { TO_FILE_, TO_STRING_, TO_BUFFER_, TO_EXTERNAL_FROM_STRING_, - TO_EXTERNAL_FROM_FILE_, RETRIEVE_LENGTH_, NOOP_ + TO_EXTERNAL_FROM_FILE_, RETRIEVE_LENGTH_, RETRIEVE_HDFSFILENAME_, + RETRIEVE_OFFSET_,NOOP_ }; enum ExtractFileActionType { diff --git a/core/sql/parser/ParKeyWords.cpp b/core/sql/parser/ParKeyWords.cpp index f604c2307c..9b07316dce 100644 --- a/core/sql/parser/ParKeyWords.cpp +++ b/core/sql/parser/ParKeyWords.cpp @@ -428,6 +428,7 @@ ParKeyWord ParKeyWords::keyWords_[] = { ParKeyWord("FEATURE_VERSION_INFO",TOK_FEATURE_VERSION_INFO, NONRESTOKEN_), ParKeyWord("FETCH", TOK_FETCH, ANS_|RESWORD_|MPWORD_), ParKeyWord("FILE", TOK_FILE, NONRESTOKEN_), + ParKeyWord("FILENAME", TOK_FILENAME, NONRESTOKEN_), ParKeyWord("FILETOLOB", TOK_FILETOLOB, NONRESTOKEN_), ParKeyWord("FILETOEXTERNAL", TOK_FILETOEXTERNAL, NONRESTOKEN_), ParKeyWord("FINAL", TOK_FINAL, NONRESTOKEN_), diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y index 2c805da5dd..0c3cddfe7f 100755 --- a/core/sql/parser/sqlparser.y +++ b/core/sql/parser/sqlparser.y @@ -750,6 +750,7 @@ static void enableMakeQuotedStringISO88591Mechanism() %token TOK_EXTERNALTOSTRING %token TOK_EMPTY_BLOB %token TOK_EMPTY_CLOB +%token TOK_FILENAME %token TOK_INSERT %token TOK_INSERT_ONLY %token TOK_INS @@ -15930,6 +15931,59 @@ exe_util_lob_extract : TOK_EXTRACT TOK_LOBLENGTH '(' TOK_LOB QUOTED_STRING ')' $$ = lle; } +/* type relx */ +exe_util_lob_extract : TOK_EXTRACT TOK_FILENAME'(' TOK_LOB QUOTED_STRING ')' TOK_LOCATION NUMERIC_LITERAL_EXACT_NO_SCALE + { + ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); + Int64 returnFilenameAddr = atoInt64($8->data()); + ExeUtilLobExtract * lle = + new (PARSERHEAP ()) ExeUtilLobExtract + (handle, + ExeUtilLobExtract::RETRIEVE_HDFSFILENAME_, + returnFilenameAddr, 0, 0, 0); + + $$ = lle; + } +/* type relx */ +exe_util_lob_extract : TOK_EXTRACT TOK_FILENAME '(' TOK_LOB QUOTED_STRING ')' + { + ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); + + ExeUtilLobExtract * lle = + new (PARSERHEAP ()) ExeUtilLobExtract + (handle, + ExeUtilLobExtract::RETRIEVE_HDFSFILENAME_, + -1, 0, 0, 0); + + $$ = lle; + } +/* type relx */ +exe_util_lob_extract : TOK_EXTRACT TOK_OFFSET'(' TOK_LOB QUOTED_STRING ')' TOK_LOCATION NUMERIC_LITERAL_EXACT_NO_SCALE + { + ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); + Int64 returnOffsetAddr = atoInt64($8->data()); + ExeUtilLobExtract * lle = + new (PARSERHEAP ()) ExeUtilLobExtract + (handle, + ExeUtilLobExtract::RETRIEVE_OFFSET_, + returnOffsetAddr, 0, 0, 0); + + $$ = lle; + } +/* type relx */ +exe_util_lob_extract : TOK_EXTRACT TOK_OFFSET '(' TOK_LOB QUOTED_STRING ')' + { + ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); + + ExeUtilLobExtract * lle = + new (PARSERHEAP ()) ExeUtilLobExtract + (handle, + ExeUtilLobExtract::RETRIEVE_OFFSET_, + -1, 0, 0, 0); + + $$ = lle; + } + | TOK_EXTRACT TOK_LOBTOSTRING '(' TOK_LOB QUOTED_STRING ',' TOK_SIZE NUMERIC_LITERAL_EXACT_NO_SCALE ')' { diff --git a/core/sql/regress/executor/EXPECTED130 b/core/sql/regress/executor/EXPECTED130 index 4ef2b5193f..5d274b60b6 100644 --- a/core/sql/regress/executor/EXPECTED130 +++ b/core/sql/regress/executor/EXPECTED130 @@ -63,9 +63,9 @@ C1 C1 C2 ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 LOBH0000000200010684167783903023229919684167783929468270818212379187803875502020"TRAFODION"."LOB130" - 2 LOBH0000000200010684167783903023229919684167783930244221218212379187811728769020"TRAFODION"."LOB130" - 3 LOBH0000000200010684167783903023229919684167783931095112818212379187819814558020"TRAFODION"."LOB130" + 1 LOBH0000000200010599162824891000214319599162824908088805718212384027254904057020"TRAFODION"."LOB130" + 2 LOBH0000000200010599162824891000214319599162824908906372018212384027264411730020"TRAFODION"."LOB130" + 3 LOBH0000000200010599162824891000214319599162824909696994518212384027272355484020"TRAFODION"."LOB130" --- 3 row(s) selected. >> @@ -668,7 +668,7 @@ And the dish ran away with the fork ! >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_txt1.txt');/g" >> t130_extract_command; >> >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010684167783903032825819684167784024315676018212379188752592782020"TRAFODION"."LOB130" ' , 'tlob130_txt1.txt'); +>>extract lobtofile(LOB 'LOBH0000000200010599162824891010592019599162825008788792718212384028263167191020"TRAFODION"."LOB130" ' , 'tlob130_txt1.txt'); Success. Targetfile :tlob130_txt1.txt Length : 19 --- SQL operation complete. @@ -684,7 +684,7 @@ Success. Targetfile :tlob130_txt1.txt Length : 19 >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_deep.jpg');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010684167783903033003019684167784032532137618212379188834776548020"TRAFODION"."LOB130" ' , 'tlob130_deep.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" ' , 'tlob130_deep.jpg'); Success. Targetfile :tlob130_deep.jpg Length : 159018 --- SQL operation complete. @@ -700,7 +700,7 @@ Success. Targetfile :tlob130_deep.jpg Length : 159018 >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_anoush.jpg');/g" >> t130_extract_command; >> >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010684167783903033003019684167784032532137618212379188834776548020"TRAFODION"."LOB130" ' , 'tlob130_anoush.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" ' , 'tlob130_anoush.jpg'); Success. Targetfile :tlob130_anoush.jpg Length : 230150 --- SQL operation complete. @@ -861,7 +861,7 @@ Column Name : c2 Input a filename to extract to : Output File Name : lobc2out.jpg Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010684167783903033003019684167784032532137618212379188834776548020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" Extracting LOB data length for the above handle... LOB data length :230150 Extracting lob data into file in chunks ... @@ -935,7 +935,7 @@ And the dish ran away with the spoon. >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_deep2.jpg');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200020684167783903037314519684167784064680849818212379189156209716020"TRAFODION"."LOB130" ' , 'tlob130_deep2.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200020599162824891015449419599162825052851369318212384028704041429020"TRAFODION"."LOB130" ' , 'tlob130_deep2.jpg'); Success. Targetfile :tlob130_deep2.jpg Length : 159018 --- SQL operation complete. @@ -967,7 +967,7 @@ Hey diddle diddle, >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_anoush3.jpg',create,truncate);/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200030684167783903037826119684167784070505285418212379189214460936020"TRAFODION"."LOB130" ' , 'tlob130_anoush3.jpg',create,truncate); +>>extract lobtofile(LOB 'LOBH0000000200030599162824891016047719599162825059292319718212384028768498788020"TRAFODION"."LOB130" ' , 'tlob130_anoush3.jpg',create,truncate); Success. Targetfile :tlob130_anoush3.jpg Length : 230150 --- SQL operation complete. @@ -1068,12 +1068,12 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT2 ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030414947_0001 + LOB Data File: LOBP_05991628248910199914_0001 LOB EOD : 0 LOB Used Len : 0 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030414947_0002 + LOB Data File: LOBP_05991628248910199914_0002 LOB EOD : 0 LOB Used Len : 0 ColumnName : C4 @@ -1088,8 +1088,8 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT2 CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT2 C2 /user/trafodion/lobs LOBP_06841677839030414947_0001 0 0 -TRAFODION LOB130 TLOB130GT2 C3 /user/trafodion/lobs LOBP_06841677839030414947_0002 0 0 +TRAFODION LOB130 TLOB130GT2 C2 /user/trafodion/lobs LOBP_05991628248910199914_0001 0 0 +TRAFODION LOB130 TLOB130GT2 C3 /user/trafodion/lobs LOBP_05991628248910199914_0002 0 0 TRAFODION LOB130 TLOB130GT2 C4 External HDFS Location External HDFS File 0 0 --- 3 row(s) selected. @@ -1110,17 +1110,17 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0001 + LOB Data File: LOBP_05991628248910195746_0001 LOB EOD : 15 LOB Used Len : 15 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0002 + LOB Data File: LOBP_05991628248910195746_0002 LOB EOD : 15 LOB Used Len : 15 ColumnName : C4 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0003 + LOB Data File: LOBP_05991628248910195746_0003 LOB EOD : 45 LOB Used Len : 45 @@ -1130,9 +1130,9 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_06841677839030411144_0001 15 15 -TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_06841677839030411144_0002 15 15 -TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_06841677839030411144_0003 45 45 +TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_05991628248910195746_0001 15 15 +TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_05991628248910195746_0002 15 15 +TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_05991628248910195746_0003 45 45 --- 3 row(s) selected. >>delete from tlob130gt where c1=2; @@ -1149,17 +1149,17 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0001 + LOB Data File: LOBP_05991628248910195746_0001 LOB EOD : 30 LOB Used Len : 25 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0002 + LOB Data File: LOBP_05991628248910195746_0002 LOB EOD : 31 LOB Used Len : 26 ColumnName : C4 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030411144_0003 + LOB Data File: LOBP_05991628248910195746_0003 LOB EOD : 71 LOB Used Len : 56 @@ -1169,9 +1169,9 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_06841677839030411144_0001 30 25 -TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_06841677839030411144_0002 31 26 -TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_06841677839030411144_0003 71 56 +TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_05991628248910195746_0001 30 25 +TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_05991628248910195746_0002 31 26 +TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_05991628248910195746_0003 71 56 --- 3 row(s) selected. >> @@ -1197,6 +1197,26 @@ TRAFODION --- 1 row(s) inserted. >> +>> +>>log; +>>sh rm t130_extract_command; +>>sh grep "^LOBH" TMP130 | sed "s/^/extract filename(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +>>obey t130_extract_command; +>>extract filename(LOB 'LOBH0000000200020599162824891021556919599162825127466931518212384029450160806020"TRAFODION"."LOB130" '); + LOB filename : /user/trafodion/lobs/LOBP_05991628248910215569_0002 + +--- SQL operation complete. +>>sh rm t130_extract_command; +>>sh grep "^LOBH" TMP130 | sed "s/^/extract offset(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +>>obey t130_extract_command; +>>extract offset(LOB 'LOBH0000000200020599162824891021556919599162825127466931518212384029450160806020"TRAFODION"."LOB130" '); + LOB Offset : 43 + +--- SQL operation complete. +>> +>> +>> +>> >>--negative cases >>insert into tlob130ext values(2, externaltolob('first lob'), filetolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt'),externaltolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt')); @@ -1342,12 +1362,12 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130EXT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030429611_0001 + LOB Data File: LOBP_05991628248910215569_0001 LOB EOD : 70 LOB Used Len : 42 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_06841677839030429611_0002 + LOB Data File: LOBP_05991628248910215569_0002 LOB EOD : 125 LOB Used Len : 68 ColumnName : C4 @@ -1362,8 +1382,8 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130EXT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130EXT C2 /user/trafodion/lobs LOBP_06841677839030429611_0001 70 42 -TRAFODION LOB130 TLOB130EXT C3 /user/trafodion/lobs LOBP_06841677839030429611_0002 125 68 +TRAFODION LOB130 TLOB130EXT C2 /user/trafodion/lobs LOBP_05991628248910215569_0001 70 42 +TRAFODION LOB130 TLOB130EXT C3 /user/trafodion/lobs LOBP_05991628248910215569_0002 125 68 TRAFODION LOB130 TLOB130EXT C4 External HDFS Location External HDFS File 0 0 --- 3 row(s) selected. @@ -1380,7 +1400,7 @@ Column Name : c4 Input a filename to extract to : Output File Name : lobc4ext.txt Extracting lob handle for column c4... -LOB handle for c4: LOBH0000000800030684167783903042961119684167784136680234118212379189876220716020"TRAFODION"."LOB130" +LOB handle for c4: LOBH0000000800030599162824891021556919599162825132831553518212384029503873802020"TRAFODION"."LOB130" Extracting LOB data length for the above handle... LOB data length :19 Extracting lob data into file in chunks ... @@ -1446,7 +1466,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010684167783903048606519684167784176681773818212379190276169590020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" >>select lobtostring(c2,20) from t130lob5; (EXPR) @@ -1463,7 +1483,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010684167783903048606519684167784176681773818212379190276169590020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" >>select lobtostring(c2,40) from t130lob5; (EXPR) @@ -1480,7 +1500,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010684167783903048606519684167784176681773818212379190276169590020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" >>select lobtostring(c2,20) from t130lob5; (EXPR) @@ -1497,7 +1517,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010684167783903048606519684167784176681773818212379190276169590020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" >>select lobtostring(c2,40) from t130lob5; (EXPR) @@ -1524,7 +1544,7 @@ zzzzzzzzzzzzzzzzzzzz C2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -LOBH0000000200010684167783903042961119684167784191698308218212379190426424539020"TRAFODION"."LOB130" +LOBH0000000200010599162824891021556919599162825191632813218212384030091687654020"TRAFODION"."LOB130" --- 1 row(s) selected. >>-- following should return error since only external lobs will be allowed @@ -1567,9 +1587,9 @@ LOBH0000000200010684167783903042961119684167784191698308218212379190426424539020 Tables in Schema TRAFODION.LOBSCH ================================= -LOBDescChunks__06841677839030508209_0001 -LOBDescHandle__06841677839030508209_0001 -LOBMD__06841677839030508209 +LOBDescChunks__05991628248910301630_0001 +LOBDescHandle__05991628248910301630_0001 +LOBMD__05991628248910301630 SB_HISTOGRAMS SB_HISTOGRAM_INTERVALS SB_PERSISTENT_SAMPLES diff --git a/core/sql/regress/executor/TEST130 b/core/sql/regress/executor/TEST130 index 38214c6989..05e235fcbc 100755 --- a/core/sql/regress/executor/TEST130 +++ b/core/sql/regress/executor/TEST130 @@ -559,6 +559,23 @@ insert into tlob130ext values(1, stringtolob('first lob'), filetolob('hdfs:///us insert into tlob130ext values(2, stringtolob('second lob'), filetolob('hdfs:///user/trafodion/lobs/lob_input_b1.txt'),externaltolob('hdfs:///user/trafodion/lobs/lob_input_b1.txt')); insert into tlob130ext values(3, stringtolob('third lob'), filetolob('hdfs:///user/trafodion/lobs/lob_input_c1.txt'),externaltolob('hdfs:///user/trafodion/lobs/lob_input_c1.txt')); + +log; +log TMP130 clear; +select c3 from tlob130ext where c1=3; +log; + +log LOG130; +sh rm t130_extract_command; +sh grep "^LOBH" TMP130 | sed "s/^/extract filename(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +obey t130_extract_command; +sh rm t130_extract_command; +sh grep "^LOBH" TMP130 | sed "s/^/extract offset(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +obey t130_extract_command; + + + + --negative cases insert into tlob130ext values(2, externaltolob('first lob'), filetolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt'),externaltolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt')); insert into tlob130ext values(3, stringtolob('first lob'), filetolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt'),filetolob('hdfs:///user/trafodion/lobs/lob_input_a1.txt')); From 5ff116921d449d7b48a6326cf3abadb4be980870 Mon Sep 17 00:00:00 2001 From: Sandhya Sundaresan Date: Thu, 1 Feb 2018 22:44:01 +0000 Subject: [PATCH 2/3] Remove use of new parser token TOK_FILENAME and reuse existing token for TOK_NAME. ../../../sql/optimizer/bre --- core/sql/parser/ParKeyWords.cpp | 1 - core/sql/parser/sqlparser.y | 5 +- core/sql/regress/executor/EXPECTED130 | 84 +++++++++++++-------------- core/sql/regress/executor/TEST130 | 2 +- 4 files changed, 45 insertions(+), 47 deletions(-) diff --git a/core/sql/parser/ParKeyWords.cpp b/core/sql/parser/ParKeyWords.cpp index 9b07316dce..f604c2307c 100644 --- a/core/sql/parser/ParKeyWords.cpp +++ b/core/sql/parser/ParKeyWords.cpp @@ -428,7 +428,6 @@ ParKeyWord ParKeyWords::keyWords_[] = { ParKeyWord("FEATURE_VERSION_INFO",TOK_FEATURE_VERSION_INFO, NONRESTOKEN_), ParKeyWord("FETCH", TOK_FETCH, ANS_|RESWORD_|MPWORD_), ParKeyWord("FILE", TOK_FILE, NONRESTOKEN_), - ParKeyWord("FILENAME", TOK_FILENAME, NONRESTOKEN_), ParKeyWord("FILETOLOB", TOK_FILETOLOB, NONRESTOKEN_), ParKeyWord("FILETOEXTERNAL", TOK_FILETOEXTERNAL, NONRESTOKEN_), ParKeyWord("FINAL", TOK_FINAL, NONRESTOKEN_), diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y index 0c3cddfe7f..f4f6da6f73 100755 --- a/core/sql/parser/sqlparser.y +++ b/core/sql/parser/sqlparser.y @@ -750,7 +750,6 @@ static void enableMakeQuotedStringISO88591Mechanism() %token TOK_EXTERNALTOSTRING %token TOK_EMPTY_BLOB %token TOK_EMPTY_CLOB -%token TOK_FILENAME %token TOK_INSERT %token TOK_INSERT_ONLY %token TOK_INS @@ -15932,7 +15931,7 @@ exe_util_lob_extract : TOK_EXTRACT TOK_LOBLENGTH '(' TOK_LOB QUOTED_STRING ')' $$ = lle; } /* type relx */ -exe_util_lob_extract : TOK_EXTRACT TOK_FILENAME'(' TOK_LOB QUOTED_STRING ')' TOK_LOCATION NUMERIC_LITERAL_EXACT_NO_SCALE +exe_util_lob_extract : TOK_EXTRACT TOK_NAME '(' TOK_LOB QUOTED_STRING ')' TOK_LOCATION NUMERIC_LITERAL_EXACT_NO_SCALE { ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); Int64 returnFilenameAddr = atoInt64($8->data()); @@ -15945,7 +15944,7 @@ exe_util_lob_extract : TOK_EXTRACT TOK_FILENAME'(' TOK_LOB QUOTED_STRING ')' TO $$ = lle; } /* type relx */ -exe_util_lob_extract : TOK_EXTRACT TOK_FILENAME '(' TOK_LOB QUOTED_STRING ')' +exe_util_lob_extract : TOK_EXTRACT TOK_NAME '(' TOK_LOB QUOTED_STRING ')' { ConstValue * handle = new(PARSERHEAP()) ConstValue(*$5); diff --git a/core/sql/regress/executor/EXPECTED130 b/core/sql/regress/executor/EXPECTED130 index 5d274b60b6..fa69e88305 100644 --- a/core/sql/regress/executor/EXPECTED130 +++ b/core/sql/regress/executor/EXPECTED130 @@ -63,9 +63,9 @@ C1 C1 C2 ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - 1 LOBH0000000200010599162824891000214319599162824908088805718212384027254904057020"TRAFODION"."LOB130" - 2 LOBH0000000200010599162824891000214319599162824908906372018212384027264411730020"TRAFODION"."LOB130" - 3 LOBH0000000200010599162824891000214319599162824909696994518212384027272355484020"TRAFODION"."LOB130" + 1 LOBH0000000200010492540128525785049519492540128543818753118212384275392041945020"TRAFODION"."LOB130" + 2 LOBH0000000200010492540128525785049519492540128544675708418212384275402066673020"TRAFODION"."LOB130" + 3 LOBH0000000200010492540128525785049519492540128545449436418212384275409949492020"TRAFODION"."LOB130" --- 3 row(s) selected. >> @@ -668,7 +668,7 @@ And the dish ran away with the fork ! >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_txt1.txt');/g" >> t130_extract_command; >> >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010599162824891010592019599162825008788792718212384028263167191020"TRAFODION"."LOB130" ' , 'tlob130_txt1.txt'); +>>extract lobtofile(LOB 'LOBH0000000200010492540128525796887519492540128660413814518212384276559256768020"TRAFODION"."LOB130" ' , 'tlob130_txt1.txt'); Success. Targetfile :tlob130_txt1.txt Length : 19 --- SQL operation complete. @@ -684,7 +684,7 @@ Success. Targetfile :tlob130_txt1.txt Length : 19 >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_deep.jpg');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" ' , 'tlob130_deep.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200010492540128525797109219492540128672143163118212384276675380782020"TRAFODION"."LOB130" ' , 'tlob130_deep.jpg'); Success. Targetfile :tlob130_deep.jpg Length : 159018 --- SQL operation complete. @@ -700,7 +700,7 @@ Success. Targetfile :tlob130_deep.jpg Length : 159018 >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_anoush.jpg');/g" >> t130_extract_command; >> >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" ' , 'tlob130_anoush.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200010492540128525797109219492540128672143163118212384276675380782020"TRAFODION"."LOB130" ' , 'tlob130_anoush.jpg'); Success. Targetfile :tlob130_anoush.jpg Length : 230150 --- SQL operation complete. @@ -861,7 +861,7 @@ Column Name : c2 Input a filename to extract to : Output File Name : lobc2out.jpg Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010599162824891010783319599162825017613184818212384028351739389020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010492540128525797109219492540128672143163118212384276675380782020"TRAFODION"."LOB130" Extracting LOB data length for the above handle... LOB data length :230150 Extracting lob data into file in chunks ... @@ -935,7 +935,7 @@ And the dish ran away with the spoon. >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_deep2.jpg');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200020599162824891015449419599162825052851369318212384028704041429020"TRAFODION"."LOB130" ' , 'tlob130_deep2.jpg'); +>>extract lobtofile(LOB 'LOBH0000000200020492540128525802271019492540128707944124018212384277034197183020"TRAFODION"."LOB130" ' , 'tlob130_deep2.jpg'); Success. Targetfile :tlob130_deep2.jpg Length : 159018 --- SQL operation complete. @@ -967,7 +967,7 @@ Hey diddle diddle, >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract lobtofile(LOB '/g" | sed "s/$/' , 'tlob130_anoush3.jpg',create,truncate);/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract lobtofile(LOB 'LOBH0000000200030599162824891016047719599162825059292319718212384028768498788020"TRAFODION"."LOB130" ' , 'tlob130_anoush3.jpg',create,truncate); +>>extract lobtofile(LOB 'LOBH0000000200030492540128525802824819492540128714305550118212384277098509118020"TRAFODION"."LOB130" ' , 'tlob130_anoush3.jpg',create,truncate); Success. Targetfile :tlob130_anoush3.jpg Length : 230150 --- SQL operation complete. @@ -1068,12 +1068,12 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT2 ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910199914_0001 + LOB Data File: LOBP_04925401285258067632_0001 LOB EOD : 0 LOB Used Len : 0 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910199914_0002 + LOB Data File: LOBP_04925401285258067632_0002 LOB EOD : 0 LOB Used Len : 0 ColumnName : C4 @@ -1088,8 +1088,8 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT2 CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT2 C2 /user/trafodion/lobs LOBP_05991628248910199914_0001 0 0 -TRAFODION LOB130 TLOB130GT2 C3 /user/trafodion/lobs LOBP_05991628248910199914_0002 0 0 +TRAFODION LOB130 TLOB130GT2 C2 /user/trafodion/lobs LOBP_04925401285258067632_0001 0 0 +TRAFODION LOB130 TLOB130GT2 C3 /user/trafodion/lobs LOBP_04925401285258067632_0002 0 0 TRAFODION LOB130 TLOB130GT2 C4 External HDFS Location External HDFS File 0 0 --- 3 row(s) selected. @@ -1110,17 +1110,17 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0001 + LOB Data File: LOBP_04925401285258063762_0001 LOB EOD : 15 LOB Used Len : 15 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0002 + LOB Data File: LOBP_04925401285258063762_0002 LOB EOD : 15 LOB Used Len : 15 ColumnName : C4 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0003 + LOB Data File: LOBP_04925401285258063762_0003 LOB EOD : 45 LOB Used Len : 45 @@ -1130,9 +1130,9 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_05991628248910195746_0001 15 15 -TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_05991628248910195746_0002 15 15 -TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_05991628248910195746_0003 45 45 +TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_04925401285258063762_0001 15 15 +TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_04925401285258063762_0002 15 15 +TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_04925401285258063762_0003 45 45 --- 3 row(s) selected. >>delete from tlob130gt where c1=2; @@ -1149,17 +1149,17 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0001 + LOB Data File: LOBP_04925401285258063762_0001 LOB EOD : 30 LOB Used Len : 25 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0002 + LOB Data File: LOBP_04925401285258063762_0002 LOB EOD : 31 LOB Used Len : 26 ColumnName : C4 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910195746_0003 + LOB Data File: LOBP_04925401285258063762_0003 LOB EOD : 71 LOB Used Len : 56 @@ -1169,9 +1169,9 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130GT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_05991628248910195746_0001 30 25 -TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_05991628248910195746_0002 31 26 -TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_05991628248910195746_0003 71 56 +TRAFODION LOB130 TLOB130GT C2 /user/trafodion/lobs LOBP_04925401285258063762_0001 30 25 +TRAFODION LOB130 TLOB130GT C3 /user/trafodion/lobs LOBP_04925401285258063762_0002 31 26 +TRAFODION LOB130 TLOB130GT C4 /user/trafodion/lobs LOBP_04925401285258063762_0003 71 56 --- 3 row(s) selected. >> @@ -1200,16 +1200,16 @@ TRAFODION >> >>log; >>sh rm t130_extract_command; ->>sh grep "^LOBH" TMP130 | sed "s/^/extract filename(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +>>sh grep "^LOBH" TMP130 | sed "s/^/extract name(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract filename(LOB 'LOBH0000000200020599162824891021556919599162825127466931518212384029450160806020"TRAFODION"."LOB130" '); - LOB filename : /user/trafodion/lobs/LOBP_05991628248910215569_0002 +>>extract name(LOB 'LOBH0000000200020492540128525808308619492540128781847368018212384277774048076020"TRAFODION"."LOB130" '); + LOB filename : /user/trafodion/lobs/LOBP_04925401285258083086_0002 --- SQL operation complete. >>sh rm t130_extract_command; >>sh grep "^LOBH" TMP130 | sed "s/^/extract offset(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; >>obey t130_extract_command; ->>extract offset(LOB 'LOBH0000000200020599162824891021556919599162825127466931518212384029450160806020"TRAFODION"."LOB130" '); +>>extract offset(LOB 'LOBH0000000200020492540128525808308619492540128781847368018212384277774048076020"TRAFODION"."LOB130" '); LOB Offset : 43 --- SQL operation complete. @@ -1362,12 +1362,12 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130EXT ColumnName : C2 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910215569_0001 + LOB Data File: LOBP_04925401285258083086_0001 LOB EOD : 70 LOB Used Len : 42 ColumnName : C3 Lob Location : /user/trafodion/lobs - LOB Data File: LOBP_05991628248910215569_0002 + LOB Data File: LOBP_04925401285258083086_0002 LOB EOD : 125 LOB Used Len : 68 ColumnName : C4 @@ -1382,8 +1382,8 @@ Lob Information for table: "TRAFODION".LOB130.TLOB130EXT CATALOG_NAME SCHEMA_NAME OBJECT_NAME COLUMN_NAME LOB_LOCATION LOB_DATA_FILE LOB_DATA_FILE_SIZE_EOD LOB_DATA_FILE_SIZE_USED ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------- ----------------------- -TRAFODION LOB130 TLOB130EXT C2 /user/trafodion/lobs LOBP_05991628248910215569_0001 70 42 -TRAFODION LOB130 TLOB130EXT C3 /user/trafodion/lobs LOBP_05991628248910215569_0002 125 68 +TRAFODION LOB130 TLOB130EXT C2 /user/trafodion/lobs LOBP_04925401285258083086_0001 70 42 +TRAFODION LOB130 TLOB130EXT C3 /user/trafodion/lobs LOBP_04925401285258083086_0002 125 68 TRAFODION LOB130 TLOB130EXT C4 External HDFS Location External HDFS File 0 0 --- 3 row(s) selected. @@ -1400,7 +1400,7 @@ Column Name : c4 Input a filename to extract to : Output File Name : lobc4ext.txt Extracting lob handle for column c4... -LOB handle for c4: LOBH0000000800030599162824891021556919599162825132831553518212384029503873802020"TRAFODION"."LOB130" +LOB handle for c4: LOBH0000000800030492540128525808308619492540128786993345718212384277825571287020"TRAFODION"."LOB130" Extracting LOB data length for the above handle... LOB data length :19 Extracting lob data into file in chunks ... @@ -1466,7 +1466,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010492540128525814570219492540128830098955718212384278256374414020"TRAFODION"."LOB130" >>select lobtostring(c2,20) from t130lob5; (EXPR) @@ -1483,7 +1483,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010492540128525814570219492540128830098955718212384278256374414020"TRAFODION"."LOB130" >>select lobtostring(c2,40) from t130lob5; (EXPR) @@ -1500,7 +1500,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010492540128525814570219492540128830098955718212384278256374414020"TRAFODION"."LOB130" >>select lobtostring(c2,20) from t130lob5; (EXPR) @@ -1517,7 +1517,7 @@ Table name : TRAFODION.LOB130.t130lob5 Input lob column name to get handle from : Column Name : c2 Extracting lob handle for column c2... -LOB handle for c2: LOBH0000000200010599162824891027798519599162825175307181118212384029928539205020"TRAFODION"."LOB130" +LOB handle for c2: LOBH0000000200010492540128525814570219492540128830098955718212384278256374414020"TRAFODION"."LOB130" >>select lobtostring(c2,40) from t130lob5; (EXPR) @@ -1544,7 +1544,7 @@ zzzzzzzzzzzzzzzzzzzz C2 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -LOBH0000000200010599162824891021556919599162825191632813218212384030091687654020"TRAFODION"."LOB130" +LOBH0000000200010492540128525808308619492540128846057880518212384278416137106020"TRAFODION"."LOB130" --- 1 row(s) selected. >>-- following should return error since only external lobs will be allowed @@ -1587,9 +1587,9 @@ LOBH0000000200010599162824891021556919599162825191632813218212384030091687654020 Tables in Schema TRAFODION.LOBSCH ================================= -LOBDescChunks__05991628248910301630_0001 -LOBDescHandle__05991628248910301630_0001 -LOBMD__05991628248910301630 +LOBDescChunks__04925401285258169438_0001 +LOBDescHandle__04925401285258169438_0001 +LOBMD__04925401285258169438 SB_HISTOGRAMS SB_HISTOGRAM_INTERVALS SB_PERSISTENT_SAMPLES diff --git a/core/sql/regress/executor/TEST130 b/core/sql/regress/executor/TEST130 index 05e235fcbc..72fea332e0 100755 --- a/core/sql/regress/executor/TEST130 +++ b/core/sql/regress/executor/TEST130 @@ -567,7 +567,7 @@ log; log LOG130; sh rm t130_extract_command; -sh grep "^LOBH" TMP130 | sed "s/^/extract filename(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; +sh grep "^LOBH" TMP130 | sed "s/^/extract name(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; obey t130_extract_command; sh rm t130_extract_command; sh grep "^LOBH" TMP130 | sed "s/^/extract offset(LOB '/g" | sed "s/$/');/g" >> t130_extract_command; From efaebe17c964c8c4674ea1d1fa1110ac0daac344 Mon Sep 17 00:00:00 2001 From: Sandhya Sundaresan Date: Wed, 7 Feb 2018 22:08:58 +0000 Subject: [PATCH 3/3] Review fixes --- core/sql/cli/Cli.cpp | 2 ++ core/sql/exp/ExpLOBaccess.cpp | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/sql/cli/Cli.cpp b/core/sql/cli/Cli.cpp index d3892c675f..41e9bf7d50 100644 --- a/core/sql/cli/Cli.cpp +++ b/core/sql/cli/Cli.cpp @@ -9160,6 +9160,7 @@ Lng32 SQLCLI_LOBcliInterface Int64 outlen = 0;Lng32 len = 0; cliRC = cliInterface->executeImmediate(query,(char *)dataLen, &len, FALSE); + currContext.resetSqlParserFlags(0x1); if (inoutDescPartnKey) *inoutDescPartnKey = descPartnKey; @@ -9194,6 +9195,7 @@ Lng32 SQLCLI_LOBcliInterface Lng32 len = 0; cliRC = cliInterface->executeImmediate(query,(char *)dataOffset, &len, FALSE); + currContext.resetSqlParserFlags(0x1); if (inoutDescPartnKey) *inoutDescPartnKey = descPartnKey; diff --git a/core/sql/exp/ExpLOBaccess.cpp b/core/sql/exp/ExpLOBaccess.cpp index df6b4ea8ff..b5a427b4c6 100644 --- a/core/sql/exp/ExpLOBaccess.cpp +++ b/core/sql/exp/ExpLOBaccess.cpp @@ -875,8 +875,7 @@ Ex_Lob_Error ExLob::getOffset(char *handleIn, Int32 handleInLen,Int64 &outLobOff char logBuf[4096]; Int32 cliErr = 0; Ex_Lob_Error err=LOB_OPER_OK; - char *blackBox = new(getLobGlobalHeap()) char[MAX_LOB_FILE_NAME_LEN+6]; - Int32 blackBoxLen = 0; + Int64 dummy = 0; Int32 dummy2 = 0; if (so != Lob_External_File)