Github user robertamarton commented on a diff in the pull request:
https://github.com/apache/trafodion/pull/1721#discussion_r225014769
--- Diff: core/sql/executor/ExExeUtilLoad.cpp ---
@@ -3288,6 +3288,45 @@ short ExExeUtilLobExtractTcb::work()
return 0;
}
+
+short ExExeUtilLobExtractLibrary(ExeCliInterface *cliInterface,char
*libHandle, char *cachedLibName,ComDiagsArea *toDiags)
+{
+ char buf[1000];
+ Int32 cliRC =0;
+ str_sprintf(buf, "extract lobtofile(LOB
'%s','%s');",libHandle,cachedLibName);
+
+
+ cliRC = cliInterface->fetchRowsPrologue(buf, TRUE/*no exec*/);
+ if (cliRC < 0)
+ {
+ cliInterface->retrieveSQLDiagnostics(toDiags);
+ return cliRC;
+ }
+
+ cliRC = cliInterface->clearExecFetchClose(NULL, 0);
+ if (cliRC < 0)
+ {
+ cliInterface->retrieveSQLDiagnostics(toDiags);
+ //Ignore error if the target file exists. This could be because the
cached
+ // file already got created by another process at the same time. So
we can ignore
+ // the error and use the already cached file.
+ ComCondition *cond = NULL;
+ Int32 entryNumber;
+ cond = toDiags->findCondition(-EXE_ERROR_FROM_LOB_INTERFACE,
&entryNumber);
--- End diff --
Could you get more than one error in diags when the target file exists?
Instead of just removing the error in question, you could mark the diags area
before the call and then rewind if the target exists.
---