本文整理汇总了C++中ComDiagsArea类的典型用法代码示例。如果您正苦于以下问题:C++ ComDiagsArea类的具体用法?C++ ComDiagsArea怎么用?C++ ComDiagsArea使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ComDiagsArea类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleError
short ex_tcb::handleError(ex_queue_pair *qparent, ComDiagsArea *inDiagsArea)
{
if (qparent->up->isFull())
return 1;
// Return EOF.
ex_queue_entry * up_entry = qparent->up->getTailEntry();
ex_queue_entry * pentry_down = qparent->down->getHeadEntry();
up_entry->upState.parentIndex =
pentry_down->downState.parentIndex;
up_entry->upState.setMatchNo(0);
up_entry->upState.status = ex_queue::Q_SQLERROR;
ComDiagsArea *diagsArea = up_entry->getDiagsArea();
if (diagsArea == NULL)
diagsArea =
ComDiagsArea::allocate(this->getGlobals()->getDefaultHeap());
else
diagsArea->incrRefCount (); // the setDiagsArea below will decr the ref count
if (inDiagsArea)
diagsArea->mergeAfter(*inDiagsArea);
up_entry->setDiagsArea (diagsArea);
// insert into parent
qparent->up->insert();
return 0;
}
示例2: CmpSPExtractFunc_
SP_HELPER_STATUS CmpSPExtractFunc_ (
Lng32 fieldNo,
SP_ROW_DATA rowData,
Lng32 fieldLen,
void* fieldData,
Lng32 casting )
{
CmpSPExecDataItemInput* inPtr = (CmpSPExecDataItemInput*)rowData;
ULng32 tempNum = (ULng32)fieldNo;
ULng32 tempLen = (ULng32)fieldLen;
ComDiagsArea* diags = inPtr->SPFuncsDiags();
if ( inPtr->extract(tempNum,(char*)fieldData,tempLen,
((casting==1) ? TRUE : FALSE), diags) < 0 ||
diags->getNumber() )
{
// TODO, convert the errors in diags into error code.
diags->clear(); // to be used for next CmpSPExtractFunc_
return SP_ERROR_EXTRACT_DATA;
}
// test code for assert, check for arkcmp/SPUtil.cpp SP_ERROR_*
// for detail description.
//#define ASTRING "TestCMPASSERTEXE"
//assert( strncmp((char*)fieldData, ASTRING, strlen(ASTRING) != 0 ) ) ;
return SP_NO_ERROR;
}
示例3: updateDiagsArea
// LCOV_EXCL_START
void ExSequenceTcb::updateDiagsArea( ExeErrorCode rc_)
{
ComDiagsArea *da = workAtp_->getDiagsArea();
if(!da)
{
da = ComDiagsArea::allocate(heap_);
workAtp_->setDiagsArea(da);
}
if (!da->contains((Lng32) -rc_))
{
*da << DgSqlCode(-rc_);
}
}
示例4: ExRaiseSqlError
ComDiagsArea *ExRaiseSqlError(CollHeap* heap, ex_queue_entry* req,
ExeErrorCode err,
Lng32 * intParam1,
char * stringParam1,
ComCondition** newCond)
{
ComDiagsArea* da = req->getDiagsArea();
if (da == NULL)
da = ComDiagsArea::allocate(heap);
else
da = da->copy();
return ExRaiseSqlError(heap, &da, (ExeErrorCode)(-err), newCond, intParam1, NULL, NULL, stringParam1);
}
示例5: updateWorkATPDiagsArea
void ExFastExtractTcb::updateWorkATPDiagsArea(ex_queue_entry * centry)
{
if (centry->getDiagsArea())
{
if (workAtp_->getDiagsArea())
{
workAtp_->getDiagsArea()->mergeAfter(*centry->getDiagsArea());
}
else
{
ComDiagsArea * da = centry->getDiagsArea();
workAtp_->setDiagsArea(da);
da->incrRefCount();
centry->setDiagsArea(0);
}
}
}
示例6:
ComDiagsArea *ExExeUtilLongRunningTcb::getDiagAreaFromUpQueueTail()
{
ex_queue_entry * up_entry = qparent_.up->getTailEntry();
ComDiagsArea *diagsArea = up_entry->getDiagsArea();
if (diagsArea == NULL)
diagsArea = ComDiagsArea::allocate(this->getGlobals()->getDefaultHeap());
else
diagsArea->incrRefCount (); // setDiagsArea call below will decr ref count
// this is the side-effect of this function. Merge in this object's
// diagsarea.
if (getDiagsArea())
diagsArea->mergeAfter(*getDiagsArea());
up_entry->setDiagsArea (diagsArea);
return diagsArea;
}
示例7: CmpSPFormatFunc_
SP_HELPER_STATUS CmpSPFormatFunc_ (Lng32 fieldNo,
SP_ROW_DATA rowData,
Lng32 fieldLen,
void* fieldData,
Lng32 casting)
{
CmpSPExecDataItemReply* replyPtr = (CmpSPExecDataItemReply*)rowData;
#pragma nowarn(262) // warning elimination
ULng32 tempNum = (ULng32)fieldNo;
ULng32 tempLen = (ULng32)fieldLen;
ComDiagsArea* diags = replyPtr->SPFuncsDiags();
if ( replyPtr->moveOutput(fieldNo,(char*)fieldData,tempLen,
((casting==1) ? TRUE : FALSE), diags) < 0 ||
diags->getNumber() )
{
diags->clear(); // to be used for next CmpSPFormatFunc_
return SP_ERROR_FORMAT_DATA;
}
else
return SP_NO_ERROR;
}
示例8: ex_assert
ExProbeCacheTcb::MoveStatus
ExProbeCacheTcb::moveReplyToCache(ex_queue_entry &reply,
ExPCE &pcEntry)
{
if (moveInnerExpr())
{
ex_assert(!pcEntry.innerRowTupp_.isAllocated(),
"reusing an allocated innerRowTupp");
if (pool_->getFreeTuple(pcEntry.innerRowTupp_))
return MOVE_BLOCKED;
workAtp_->getTupp(probeCacheTdb().innerRowDataIdx_) =
pcEntry.innerRowTupp_;
// Evaluate the move expression on the reply.
ex_expr::exp_return_type innerMoveRtn =
moveInnerExpr()->eval(reply.getAtp(),workAtp_);
if (innerMoveRtn == ex_expr::EXPR_ERROR)
return MOVE_ERROR;
}
else
{
ex_assert(pcEntry.innerRowTupp_.isAllocated() == FALSE,
"Incorrectly initialized inneRowTupp_");
}
// Initialize ExPCE members
pcEntry.upstateStatus_ = ex_queue::Q_OK_MMORE;
ComDiagsArea *da = reply.getAtp()->getDiagsArea();
if (da)
{
pcEntry.diagsArea_ = da;
da->incrRefCount();
}
return MOVE_OK;
}
示例9: handleDone
short ex_tcb::handleDone(ex_queue_pair *qparent, ComDiagsArea *inDiagsArea)
{
if (qparent->up->isFull())
return 1;
// Return EOF.
ex_queue_entry * up_entry = qparent->up->getTailEntry();
ex_queue_entry * pentry_down = qparent->down->getHeadEntry();
if (inDiagsArea && inDiagsArea->getNumber(DgSqlCode::WARNING_) > 0)
{
ComDiagsArea *diagsArea = up_entry->getDiagsArea();
if (diagsArea == NULL)
diagsArea =
ComDiagsArea::allocate(this->getGlobals()->getDefaultHeap());
else
diagsArea->incrRefCount (); // the setDiagsArea below will decr the ref count
if (inDiagsArea)
diagsArea->mergeAfter(*inDiagsArea);
up_entry->setDiagsArea (diagsArea);
}
up_entry->upState.parentIndex =
pentry_down->downState.parentIndex;
up_entry->upState.setMatchNo(0);
up_entry->upState.status = ex_queue::Q_NO_DATA;
// insert into parent
qparent->up->insert();
// pstate.matches_ = 0;
qparent->down->removeHead();
return 0;
}
示例10:
ComDiagsArea *ExAddCondition(CollHeap* heap, ComDiagsArea** diagsArea,
Lng32 err, ComCondition** newCond,
Lng32 * intParam1,
Lng32 * intParam2,
Lng32 * intParam3,
const char * stringParam1,
const char * stringParam2,
const char * stringParam3)
{
//
// This version of ExRaiseSqlError is used by the expressions code. In
// addition to having slightly different parameters, it differs from the
// above version in that it puts an error condition in the supplied
// ComDiagsArea rather than in a copy.
//
// If the caller didn't pass in the address of a pointer to the
// ComDiagsArea, there's no point in creating an error condition since the
// caller won't receive it. Normally this should never happen, but right
// now it may occur until all the error processing code is in place.
//
if (diagsArea == NULL)
return NULL;
//
// The caller did pass in the address of a pointer to the ComDiagsArea. If
// the pointer is NULL, we need to allocate the ComDiagsArea and put its
// address in the pointer. Otherwise, we will put the error condition in
// the ComDiagsArea that was supplied.
//
if (*diagsArea == NULL) {
//
// If the heap is NULL, we can't allocate the ComDiagsArea. This should
// never happen.
//
if (heap == NULL)
return NULL;
*diagsArea = ComDiagsArea::allocate(heap);
}
ComDiagsArea *da = *diagsArea;
ComCondition *cond = da->makeNewCondition();
cond->setSQLCODE(err);
if (intParam1)
cond->setOptionalInteger(0, *intParam1);
if (intParam2)
cond->setOptionalInteger(1, *intParam2);
if (intParam3)
cond->setOptionalInteger(2, *intParam3);
if (stringParam1)
cond->setOptionalString(0, stringParam1);
if (stringParam2)
cond->setOptionalString(1, stringParam2);
if (stringParam3)
cond->setOptionalString(2, stringParam3);
da->acceptNewCondition();
if (newCond)
*newCond = cond;
return *diagsArea;
}
示例11: insertUpQueueEntry
// Insert a single entry into the up queue and optionally
// remove the head of the down queue
//
// Right now this function does not handle data rows, only error
// and end-of-data. It could possibly be extended to handle a data
// row. I have not looked at that closely enough yet.
//
void ExFastExtractTcb::insertUpQueueEntry(ex_queue::up_status status,
ComDiagsArea *diags,
NABoolean popDownQueue)
{
ex_queue_entry *upEntry = qParent_.up->getTailEntry();
ex_queue_entry *downEntry = qParent_.down->getHeadEntry();
ExFastExtractPrivateState &privateState =
*((ExFastExtractPrivateState *) downEntry->pstate);
// Initialize the up queue entry.
//
// copyAtp() will copy all tuple pointers and the diags area from
// the down queue entry to the up queue entry.
//
// When we return Q_NO_DATA if the match count is > 0:
// * assume down queue diags were returned with the Q_OK_MMORE entries
// * release down queue diags before copyAtp()
//
if (status == ex_queue::Q_NO_DATA && privateState.matchCount_ > 0)
{
downEntry->setDiagsArea(NULL);
upEntry->copyAtp(downEntry);
}
else
{
upEntry->copyAtp(downEntry);
downEntry->setDiagsArea(NULL);
}
upEntry->upState.status = status;
upEntry->upState.parentIndex = downEntry->downState.parentIndex;
upEntry->upState.downIndex = qParent_.down->getHeadIndex();
upEntry->upState.setMatchNo(privateState.matchCount_);
// Move any diags to the up queue entry
if (diags != NULL)
{
ComDiagsArea *atpDiags = upEntry->getDiagsArea();
if (atpDiags == NULL)
{
// setDiagsArea() does not increment the reference count
upEntry->setDiagsArea(diags);
diags->incrRefCount();
}
else
{
atpDiags->mergeAfter(*diags);
}
}
// Insert into up queue
qParent_.up->insert();
// Optionally remove the head of the down queue
if (popDownQueue)
{
privateState.init();
qParent_.down->removeHead();
}
}
示例12: getGlobals
short ExExeUtilPopulateInMemStatsTcb::work()
{
// short rc = 0;
Lng32 cliRC = 0;
// if no parent request, return
if (qparent_.down->isEmpty())
return WORK_OK;
// if no room in up queue, won't be able to return data/status.
// Come back later.
if (qparent_.up->isFull())
return WORK_OK;
ex_queue_entry * pentry_down = qparent_.down->getHeadEntry();
ExExeUtilPrivateState & pstate =
*((ExExeUtilPrivateState*) pentry_down->pstate);
// Get the globals stucture of the master executor.
ExExeStmtGlobals *exeGlob = getGlobals()->castToExExeStmtGlobals();
ExMasterStmtGlobals *masterGlob = exeGlob->castToExMasterStmtGlobals();
ContextCli * currContext = masterGlob->getStatement()->getContext();
while (1)
{
switch (step_)
{
case INITIAL_:
{
if (getDiagsArea())
{
getDiagsArea()->clear();
getDiagsArea()->deAllocate();
}
setDiagsArea(ComDiagsArea::allocate(getHeap()));
step_ = PROLOGUE_;
}
break;
case PROLOGUE_:
{
if (disableCQS())
{
step_ = ERROR_;
break;
}
if (setSchemaVersion(pimsTdb().sourceTableCatName_))
{
step_ = ERROR_;
break;
}
// set sqlparserflags to allow use of volatile schema in queries.
masterGlob->getStatement()->getContext()->
setSqlParserFlags(0x10000);//ALLOW_VOLATILE_SCHEMA_IN_TABLE_NAME
step_ = DELETE_STATS_;
}
break;
case DELETE_STATS_:
{
Int32 qry_array_size = sizeof(deleteStatsQuery)
/ sizeof(QueryString);
const QueryString * queryString = deleteStatsQuery;;
char * gluedQuery;
Lng32 gluedQuerySize;
glueQueryFragments(qry_array_size, queryString,
gluedQuery, gluedQuerySize);
Lng32 extraSpace =
ComMAX_3_PART_EXTERNAL_UTF8_NAME_LEN_IN_BYTES /* fullyQualTableName */
+ 20 /* UID */
+ 200 /* overhead */;
char * query = new(getHeap()) char[gluedQuerySize + extraSpace];
str_sprintf(query, gluedQuery,
(char*)pimsTdb().inMemHistogramsTableName_,
pimsTdb().uid_);
cliRC =
cliInterface()->executeImmediate(query);
if (cliRC >= 0)
{
str_sprintf(query, gluedQuery,
(char*)pimsTdb().inMemHistintsTableName_,
pimsTdb().uid_);
cliRC =
cliInterface()->executeImmediate(query);
}
// Delete new'd string
NADELETEBASIC(gluedQuery, getHeap());
//.........这里部分代码省略.........
示例13: while
//.........这里部分代码省略.........
//
// Transition to this state from ...
// 1. ExSeq_WORKING_READ - a child reply with the type SQLERROR.
// 2. ExSeq_WORKING_RETURN
// 3. ExSeq_OVERFLOW_READ
// 4. ExSeq_OVERFLOW_WRITE
// Remain in this state until ..
// 1. The error row has been returned to the parent.
//
// Transition from this state to ...
// 1. ExSeq_CANCELLED - In all cases.
//
case ExSeq_ERROR:
{
// If there is no room in the parent queue for the reply,
// try again later.
//
if (qparent_.up->isFull())
// LCOV_EXCL_START
return WORK_OK;
// LCOV_EXCL_STOP
ex_queue_entry *pentry_up = qparent_.up->getTailEntry();
// Cancel the child request - there must be a child request in
// progress to get to the ExSeq_ERROR state.
//
qchild_.down->cancelRequestWithParentIndex
(qparent_.down->getHeadIndex());
// Construct and return the error row.
//
if (workAtp_->getDiagsArea()) {
ComDiagsArea * da = workAtp_->getDiagsArea();
pentry_up->setDiagsArea(da);
da->incrRefCount();
workAtp_->setDiagsArea(0);
}
pentry_up->upState.status = ex_queue::Q_SQLERROR;
pentry_up->upState.parentIndex
= pentry_down->downState.parentIndex;
pentry_up->upState.downIndex = qparent_.down->getHeadIndex();
pentry_up->upState.setMatchNo(pstate->matchCount_);
qparent_.up->insert();
// Transition to the ExSeq_CANCELLED state.
//
pstate->step_ = ExSeq_CANCELLED;
break;
}
// ExSeq_WORKING_READ
//
// Transition to this state from ...
// 1. ExSeq_EMPTY - If a request is started.
// 2. ExSeq_WORKING_RETURN -
// 3. ExSeq_OVERFLOW_WRITE -
// Remain in this state until ...
// 1. All child replies including EOD have been processed.
// 2. A SQLERROR row is received.
// 3. Enough rows have been returned.
// 4. The request is cancelled.
// 5. End of partition is reached
// Transition from this state to ...
// 2. ExSeq_ERROR - If an SQLERROR rows is received.
// 3. ExSeq_CANCELLED - If the request is cancelled.
示例14: getGlobals
ExWorkProcRetcode ExCancelTcb::work()
{
ExMasterStmtGlobals *masterGlobals =
getGlobals()->castToExExeStmtGlobals()->castToExMasterStmtGlobals();
CliGlobals *cliGlobals = masterGlobals->getCliGlobals();
while ((qparent_.down->isEmpty() == FALSE) &&
(qparent_.up->isFull() == FALSE))
{
ex_queue_entry *pentry_down = qparent_.down->getHeadEntry();
switch (step_)
{
case NOT_STARTED:
{
if (pentry_down->downState.request == ex_queue::GET_NOMORE)
step_ = DONE;
else
{
retryCount_ = 0;
// Priv checking is done during compilation. To support
// REVOKE, prevent a prepared CANCEL/SUSPEND/ACTIVATE
// that was compiled more than 1 second ago from executing
// by raising the 8734 error to force an AQR.
Int64 microSecondsSinceCompile = NA_JulianTimestamp() -
masterGlobals->getStatement()->getCompileEndTime();
if (microSecondsSinceCompile > 1000*1000)
{
ComDiagsArea *diagsArea =
ComDiagsArea::allocate(getGlobals()->getDefaultHeap());
*diagsArea << DgSqlCode(-CLI_INVALID_QUERY_PRIVS);
reportError(diagsArea);
step_ = DONE;
break;
}
// Figure out which MXSSMP broker to use.
if (cancelTdb().getAction() == ComTdbCancel::CancelByPname)
{
int nid = -1;
int rc = msg_mon_get_process_info(cancelTdb().getCancelPname(),
&nid, &pid_);
switch (rc)
{
case XZFIL_ERR_OK:
cpu_ = (short) nid;
break;
case XZFIL_ERR_NOTFOUND:
case XZFIL_ERR_BADNAME:
case XZFIL_ERR_NOSUCHDEV:
{
ComDiagsArea *diagsArea =
ComDiagsArea::allocate(getGlobals()->getDefaultHeap());
*diagsArea << DgSqlCode(-EXE_CANCEL_PROCESS_NOT_FOUND);
*diagsArea << DgString0(cancelTdb().getCancelPname());
reportError(diagsArea);
step_ = DONE;
break;
}
default:
{
char buf[200];
str_sprintf(buf, "Unexpected error %d returned from "
"msg_mon_get_process_info", rc);
ex_assert(0, buf);
}
}
if (step_ != NOT_STARTED)
break;
}
else if (cancelTdb().getAction() == ComTdbCancel::CancelByNidPid)
{
cpu_ = (short) cancelTdb().getCancelNid();
pid_ = cancelTdb().getCancelPid();
// check that process exists, if not report error.
char processName[MS_MON_MAX_PROCESS_NAME];
int rc = msg_mon_get_process_name(cpu_, pid_, processName);
if (XZFIL_ERR_OK == rc)
; // good. nid & pid are valid.
else
{
if ((XZFIL_ERR_NOTFOUND != rc) &&
(XZFIL_ERR_BADNAME != rc) &&
(XZFIL_ERR_NOSUCHDEV != rc))
{
// Log rc in case it needs investigation later.
char buf[200];
str_sprintf(buf, "Unexpected error %d returned from "
"msg_mon_get_process_name", rc);
SQLMXLoggingArea::logExecRtInfo(__FILE__, __LINE__,
buf, 0);
}
char nid_pid_str[32];
//.........这里部分代码省略.........
示例15: if
short ExTupleFlowTcb::work()
{
// This is some sort of a hack to fix the problems with the number of rows
// inserted returned to the user for packed tables. For these tables, rows
// are packed (by the Pack node which is the left child of this tuple flow)
// before they are sent off to DP2. DP2 has no idea that it's actually
// inserting multiple logical rows (as perceived by the user). However,
// there is actually a hidden count of logical rows stored as the first 4
// bytes of the packed row. This counter is supposed to keep track of a sum
// of this number in each packed row it gets from the left. When all
// insertions are done, this sum is used to override what's stored by the
// PA node in the executor global area the number of rows inserted. This is
// not a very good place to have this fix, but since this is a low-priority
// problem at this time, here we are.
//
//
// NB: The code introduced for this fix
// could be safely removed if desired. Also, all changes are within
// this file.
//
if (qParent_.down->isEmpty())
return WORK_OK;
ex_queue_entry * pentry_down = qParent_.down->getHeadEntry();
ExTupleFlowPrivateState & pstate =
*((ExTupleFlowPrivateState*) pentry_down->pstate);
if ((tflowTdb().userSidetreeInsert()) &&
(pentry_down->downState.request == ex_queue::GET_EOD) &&
(NOT pstate.parentEOD_))
{
pstate.step_ = MOVE_EOD_TO_TGT_;
}
else if ((pstate.step_ != DONE_) &&
(pstate.step_ != CANCELLED_) &&
(pentry_down->downState.request == ex_queue::GET_NOMORE))
{
if (pstate.step_ == EMPTY_)
pstate.step_ = DONE_;
else
pstate.step_ = CANCELLED_;
}
while (1)
{
switch (pstate.step_)
{
case EMPTY_:
{
if (qSrc_.down->isFull())
return WORK_OK;
ex_queue_entry * src_entry = qSrc_.down->getTailEntry();
src_entry->downState.request = pentry_down->downState.request;
src_entry->downState.requestValue =
pentry_down->downState.requestValue;
if ((tflowTdb().firstNRows() >= 0) &&
(pentry_down->downState.request != ex_queue::GET_N))
{
src_entry->downState.request = ex_queue::GET_N;
src_entry->downState.requestValue = tflowTdb().firstNRows();
}
src_entry->downState.parentIndex =
qParent_.down->getHeadIndex();
src_entry->passAtp(pentry_down);
qSrc_.down->insert();
// just checking to make sure we got a diags area from the CLI if we are
// executing a non-tomic insert. This is done now so that we don't have to do it in multiple
// places later.
if (tflowTdb().isNonFatalErrorTolerated()) {
ComDiagsArea *cliDiagsArea = pentry_down->getDiagsArea();
ex_assert(cliDiagsArea, "In Tupleflow : Non-Atomic insert received no diags area from the CLI");
}
pstate.parentEOD_ = FALSE;
pstate.srcEOD_ = FALSE;
pstate.matchCount_ = 0;
pstate.tgtRequests_ = 0;
pstate.tgtRowsSent_ = FALSE;
pstate.noOfUnPackedRows_ = 0;
pstate.srcRequestCount_ = -1;
pstate.nonFatalErrorSeen_ = FALSE;
// Set startRightIndex_ so that CancelReques doesn't do anything.
pstate.startRightIndex_ = pstate.srcRequestCount_;
pstate.step_ = MOVE_SRC_TO_TGT_;
}
break;
case MOVE_SRC_TO_TGT_:
{
// if there are some rows in source up queue, move them to target.
while ((! qSrc_.up->isEmpty()) && (! qTgt_.down->isFull())
&& (pstate.step_ != HANDLE_ERROR_))
//.........这里部分代码省略.........