Github user zellerh commented on a diff in the pull request: https://github.com/apache/trafodion/pull/1504#discussion_r178896649 --- Diff: core/sql/executor/ExExeUtilCli.cpp --- @@ -2091,27 +2084,57 @@ Lng32 ExeCliInterface::deleteContext(char* contextHandle) // in buf contains con Lng32 ExeCliInterface::retrieveSQLDiagnostics(ComDiagsArea *toDiags) { Lng32 retcode; - + ex_assert(toDiags != NULL, "ComDiagsArea is null"); if (diagsArea_ != NULL) { diagsArea_->clear(); diagsArea_->deAllocate(); } + retcode = SQL_EXEC_MergeDiagnostics_Internal(*toDiags); + SQL_EXEC_ClearDiagnostics(NULL); + return retcode; +} - if (toDiags != NULL) - { - retcode = SQL_EXEC_MergeDiagnostics_Internal(*toDiags); - SQL_EXEC_ClearDiagnostics(NULL); - } - else + +ComDiagsArea *ExeCliInterface::allocAndRetrieveSQLDiagnostics(ComDiagsArea *&toDiags) +{ + Lng32 retcode; + + if (diagsArea_ != NULL) { - diagsArea_ = ComDiagsArea::allocate(heap_); - retcode = SQL_EXEC_MergeDiagnostics_Internal(*diagsArea_); + diagsArea_->clear(); + diagsArea_->deAllocate(); } + if (toDiags == NULL) + toDiags = ComDiagsArea::allocate(heap_); - return retcode; + retcode = SQL_EXEC_MergeDiagnostics_Internal(*toDiags); + SQL_EXEC_ClearDiagnostics(NULL); + + if (retcode == 0) + return toDiags; + else + return NULL; } +void ExeCliInterface::retrieveOrSaveSQLDiagnostics(Lng32 cliRetcode, ComDiagsArea *diagsArea) --- End diff -- A comment would help here that we are returning the diagnostics if diagsArea is non-null and that we are saving them if NULL is passed in.
---